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

20

He estado trabajando en un proyecto de control de eBike en el Arduino MEGA2560. El programa ejecuta 3x loops de control PID, un loop de control de capacidad de la batería (interpolación basada en tablas de consulta), un velocímetro (muestras basadas en un interruptor de láminas) y una pantalla LCD para mostrar información. Sus entradas son 3 señales analógicas: voltaje de la batería, corriente y entrada de aceleración del usuario, así como una entrada digital: señal de encendido / apagado del velocímetro (interruptor de lámina). Actualmente, con todo esto ejecutándose en aritmética "larga", Arduino logra completar 10 bucles por segundo. Como la pantalla TFT LCD toma enormes cantidades de poder de cómputo, estoy pensando en reemplazarla con una pantalla alfanumérica.

Las salidas consisten en una señal de aceleración analógica que va a un controlador de motor, la pantalla LCD y posiblemente 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 PWM de Arduino 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 podría darme al menos 100 muestras por segundo (10 veces lo que logra el Arduino ). Además, para evitar los puntos flotantes, mis cálculos utilizan 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 punto flotante podría ser interesante para simplificar las matemáticas en el código.

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

    
pregunta Eliott W

6 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: tamaño aproximado, presupuesto, proveedor

Elige uno de:

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

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

  • MCU pequeña. Cortex-M / PIC16. No es realmente suficiente espacio para un verdadero sistema operativo, tal vez solo un programador de tareas ligero. ~ $ 2.

  • MCU pequeña. Solo realmente para aplicaciones en las que se preocupa por cada último microampo de consumo de energía. ~ $ 1 o menos.

En esta etapa, también debe considerar qué proveedores y cadenas de herramientas le gustan y cuáles no. Eche un vistazo al costo de cosas como los dispositivos de depuración en circuito e IDE.

Paso 2: Periféricos mínimos

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

Paso 3: Prototipo

Elija algo que cumpla con los criterios anteriores, al azar si es necesario, comience, averigüe qué tan factible es y cuánto espacio / capacidad 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 tengas el prototipo, puedes decirte a ti mismo: "Necesito uno como este, pero con más X" y deja que eso guíe tus decisiones.

Paso 4: Reducir

Por lo 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 uno más pequeño y barato para que quepa. También puede dedicar tiempo al arte de adaptar el software a menos recursos. Lo que vale la pena depende de cuántas unidades vayas a fabricar.

    
respondido por el pjc50
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 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).

    
respondido por el dim
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 consigues que la gente diseñe hardware para ti. Más bien, usted propone un diseño de hardware y hace preguntas al respecto.

Dicho esto ...

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 las 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 deben admitir periféricos externos, considere el tipo de comunicaciones serie que son necesarias. El hardware externo puede necesitar SPI, I2C u otro tipo de UART. Si la velocidad de datos es alta, es mejor encontrar un procesador con funciones DMA asociadas a sus puertos de comunicación serie.

Finalmente, si se trata de una aplicación de procesador integrado (que normalmente significa un procesador dedicado a una tarea), considere desglosar los requisitos en varios grupos y asignar un procesador a cada uno. Por ejemplo, es probable que un procesador de visualización de GUI no necesite una función ADC. Este enfoque objetivo para resolver problemas ha demostrado ser exitoso en software y al disminuir los precios de los procesadores también se puede aplicar al hardware.

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

    
respondido por el 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, que definitivamente es un factor clave para un aficionado. También el programador. Puede ser un $ 20 o mucho más. Las herramientas más baratas parecen más la norma ahora, así que quizás esto sea algo del pasado pronto.

Además, si lo hace usted mismo, los paquetes como TQFP son más fáciles que, por ejemplo, BGA. Es difícil conseguir un BGA grande, basado en la experiencia personal.

    
respondido por el BSEE
2

Si el producto es relativamente sensible a los precios y usted cuenta con una financiación decente para el desarrollo, puede obtener un montón de paneles de evaluación y perfilar el código de cada uno para obtener una idea. Eso debería ser bastante sencillo si su código está escrito en una C. portátil. Además del micro, estará evaluando 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 del cuello de botella directamente en el IDE sin hardware.

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

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

Si apunta a un procesador más barato sin FPU, es probable que desee hacer un perfil del código PID en su forma final. Asegúrese de que se incluyan todos los factores de escalado, linealización y calibración, ya que pueden sumarse 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 BT o Wifi o modo de host USB y 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 licencias 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 también son de restricción pueden ser: paquete a través del agujero, DAC interno, Ethernet interna PHY, FPU. Probablemente ninguno de estos sea necesario y puede restringir indebidamente sus elecciones prematuramente.

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

    
respondido por el Spehro Pefhany
1

Hay varias plataformas diferentes que puedes empezar a ver 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 lenta y me pregunto cómo lo descubrió. Por otro lado, desea preguntarse si necesitará algún tipo de interfaces como SPI, CAN, I2C o UART. Todos pueden tener sus propios beneficios y usted debe considerar si hablará con uno o más esclavos. El último paso, pero probablemente el más importante, sería adivinar cuántos pines del microcontrolador necesitará usar.

"La capacidad de leer señales analógicas a digitales sin interrumpir el procesador sería excelente". Puedo adivinar que no desea tratar con búferes externos o internos que circularán sus datos y posiblemente ralentizarán su procesamiento de datos. ¿Está bien? Si es así, es más programación que hacer, pero los procesadores suelen ser capaces de manejar la velocidad de 100 muestras por segundo. Dependerá de usted programar el reloj, la frecuencia de muestreo y el resto.

También, considere las interrupciones en su programa si desea mantener los datos de muestreo continuamente y realizar otra tarea cuando se levanta una bandera.

    
respondido por el 12Lappie

Lea otras preguntas en las etiquetas