Buen proyecto. Aquí hay algunos consejos, pero sería difícil generalizar esto para cada proyecto.
Comience con los requisitos computacionales
Esto es lo que le dirá qué tipo de núcleo necesita y el rendimiento general de la MCU. Le sugiero que comience con esto, ya que, obviamente, no se puede extender utilizando componentes externos, a diferencia de los periféricos.
Primero, parece que utilizas operaciones matemáticas pesadas con enteros grandes dentro del bucle. Entonces, como sugirió, 32 bits sería útil aquí, por lo que ARM se presenta como un candidato ideal. En cuanto a la frecuencia de operación: actualmente, está usando un Arduino MEGA2560 (funcionando a 16MHz, supongo) y puede hacer 10 bucles / s. Si desea alcanzar 100 loops / s, debería estar bien con un Cortex-M3 / M4 en el rango de 100MHz o más (estimación aproximada). Tenga en cuenta que el Cortex-M4F tiene una unidad de punto flotante.
Ya hemos reducido la selección.
Requisitos de memoria
Esto es fácil: elija la MCU que tenga la mayor cantidad de RAM / Flash de su rango para el prototipo. Una vez que valide el prototipo, cambie a la MCU del mismo rango que tiene suficiente RAM / Flash, ahora que conoce sus requisitos exactos.
Tenga en cuenta que no creo que su aplicación necesite grandes cantidades de memoria.
Ahora, los periféricos
Absolutamente necesitas algo de ADC. Todos los MCU de la gama que estamos viendo tienen algunos, por lo que no es un criterio útil. Tampoco lo son las entradas / salidas digitales, excepto si necesita un gran número de ellas (lo que no parece ser su caso).
Parece que necesitas un DAC. Sin embargo, esto es algo que no encontrará fácilmente y reducirá demasiado a los candidatos. Por lo tanto, no mantenemos ese requisito y nos quedaremos con un PWM y un paso bajo (lo que ciertamente es aceptable, en realidad).
No menciona ninguna interfaz de comunicación, excepto la pantalla LCD (más adelante en eso). De todos modos, todas las MCU tienen I2C / SPI / UART / ... si necesitas algo.
La pantalla LCD
Este es más complicado, porque hay muchas soluciones diferentes que ponen requisitos completamente diferentes en la MCU. Pero no elija la pantalla LCD dependiendo de la MCU. Elija la pantalla LCD que desea para su producto y luego seleccione la MCU que la impulsará de manera eficiente.
- Si desea una pantalla LCD de caracteres: entonces la forma más fácil y la menos restrictiva para la MCU es hablar con ella a través de alguna interfaz serial (a menudo SPI). De esta manera, no utilizará demasiados PIN, puede usar MCU más pequeños / más baratos y la velocidad no es un problema.
- Si desea un TFT LCD gráfico: si es pequeño, el enlace en serie aún puede ser apropiado. Sin embargo, para 320x200 o más y si desea tener una interfaz gráfica agradable, empezará a querer comunicarse con una interfaz paralela. En este caso, o bien utiliza GPIO (pero eso supondrá una carga mayor para la MCU porque tendrá que golpear las líneas de control) o elige una MCU que tenga una interfaz LCD dedicada (que a menudo es lo mismo que una interfaz de memoria externa). Este último pone una fuerte restricción a la elección de MCU, pero no tiene otras restricciones fuertes, así que ...
Ahora, tú eliges
Vaya al sitio web de ST Micro / NXP / Atmel y use sus herramientas de selección de MCU. También pasará mucho tiempo leyendo hojas de datos. Toma esta vez No se desperdicia. Cualquier cosa que aprendas aquí, incluso si no la usas específicamente para este proyecto, puede ser útil.
En este punto, también debe observar la cantidad de PIN que realmente necesitará y verificar el esquema de multiplexación de los candidatos MCU elegidos para verificar que puede usar todas las funciones de PIN que necesita. Porque, obviamente, querrá tomar las MCU con el menor número de pines que cumplan con sus requisitos (por razones de costo / bienes raíces de PCB).
Compruebe los precios / disponibilidad en Mouser / Digikey. Pero no deberías necesitar algo particularmente caro aquí. Tal vez 5 € o menos.
Lo último en relación con el control LCD
Parece que la actualización de la pantalla LCD es parte de su bucle principal. No debería. Especialmente si estás haciendo un bucle 100 veces por segundo, es inútil. Haga que el bucle de control calcule todo y ajuste el comando del motor en cada iteración, pero simplemente actualice los valores para mostrarlos en algún lugar de la memoria. Luego, haga que otro bucle con prioridad más baja muestre esta información al usuario cuando no haya nada más importante que hacer.
Sí, idealmente, requiere un cambio de tareas y esas cosas. En realidad, un sistema operativo real (búsqueda FreeRTOS, sistema operativo Coocox, Nuttx, ... son muy pequeños, se utilizan en gran medida en Cortex-M y proporcionan los mecanismos de multitarea necesarios).