¿Cómo se me ocurre una lista de requisitos para un microcontrolador para mi proyecto? ¿Cómo puedo encontrar microcontroladores que se ajusten?


20

He estado trabajando en un proyecto de control de eBike en el Arduino MEGA2560. El programa ejecuta 3 bucles de control PID, un bucle de control de capacidad de la batería (interpolación basada en tablas de búsqueda), un velocímetro (muestras basadas en un interruptor de láminas), así como una pantalla LCD para mostrar información. Sus entradas son 3 señales analógicas: voltaje de la batería, corriente y entrada del acelerador del usuario, así como una entrada digital: señal de activación / desactivación del velocímetro (interruptor de láminas). Actualmente, con todo esto funcionando en aritmética "larga", el Arduino logra completar 10 bucles por segundo. Como la pantalla LCD TFT requiere enormes cantidades de potencia computacional, estoy pensando en reemplazarla por una pantalla alfanumérica.

Las salidas consisten en una señal analógica del acelerador que va a un controlador de motor, la pantalla LCD y potencialmente algunos otros dispositivos que requieren señales analógicas. Por lo tanto, los convertidores ADC son esenciales y DAC sería muy útil, aunque actualmente estoy usando la salida Arduino PWM con un filtro de paso bajo RC. Del mismo modo, la capacidad de leer señales digitales y analógicas sin interrumpir el procesador sería excelente.

Me gustaría potencialmente hacer un producto de consumo a partir de esto, por lo tanto, quiero construir mi propia plataforma desde cero con un microcontrolador diferente que pueda darme al menos 100 muestras por segundo (10 veces lo que está logrando el Arduino). Además, para evitar los puntos flotantes, mis cálculos usan variables largas y, en consecuencia, números mayores de 16 bits, por lo que supongo que una MCU de 32 bits sería una buena idea. Además, una MCU capaz de hacer cálculos de coma flotante podría ser interesante para simplificar las matemáticas en el código.

Al final, no estoy seguro de cómo comenzar a buscar MCU que satisfagan estos requisitos y permitan una transición rápida del entorno Arduino. ¡Cualquier orientación sobre cómo encontrar tales MCU sería muy apreciada!


1
No necesariamente quiero ser partes recomendadas, sino solo un método o plataforma o cualquier orientación sobre cómo encontrar la plataforma que necesito.
Eliott W

55
Esto es mucho mejor que su pregunta anterior, pero sigue siendo muy amplio y algunos puntos en sus requisitos no están claros. Por ejemplo, ¿qué quieres decir con "sin interrumpir el procesador"? Supongo que tampoco quieres hacer E / S encuestadas. También debe tener una mejor idea de la cantidad exacta de computación que debe realizarse en cada conjunto de muestras.
Dave Tweed

1
Debería considerar usar matemática entera. Es la cosa justa que hacer.
Scott Seidman


44
La matemática entera, larga o corta, es mucho más rápida que el punto flotante; y la matemática entera que es más larga que la profundidad de bits "nativa" del procesador también será lenta. Entonces, 32 bits suena como una muy buena idea, quizás uno de los dispositivos de tipo "DSP".
pjc50

Respuestas:


18

(Esta es una guía genérica. Sospecho que también podría beneficiarse de la optimización del código, pero eso está fuera del alcance de este sitio web).

Paso 1: dimensionamiento aproximado, presupuesto, proveedor

Elige uno de:

  • Computadora (Raspberry Pi, Beagleboard, placa PC104, Intel Edison, etc.). Arranca un sistema operativo de uso general y tiene mucha potencia de procesamiento. Más caro y hambriento de poder. $ 10- $ 100.

  • Gran MCU. ARM Cortex-A / PIC32 / dsPIC / AVR32 / TI C DSP, etc. Potencia de computación decente, sistema operativo opcional. ~ $ 5.

  • Pequeño MCU. Cortex-M / PIC16. Realmente no hay suficiente espacio para un sistema operativo verdadero, tal vez solo un programador de tareas liviano. ~ $ 2.

  • Tiny MCU. Realmente solo para aplicaciones en las que te preocupas por cada microamperio de consumo de energía. ~ $ 1 o menos.

También debe considerar en esta etapa qué proveedores y cadenas de herramientas le gustan o no. Eche un vistazo al costo de cosas como dispositivos de depuración en circuito e IDE.

Paso 2: periféricos mínimos

¿Necesitas cosas como USB? PCI? HDMI? SATA? ADC o DAC inusualmente rápidos? Casi todas las categorías "pequeña" o "pequeña" no tienen estas, aunque USB está bastante disponible.

Paso 3: prototipo

Elija algo que cumpla con los criterios anteriores, al azar si es necesario, comience, descubra qué tan factible es y cuánto espacio / potencia de procesamiento necesita. Ya has hecho algo de esto. Escribir en C debería hacer que gran parte de la lógica sea portátil.

Una vez que tenga el prototipo, puede decirse: "Necesito uno como este, pero con más X" y dejar que eso guíe sus decisiones.

Paso 4: reducir

En general, es más fácil comenzar con el miembro más grande (la mayoría de Flash y RAM) de una familia de CPU, escribir v1 de su aplicación y luego elegir una más pequeña y más barata para que se ajuste. También puede dedicar tiempo al arte de adaptar el software a menos recursos. Lo que vale la pena depende de cuántas unidades vas a hacer.


14
Paso 0: cadena de herramientas (entorno de desarrollo de firmware). Encuentre el (los) entorno (s) de desarrollo que puede hacer que funcione para usted. Aquí es donde se gana o se pierde. Incluso si tiene silicio que se ajusta perfectamente, pero no puede hacer que el entorno de desarrollo de firmware funcione (por cualquier motivo), entonces su proyecto no despegará. (Caso en cuestión: el IDE de Arduino ha despegado su prototipo basado en Arduino.)
Nick Alexeev

8
Categorizar Cortex-M como un "MCU pequeño", y PIC32 / AVR32 como "MCU grande" parece un poco desafortunado. No he usado PIC32 / AVR32, personalmente, pero basándome en un vistazo rápido al rango de especificaciones, diría que todos deberían estar en el mismo soporte. (Hay MCU Cortex-M que funcionan a> 200MHz, tienen muchos megabytes de flash y más de medio megabyte de RAM)
Aleksi Torhamo

13

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).


Muchas gracias por su respuesta integral! Me doy cuenta de que todas las MCU ARM Cortex funcionan en 3.3V. Mi señal del acelerador necesita escalar entre 1 y 5V. Supongo que si quiero usar un controlador ARM tendré que encontrar una manera de aumentar el voltaje, ya que estará limitado a 3.3V desde la MCU.
Eliott W

Sí. La señal del acelerador es la salida analógica, ¿verdad? En ese caso, podría usar un opamp para amplificarlo.
tenue

No estoy seguro de estar de acuerdo con la última oración acerca de requerir "un sistema operativo real". Supongo que depende de cuánto en términos de soluciones preparadas desee. Si desea algo en el que pueda simplemente dejar caer su lógica comercial y comenzar a sacar unidades, sí, un sistema operativo completo (tenga en cuenta que esto no tiene que significar algo como Windows o incluso Linux) es ciertamente útil.
un CVn

1
@ MichaelKjörling, por supuesto, no quise decir algo ni remotamente como Linux. Pero más bien algo como FreeRTOS, Coocox OS o Nuttx, por ejemplo. Esto es lo que considero un sistema operativo real , aunque muy pequeño. Escribí eso porque, de hecho, hacer esto en metal desnudo llevará más tiempo, será difícil de depurar y será menos flexible. Y el entorno Arduino (aunque estoy lejos de ser un experto en esto) no parece proporcionar mecanismos de tareas (y, como tal, no lo considero un sistema operativo real ).
tenue

1
Ah Bueno, entonces leí mal la parte "real". Solo para el beneficio de nosotros, los forasteros que ocasionalmente terminamos aquí, puede considerar aclarar esa parte en su respuesta.
un CVn

4

Tenga en cuenta que este es un tema amplio que puede responderse correctamente utilizando múltiples enfoques (subjetivos).

Además, el formato stackexchange no es bueno para diseñar soluciones para problemas. Por ejemplo, rara vez hace que la gente diseñe hardware para usted. En cambio, propone un diseño de hardware y hace preguntas al respecto.

Dicho eso ...

Comience con las características del procesador que no puede cambiar. Como la velocidad y el tamaño de la memoria (si corresponde). Investigue si necesita interrupciones y cuán complejo debe ser el manejo de interrupciones.

Si necesita soporte periférico como ADC o DAC, la situación es más compleja. En caso de que estas características estén integradas en el procesador o sean externas al procesador. El precio, la precisión e incluso el ruido son factores en esta decisión.

Si se admiten periféricos externos, tenga en cuenta el tipo de comunicaciones en serie que son necesarias. El hardware externo puede necesitar SPI, I2C u otro tipo de UART. Si la velocidad de datos es alta, podría ser mejor encontrar un procesador con características DMA asociadas con sus puertos de comunicación serie.

Finalmente, si se trata de una aplicación de procesador integrada (que normalmente significa un procesador dedicado a una tarea), considere dividir los requisitos en varios grupos y asignar un procesador a cada uno. Por ejemplo, un procesador de pantalla GUI probablemente no necesita una función ADC. Este enfoque objetivo para resolver problemas ha demostrado ser exitoso en software y con la caída de los precios del procesador también se puede aplicar al hardware.

En el mundo real, este enfoque es iterativo. Es decir, muchos proyectos comienzan con un procesador e intercambian diferentes procesadores a medida que ocurren problemas de hardware y / o software o cambia el alcance del proyecto.


Eres un mejor juez de qué tipo de números esperar que el compilador. Evitaría el enfoque genérico de usar flotadores. Por ejemplo, puede ser que los resultados flotantes no sean los mismos en diferentes plataformas. Usaría aritmética de enteros y adaptaría la solución a sus necesidades.
st2000

3

No vi a nadie mencionar el costo de las herramientas. Mi compañía eligió una TI CC2541 y descubrió que solo se compilaba con un compilador IAR de $ 4k, definitivamente un espectáculo para un aficionado. También el programador. Puede costar $ 20 o mucho más. Las herramientas más baratas parecen más la norma ahora, por lo que tal vez esto sea cosa del pasado pronto.

Además, si lo refluye usted mismo, los paquetes como TQFP son más fáciles que, por ejemplo, BGA. Un BGA grande es difícil de acertar, basado en la experiencia personal.


2

Si el producto es relativamente sensible a los precios y tiene una financiación de desarrollo decente, puede adquirir un grupo de paneles de evaluación y perfilar el código en cada uno para tener una idea. Eso debería ser bastante sencillo si su código está escrito en el portátil C. Además del micro, evaluará las cadenas de herramientas con versiones de demostración antes de desembolsar el costo de un IDE completo como IAR o Keil. En algunos casos, puede perfilar el código de cuello de botella directamente en el IDE sin hardware.

Si está fuertemente limitado por el costo de desarrollo, es posible que tenga que comprometerse para encontrar algo que no cueste demasiado para la configuración de desarrollo.

Por ejemplo, ST tiene una placa de evaluación ARM Cortex M7 con una bonita pantalla a color por <$ 100. Tiene una FPU con funciones DSP para que pueda hacer cualquier cosa de la que haya hablado fácilmente, probablemente ejecute un bucle PID a 100kHZ en lugar de solo 100Hz. Probablemente sea exagerado a menos que esa visualización sea una prioridad.

Si está buscando un procesador más barato sin FPU, entonces probablemente desee perfilar el código PID en su forma final. Asegúrese de que todos los factores de escala y linealización y calibración estén incluidos, ya que pueden sumar en términos de tiempo de procesamiento.

A menudo, los periféricos y la calidad y disponibilidad del middleware asociado (y los términos de licencia) influirán fuertemente en su elección. Si necesita el modo de host BT o Wifi o USB y los archivos FAT para almacenar en una memoria USB, o una interfaz SD rápida, todos estos serán factores importantes. Algunos chips tienen un controlador LCD incorporado y un controlador digitalizador que puede permitir el uso de un panel TFT relativamente económico. No pase por alto las tarifas de licencia a veces altas.

Si tiene alguna idea de la memoria de programa requerida, la velocidad de procesamiento y los periféricos (incluya FPU en esto), puede hacer una búsqueda paramétrica en el distribuidor antes de profundizar en las hojas de datos. Algunas cosas que son demasiado limitantes pueden ser: paquete de orificio pasante, DAC interno, PHY de Ethernet interno, FPU. Es probable que ninguno de estos sea necesario y pueden restringir indebidamente sus elecciones prematuramente.

Buena suerte con esto, es mucho trabajo hacer esto correctamente. En mi experiencia, es una economía falsa reducirlo demasiado a un producto nuevo porque los clientes inevitablemente pedirán cosas que no anticipó y desea tener alguna capacidad adicional para suministrarlas sin comenzar de nuevo. Por otro lado, si el producto es demasiado caro, no podrá vender lo suficiente a los márgenes adecuados para mantener el negocio.


1

Hay varias plataformas diferentes que puede comenzar a buscar, como Arduinos, microcontroladores PIC, FPGA y mucho más. Trabajé con Arduinos en el pasado y tiene un puerto ADC capaz de alcanzar 74kS / s. 100 muestras por segundo es extremadamente lento y me pregunto cómo lo descubrió. Por otro lado, desea preguntarse si necesitará algún tipo de interfaz como SPI, CAN, I2C o UART. Todos pueden tener sus propios beneficios y usted debe considerar si va a hablar con uno o más esclavos. El último pero probablemente el paso más importante sería adivinar cuántos pines en el microcontrolador necesitará usar.

"La capacidad de leer señales analógicas a digitales sin interrumpir el procesador sería excelente". Puedo hacer una suposición descabellada al decir que no desea lidiar con buffers externos o internos que circularán sus datos y posiblemente retrasarán su procesamiento de datos. ¿Está bien? Si es así, es más programación para usted, pero los procesadores generalmente son capaces de manejar la velocidad de 100 muestras por segundo. Depende de usted programar el reloj, la frecuencia de muestreo y el resto.

Además, considere las interrupciones en su programa si desea mantener continuamente los datos de muestreo y realizar otra tarea cuando se activa un indicador.


2
Creo que te has perdido el punto. Él tiene un prototipo construido en un Arduino. El muestreo no es lento. Los lazos de control SON lentos. Tiene tres controladores PID calculados usando coma flotante en el Arduino, por lo que son más lentos que la melaza en un invierno antártico. Entonces, el muestreo no es el problema. El código ineficiente es
JRE

Tienes razón sobre eso.
12Lappie

Sí, el problema es que aunque mis bucles están en aritmética larga y no en puntos flotantes, hay tantos cálculos que hacer que el Arduino toma una muestra una vez por bucle, mi frecuencia de muestreo es muy pequeña (actualmente 20 muestras por segundo) .
Eliott W
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.