Bom projeto. Aqui estão algumas dicas, mas seria difícil generalizar isso para cada projeto.
Comece com os requisitos computacionais
É isso que lhe dirá que tipo de núcleo você precisa e o desempenho geral do MCU. Eu sugiro que você comece com isso, pois obviamente não pode ser estendido usando componentes externos, diferentemente dos periféricos.
Primeiro, parece que você usa operações matemáticas pesadas com números inteiros grandes dentro do loop. Portanto, como você sugeriu, 32 bits seria útil aqui, portanto o ARM é um candidato ideal. Quanto à frequência de operação: atualmente, você está usando um Arduino MEGA2560 (rodando a 16MHz, presumo) e pode fazer 10 loops / s. Se você deseja atingir 100 loops / s, deve estar bem com um Cortex-M3 / M4 na faixa de 100 MHz ou mais (estimativa aproximada). Observe que o Cortex-M4F possui uma unidade de ponto flutuante.
Já reduzimos a seleção.
Requisitos de memória
Essa é fácil: escolha o MCU que possui mais RAM / Flash de sua faixa para o protótipo. Depois de validar o protótipo, mude para o MCU do mesmo intervalo que possui RAM / Flash suficiente, agora que você conhece seus requisitos exatos.
Observe que não acho que seu aplicativo precise de quantidades incríveis de memória.
Agora, os periféricos
Você absolutamente precisa de um ADC. Todas as MCUs do intervalo que estamos vendo possuem algumas, portanto não é um critério útil. Nem as entradas / saídas digitais, exceto se você precisar de um número muito grande delas (o que não parece ser o seu caso).
Você parece precisar de um DAC. No entanto, isso é algo que você não encontrará facilmente e diminuirá muito os candidatos. Portanto, não mantemos esse requisito e permaneceremos com um PWM e lowpass (o que é certamente aceitável, na verdade).
Você não menciona nenhuma interface de comunicação, exceto o LCD (posteriormente). Enfim, todos os MCUs têm I2C / SPI / UART / ... se você precisar de algum.
O LCD
Essa é mais complicada, porque existem muitas soluções diferentes que colocam requisitos completamente diferentes no MCU. Mas não escolha o LCD dependendo do MCU. Escolha o LCD desejado para o seu produto e selecione o MCU que o conduzirá com eficiência.
- Se você deseja um LCD de caractere: o mais fácil e o menos restritivo para o MCU é conversar com ele por meio de alguma interface serial (geralmente SPI). Dessa forma, ele não usará muitos PINs, você pode usar MCUs menores / mais baratos e a velocidade não é um problema.
- Se você deseja um LCD TFT gráfico: se for pequeno, o link serial ainda poderá ser apropriado. No entanto, para 320x200 ou superior e se você deseja ter uma boa interface gráfica, começará a se comunicar com a interface paralela. Nesse caso, você usa algum GPIO (mas isso sobrecarrega a MCU porque você terá que interromper as linhas de controle) ou escolhe um MCU que possui uma interface LCD dedicada (que geralmente é a mesma que uma interface de memória externa). Este último coloca uma forte restrição à escolha do MCU, mas você não tem outras restrições fortes, então ...
Agora você escolhe
Acesse o site da ST Micro / NXP / Atmel e use suas ferramentas de seleção de MCU. Você também gastará muito tempo lendo folhas de dados. Tome esse tempo. Não é desperdiçado. Tudo o que você aprender aqui, mesmo que não o utilize especificamente para este projeto, pode ser útil.
Nesse ponto, você também precisa dar uma olhada no número de PINs necessários e verificar o esquema de multiplexação dos candidatos escolhidos à MCU para verificar se você pode usar todas as funções dos PINs necessárias. Como é óbvio, convém levar as MCUs com o menor número de pinos que atenda aos seus requisitos (por razões de custo / PCB no setor imobiliário).
Verifique os preços / disponibilidade na Mouser / Digikey. Mas você não deve precisar de algo particularmente caro aqui. Talvez 5 € ou mais.
Última coisa sobre o controle do LCD
Parece que a atualização do LCD faz parte do seu loop principal. Não deveria. Especialmente se você estiver repetindo 100 vezes por segundo, é inútil. Faça o loop de controle calcular tudo e ajuste o comando do motor em cada iteração, mas apenas atualize os valores para exibir em algum lugar na memória. Em seguida, faça com que outro loop com prioridade mais baixa exiba essas informações para o usuário quando não houver nada mais importante a fazer.
Sim, idealmente, requer alguma troca de tarefas e outras coisas. Um sistema operacional real, na verdade (pesquisa FreeRTOS, Coocox OS, Nuttx, ... esses são muito pequenos, são amplamente usados no Cortex-M e fornecem os mecanismos de multitarefa necessários).