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 usas operaciones matemáticas pesadas con enteros grandes dentro del ciclo. Entonces, como sugirió, 32 bits sería útil aquí, por lo que ARM es un candidato ideal. En cuanto a la frecuencia de operación: actualmente, estás usando un Arduino MEGA2560 (supongo que funciona a 16MHz) y puedes hacer 10 bucles / s. Si desea alcanzar 100 bucles / 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 coma flotante.
Ya hemos reducido la selección.
Requisitos de memoria
Este es fácil: elija el 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 desde el mismo rango que tiene suficiente RAM / Flash, ahora que conoce sus requisitos exactos.
Tenga en cuenta que no creo que su aplicación necesite cantidades increíbles de memoria.
Ahora los periféricos
Necesitas absolutamente algo de ADC. Todas las MCU del rango que estamos analizando tienen algunas, por lo que no es un criterio útil. Tampoco lo son las entradas / salidas digitales, excepto si necesita una gran cantidad de ellas (lo cual no parece ser su caso).
Parece que necesitas un DAC. Sin embargo, esto es algo que en realidad no encontrará fácilmente y limitará demasiado a los candidatos. Por lo tanto, no cumplimos con ese requisito y nos quedaremos con un PWM y un paso bajo (que ciertamente es aceptable, en realidad).
No mencionas ninguna interfaz de comunicación, excepto la pantalla LCD (más adelante). De todos modos, todas las MCU tienen I2C / SPI / UART / ... si necesita alguna.
El LCD
Este es más complicado, porque hay muchas soluciones diferentes que imponen requisitos completamente diferentes a 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 lo conducirá de manera eficiente.
- Si desea un LCD de caracteres: la MCU más fácil y menos restrictiva es hablar con él a través de una interfaz serie (a menudo SPI). De esta manera, no usará demasiados PIN, puede usar MCU más pequeños / más baratos y la velocidad no es un problema.
- Si desea una pantalla LCD TFT gráfica: si es pequeña, el enlace en serie puede ser apropiado. Sin embargo, para 320x200 o más y si desea tener una buena interfaz gráfica, comenzará a querer comunicarse con una interfaz paralela. En este caso, usa GPIO (pero eso aumentará la carga de 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 un interfaz de memoria externa). Este último pone una fuerte restricción de la elección de MCU, pero no tiene otras restricciones fuertes, así que ...
Ahora eliges
Vaya al sitio web de ST Micro / NXP / Atmel y use sus herramientas de selección de MCU. También pasarás mucho tiempo leyendo hojas de datos. Tómese este tiempo No se desperdicia. Cualquier cosa que aprenda aquí, incluso si no lo usa específicamente para este proyecto, puede ser útil.
En este punto, también debe echar un vistazo a 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ás tomar las MCU con el menor número de pines que cumplan tus requisitos (por razones de costo / PCB de bienes raíces).
Consulte los precios / disponibilidad en Mouser / Digikey. Pero no debería necesitar algo particularmente caro aquí. Quizás 5 € más o menos.
Lo último con respecto al control LCD
Parece que la actualización de la pantalla LCD es parte de su ciclo 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 menor prioridad muestre esta información al usuario cuando no haya nada más importante que hacer.
Sí, idealmente, requiere un cambio de tareas y otras cosas. Un sistema operativo real, en realidad (buscar FreeRTOS, Coocox OS, Nuttx, ... esos son muy pequeños, se utilizan en gran medida en Cortex-M y proporcionan los mecanismos multitarea necesarios).