Bel progetto. Ecco alcuni suggerimenti, ma sarebbe difficile generalizzare questo per ogni progetto.
Inizia con i requisiti computazionali
Questo è ciò che ti dirà che tipo di core hai bisogno e le prestazioni generali dell'MCU. Ti suggerisco di iniziare con questo, dal momento che ovviamente non può essere esteso utilizzando componenti esterni, a differenza delle periferiche.
In primo luogo, sembra che tu usi pesanti operazioni matematiche con numeri interi grandi all'interno del ciclo. Quindi, come hai suggerito, qui sarebbe utile 32 bit, quindi ARM si presenta come un candidato ideale. Per quanto riguarda la frequenza di funzionamento: attualmente stai usando un Arduino MEGA2560 (funzionante a 16MHz, presumo) e puoi fare 10 loop / s. Se vuoi ottenere 100 loop / s, dovresti andare bene con un Cortex-M3 / M4 nel range di 100 MHz o più (stima approssimativa). Notare che Cortex-M4F ha un'unità a virgola mobile.
Abbiamo già ristretto la selezione.
Requisiti di memoria
Questo è facile: scegli l'MCU che ha il maggior numero di RAM / Flash della sua gamma per il prototipo. Dopo aver convalidato il prototipo, passa all'MCU dallo stesso intervallo che ha abbastanza RAM / Flash, ora che conosci i tuoi esatti requisiti.
Nota che non penso che la tua applicazione abbia bisogno di quantità incredibili di memoria.
Ora, le periferiche
Hai assolutamente bisogno di un po 'di ADC. Tutti gli MCU della gamma che stiamo esaminando ne hanno alcuni, quindi non è un criterio utile. Né sono ingressi / uscite digitali, tranne se ne hai bisogno di un numero molto grande (che non sembra essere il tuo caso).
Sembra che tu abbia bisogno di un DAC. Tuttavia, questo è qualcosa che in realtà non troverai facilmente e restringerai troppo i candidati. Quindi non manteniamo questo requisito e rimarremo con un PWM e un passa-basso (che è certamente accettabile, in realtà).
Non menzionate alcuna interfaccia di comunicazione, tranne l'LCD (in seguito). Ad ogni modo, tutte le MCU hanno I2C / SPI / UART / ... se ne hai bisogno.
Il display LCD
Questo è più complicato, perché ci sono molte soluzioni diverse che impongono requisiti completamente diversi sull'MCU. Ma non scegliere il display LCD a seconda dell'MCU. Scegli il display LCD che desideri per il tuo prodotto, quindi seleziona l'MCU che lo guiderà in modo efficiente.
- Se vuoi un LCD a caratteri: allora il più semplice e il meno vincolante per l'MCU è parlare con esso attraverso un'interfaccia seriale (spesso SPI). In questo modo non utilizzerà troppi PIN, è possibile utilizzare MCU più piccoli / economici e la velocità non è un problema.
- Se vuoi un LCD TFT grafico: se è piccolo, il collegamento seriale può ancora essere appropriato. Tuttavia, per 320x200 o più grande e se vuoi avere una bella interfaccia grafica, inizierai a voler comunicare con l'interfaccia parallela. In questo caso, o usi un po 'di GPIO (ma ciò caricherà maggiormente l'MCU perché dovrai sbattere le linee di controllo) o scegli un MCU che ha un'interfaccia LCD dedicata (che spesso è la stessa di un interfaccia di memoria esterna). Quest'ultimo pone un forte vincolo nella scelta della MCU, ma non hai altri forti vincoli, quindi ...
Ora scegli tu
Vai al sito Web di ST Micro / NXP / Atmel e usa i loro strumenti di selezione MCU. Passerai molto tempo a leggere anche i fogli dati. Prenditi questo tempo. Non è sprecato. Tutto ciò che imparerai qui, anche se non lo usi specificamente per questo progetto, può essere utile.
A questo punto, devi anche dare un'occhiata al numero di PIN effettivamente necessari e controllare lo schema multiplexing dei candidati MCU scelti per verificare che puoi utilizzare tutte le funzioni PIN necessarie. Perché ovviamente, vorrai prendere le MCU con il minor numero di pin che soddisfa i tuoi requisiti (per motivi immobiliari di costo / PCB).
Controlla i prezzi / disponibilità su Mouser / Digikey. Ma non dovresti aver bisogno di qualcosa di particolarmente costoso qui. Forse 5 € o giù di lì.
L'ultima cosa riguardante il controllo LCD
Sembra che l'aggiornamento dell'LCD sia parte del tuo loop principale. Non dovrebbe. Soprattutto se stai ripetendo 100 volte al secondo, è inutile. Fai in modo che il loop di controllo calcoli tutto e regola il comando del motore su ogni iterazione, ma aggiorna i valori per visualizzarli da qualche parte nella memoria. Quindi, fai in modo che un altro loop con priorità inferiore mostri queste informazioni all'utente quando non c'è niente di più importante da fare.
Sì, idealmente, richiede alcune attività di commutazione e roba. Un vero sistema operativo, in realtà (ricerca FreeRTOS, Coocox OS, Nuttx, ... quelli sono molto piccoli, sono ampiamente utilizzati su Cortex-M e forniscono i meccanismi multitasking richiesti).