lunes, 22 de abril de 2013

¿Cómo selecciono un microcontrolador?

La elección del microcontrolador adecuado para un producto, diseño experimental o desarrollo, puede ser una tarea desalentadora y hasta “viciada” si no se inicia con conceptos claros y elementales, desde que lanzamos el primer trazo en una hoja de diseño. No sólo hay una mínima cantidad de características técnicas a tener en cuenta, también hay cuestiones muy diversas y que no a todos pesa por igual. No será lo mismo un aficionado que se lance a construir una pequeña aplicación llamativa con LEDs y servomotores (que quizás nunca termine), respecto a una gran empresa de manufactura, donde los costos y los tiempos de espera, que puedan paralizar un proyecto de millones de unidades, se incrementen una semana. A nivel de aficionado, podemos estar acostumbrados a echar mano del primer microcontrolador que tengamos disponible en una gaveta o de aquel que se venda en la tienda más cercana a nuestro hogar.  Ahorrar un dólar para optimizar el costo de la unidad y que luego los gastos de envío nos carguen con 30 dólares nuestro “saldo deudor”, no es una idea muy brillante. Sin embargo, en un millón de unidades (juguetes de cotillón para fiestas, con luces, por ejemplo) ese ahorro de un dólar puede significar una sonrisa muy grande en nuestros jefes.

Es decir, sin llegar a la obsesión de la mezquindad absoluta, es bueno aprender a administrar recursos ya que quizás hoy, ése dólar “extra” nos sobre en el bolsillo o en la gaveta, pero si mañana debemos aprender a administrar enormes producciones en masa, de un día para el otro, puede llegar a ser un camino muy empinado y difícil de sortear. Liberarnos del “vicio” (mencionado al inicio) de aprender a seleccionar materiales en el mercado podemos hacerlo desde el principio, durante el aprendizaje. Sin caer en pagar más gastos de transportes que de materiales, nuestro producto final hablará por nosotros y los cazadores de talentos que viven buscándote en la web, sabrán diferenciarte entre la multitud.

La selección del elemento apropiado es como intentar descubrir el mejor camino

En la última parte de esta introducción debemos reconocer que al inicio de un proyecto hay una gran tentación de saltar y empezar a seleccionar el microcontrolador antes de que los detalles del sistema estén terminados de enumerar y plasmar en un sencillo listado de necesidades, esto es, una selección de acciones que deberá ejecutar nuestro desarrollo. Esta tentación es, por supuesto, una muy mala idea. Antes de administrar cualquier pensamiento orientado a la selección del microcontrolador, los ingenieros de hardware y software (es decir, tú) deben trabajar los altos niveles del sistema, con diagramas de bloques esquemáticos y diagramas de flujos operativos. Sólo entonces, existirá suficiente información para empezar a hacer una selección racional y prudente del microcontrolador.

¿Para qué quieres utilizar un 18F14K50 si sólo deseas hacer un esclavo dentro de una red RS-485 que active un PWM para un dimmer? ¿Comprendes lo que intentamos expresar? Tal vez no tengas otra cosa que ese 18F14K50 para sacar adelante ese sistema y entregarlo mañana como trabajo práctico, pero tú sabrás bien que allí podrías haber resuelto la situación con otro microcontrolador mucho más económico y de igual en eficacia operativa. Vale decir entonces que, ante la falta de opciones, cualquier elemento puede ser útil para resolver nuestro hardware, sin embargo, cuando tenemos la posibilidad de seleccionar es bueno conocer las herramientas básicas de las que dispone cualquier diseñador para alcanzar un desarrollo optimizado.

Hacer una lista de las interfaces de hardware requeridas.
Esta es una de las primeras y principales enumeraciones a realizar. Utilizando un diagrama genérico de bloques de hardware, puedes crear una lista de todas las interfaces externas que el microcontrolador tendrá que soportar. Hay dos tipos “importantes” de interfaces que necesitan ser enumeradas. Las primeras son las interfaces de comunicación. Esto incluye los periféricos, tales como USB, I2C, SPI, UART, CAN, LIN y/o todos aquellos sistemas de comunicación que habitualmente llamamos “bus de datos”. Debes poner especial atención, dentro de esta etapa, si la aplicación requiere conectividad USB o alguna forma de Ethernet. Estas interfaces afectan en gran medida a la cantidad de espacio del programa tendrá que llevar adelante el microcontrolador. Además, aquí entra a jugar un papel fundamental el factor económico.

La cantidad de pines se determina con un simple diagrama en bloques de los periféricos utilizados

Es decir, ¿me conviene utilizar un microcontrolador con USB nativo o un FTDI operado por UART? Claro, hoy la capa física del USB o de Ethernet pueden ser habituales y nativas en microcontroladores de bajo costo, sin embargo, trabajando por UART puedo utilizar todo el abanico de soluciones “hechas y listas para usar” que puede brindarme Arduino. Del otro modo, quizás deba pagarle a desarrolladores de software para que me organicen un código optimizado en un lenguaje que desconozco, orientado específicamente para una arquitectura determinada, o que me llevará meses aprender a dominar. Fíjate que en un pequeño detalle, un ATMEL con UART y un IC FTDI pueden resultar más efectivos que un PIC con Ethernet embebido. El otro gran tipo de interfaz es el de las entradas y salidas digitales I/O, ADC, DCA y PWM (sumemos los comparadores aquí). Este tipo de interfaz terminará de cerrar el número de pines que serán requeridos por el microcontrolador para la aplicación.

Requisitos de potencia del microcontrolador
En la segunda etapa de organización debemos comenzar a pensar en los requisitos de potencia de procesamiento que necesitará nuestro microcontrolador. Esto equivale a pensar si necesitamos un procesador trabajando a más de 100Mhz, o si un 16F628A a 4Mhz será suficiente para la tarea. Al igual que con el hardware, debemos tomar nota de los requisitos que serán importantes. Por ejemplo, ¿alguno de los algoritmos necesitará utilizar matemáticas en coma flotante? Aquí tendremos que comenzar a plantear los tipos de variables más grandes (mayor cantidad de bytes) que tendremos que manipular. ¿Existen lazos de control de alta frecuencia en sensores (MEMS, ADC, etc.)? Dicho de otro modo, sería estimar los tiempos y la frecuencia en que el microcontrolador  ejecutará tareas específicas. La cantidad de potencia de cálculo requerida será uno de los mayores requisitos para determinar la arquitectura y la frecuencia de trabajo del microcontrolador. Como puedes observar, ya tenemos dos puntos de apoyo muy importantes: Saber cuanta estructura externa deberá manejar con comodidad el  Microcontrolador y a qué velocidad deberá hacerlo.

Selección de la arquitectura.
Aquí comienza una de las etapas con mayor carga de interrogantes ¿Puede este proyecto  llegar a funcionar con arquitectura de 8 bits? ¿De 16 bits? ¿O necesitaré de un núcleo ARM de 32 bits? Entre la comprensión de la aplicación y el hardware a utilizar (saber que tareas hará el micro, en qué orden y con qué periféricos), sumado a las exigencias de los algoritmos de software requeridos, ya podremos comenzar a delinear una orientación hacia la arquitectura definitiva. No debes olvidar nunca que, aunque no los veas, puedes tener media docena de compañeros de trabajo en condiciones de analizar expansiones futuras de Hardware (HW) o de Firmware (FW). Esto es muy común en el mundo Freelance, pero si eres solo y la aplicación es exclusiva para ti, tampoco debes dejar de pensar que otros, al ver tu trabajo puedan opinar: “Yo le hubiera puesto un LED indicador de X”, “A mi entender le faltan servomotores que activen un brazo articulado para una mejor interacción con el usuario”, “¿Cómo no le has incorporado un sistema inteligente de carga de baterías?”, “¿No tiene Bluetooth? ¿Significa que no podrás hacerle una aplicación interactiva a un dispositivo móvil?

La arquitectura puede parecer un factor sencillo de resolver, sin embargo, siempre alguien deseará agregar algo más.

Necesidades de memoria.
La cantidad de Memoria de Programa (OTP o Flash) y la cantidad de RAM disponible, son dos componentes muy importantes en la selección de un microcontrolador. Asegurarte de que no te quedarás sin espacio para todo el programa (líneas de código) o en el espacio destinado a manejar las variables y las operaciones matemáticas que el proceso requiera es, sin duda, una la más altas de todas las prioridades de selección. Siempre será mucho más fácil seleccionar un microcontrolador con abundancia en estas características. Llegar al final de un diseño y descubrir que lo que necesitamos sería sólo un 5% más de espacio en Flash o en RAM puede significar una pérdida de tiempos imperdonables. Después de todo, siempre se puede empezar con un dispositivo bien dotado de espacio de memorias y luego pasar a otro más pequeño, dentro de la misma familia de microcontroladores. Además, la mayoría de los compiladores que se encargan de organizar el programa, hasta llevarlo a un archivo ejecutable por el microcontrolador, pueden calcular el espacio necesario a utilizar a medida que vamos incorporando código a la interfaz de desarrollo (IDE).  No te olvides de dejar espacio para la creatividad de terceros y las próximas versiones mejoradas del mismo equipo.  Esto puede ahorrarte muchos dolores de cabeza en el futuro y muchos rediseños de HW y FW.

Estamos a mitad de camino. Comienza la selección.
No, no te apures, no estamos refiriéndonos aún al microcontrolador. Hablamos de un proveedor confiable, de buena reputación en lo que respeta a variedad de materiales disponibles, a una mejor referencia sobre responsabilidad en el cumplimiento de los tiempos de entrega, un buen precio final y todo el apoyo logístico que pueda brindar como Servicio de Post-Venta. Esto último equivale a ofrecer los números de seguimiento de los envíos (tracking) a través del tipo de correo seleccionado para la entrega. Arrow, Avnet, Future Electronics, DigiKey, Mouser, Amidata (RS on-line), Elko, Cika o cualquier tienda similar alrededor del planeta que pueda brindarnos calidad, buen precio y confianza.

Ahora sí, para seleccionar el microcontrolador, con todos los datos que tenemos disponibles, podemos hacerlo desde nuestra experiencia y familiarización con una determinada marca, mediante la recomendación de otra persona, realizando una selección de algún modelo genérico dentro de varias marcas y luego decantarnos por el de menor costo o de mayor disponibilidad al momento de la compra.  La mayoría de los proveedores de circuitos integrados (sean fábricas o tiendas) tienen un motor de búsqueda que te permitirá introducir los parámetros más importantes del microcontrolador buscado (conjunto de periféricos, pines I/O, cantidad y tipo de memorias, etc.) y a medida que se introducen estas informaciones, la lista comienza a reducirse mostrando las coincidencias de los criterios de la búsqueda. De esa lista, el ingeniero puede avanzar hacia la selección definitiva de un microcontrolador.

Seleccionar dispositivos de bajo consumo, fundamental en equipos a batería.

Examinar los costos y las limitaciones energéticas
En este punto, el proceso de selección seguramente ya habrá revelado una serie de posibles candidatos. Este es un buen momento para examinar los requisitos de energía y el costo de cada unidad. Respecto a los requerimientos de energía, si nuestro trabajo final se alimentará desde una batería debemos asegurarnos de utilizar sistemas de ultra-bajo consumo energético. Aquí tenemos otro pilar fundamental en la elección. Como mencionamos al principio, la evaluación de costos es elemental, sin embargo, hay un criterio que no puede ser pasado por alto: "la relevancia de la aplicación en sí misma". La aclaración es la siguiente: no será lo mismo un procesador barato para un juguete, que uno sencillo, pero de alta gama y calidad para un equipo de electro-medicina. Quizás hasta este punto, con un microcontrolador de 25 centavos teníamos resulto el sistema, sin embargo, las altas garantías de seguridad de funcionamiento pueden llevarnos a seleccionar otro de 25 dólares. Es decir, la economía y la calidad de la aplicación deben equilibrar el fiel de la balanza.

Si necesitas proveer un gran proyecto, asegúrate de no quedarte sin mercadería pronto. Para un mismo producto, compara los recuadros.

Verificar la disponibilidad del dispositivo elegido.
Con la lista de partes potenciales en la mano, ahora es un buen momento para empezar a comprobar en qué cantidades se encuentra disponible la pieza que necesitamos. Algunas de las cosas a tener en cuenta son los tiempos de espera (plazos de entrega), la disponibilidad en grandes cantidades (en un mismo distribuidor) para asegurar una producción en masa sin detenciones, ni frenos inesperados. Si no hay en la tienda (no pueden tener millones de unidades de cada componente que exista) quizás su web puede informarte de la disponibilidad que hay en la fábrica y pueden acceder a estos materiales al momento de tu pedido (observa la imagn superior). Por otro lado y más allá de la disponibilidad en grandes volúmenes, es conocer si el producto está en fabricación activa o si ya está discontinuado (no se fabrica más). Todas estas cuestiones eran muy importantes en mis épocas de editor en N+. De hecho, uno de los casos emblemáticos de este problema fue el receptor con el TDA7000. Mucha gente se quedó con el deseo de construirlo. Existió un circuito integrado en una época que era un extraordinario receptor de comunicaciones. Tengo 6 u 8 unidades y podría hacer montajes maravillosos con ellos, pero ¿de qué serviría si nadie podría conseguirlos?

IDE, Compiladores y Herramientas de Depuración.
Esta puede ser una de las etapas de selección que no merece demasiados comentarios. Todos los fabricantes de microcontroladores se esforzarán y brindarán a los usuarios códigos de ejemplos, kit de desarrollos, compiladores de código, herramientas de depuración del mismo y hasta programadores específicos de la marca. Es importante saber que este material estará disponible para la construcción de los prototipos iniciales, de lo contrario, el proceso de desarrollo puede llegar a ser largo, tedioso y costoso.

Desde imaginar un producto hasta lograr cristalizarlo en la mente, hay un proceso que debe ser organizado y estructurado.

Simulación en Ordenador.
Si bien esta práctica no es aplicable a muchos casos, podemos crear un entorno de trabajo dentro de un Software de Simulación que sea capaz de soportar nuestro microcontrolador y experimentar allí si el comportamiento del dispositivo es el esperado. No siempre esta práctica es aconsejable para aferrarse a un concepto. Esto es, que allí funcione no significa que en la vida real suceda lo mismo, sin embargo, los resultados siempre serán muy aproximados y usar un simulador específico (recomendado por el fabricante de los microcontroladores) puede ser una herramienta segura y ágil para avanzar durante la fase de desarrollo. 

¡Comienza la experimentación!
Llegados a este punto del trabajo, aún no está dicha la última palabra. Si no existe un Kit de Desarrollo donde desplegar las conexiones a los periféricos necesarios y donde poder trabajar el FW con programación ICSP (In Circuit Serial Program), debemos comenzar a realizar un montaje en un protoboard, con los riesgos e impedimentos que muchas veces ello implica. Por citar un ejemplo muy sencillo y cotidiano, podemos mencionar a un 18F4550. (Pero 44 pines y encapsulado QFN). Riesgo de invertir una polaridad, de colocar un puente a Tierra o GND en un pin incorrecto, de cortocircuitar los pines del oscilador con el cuerpo metálico del cristal. Fallar en la construcción del circuito ICSP, olvidarnos de colocar resistencias limitadoras en las salidas a LED o en las entradas con Pull-up. Es decir, aquí es donde se adquiere un relieve significativo y válido de lo importante que es una apropiada simulación y un correcto desarrollo sobre un Kit específico, orientado al microcontrolador a utilizar.

Por supuesto y como mencionamos al principio, esto es el ideal para trabajos en grandes escalas de fabricación. Si sólo quieres divertirte y aprender un poco, estos sencillos consejos te ayudarán a aprender. Si tu objetivo es algún día llegar a la cresta de la ola, esto es un conocimiento básico y elemental que deberás manejar a diario.

Esto fue una interpretación libre de un artículo aparecido en EDN.

6 comentarios:

andxornot dijo...

Excelente artículo Mario, como siempre aportando lo mejor de lo mejor, me ayudan bastante este tipo de lecturas.

Anónimo dijo...

groso Mario, saludos desde córdoba.

CMk dijo...

Excelente aportacion a tu blog y a nosotros... gracias y seguimos por aqui!

Mario dijo...

Gracias amigos por los comentarios :)) Poco a poco traeremos mucha acción relacionada a los microcontroladores y construcciones útiles e interesantes.

Gracias a todos por los comentarios.
Mario

tito890 dijo...

¿Dónde está escribiendo ahora don Mario?

Andrés dijo...

Un gran artículo, Mario. Es mi primera vez en esta blog y me ha parecido un trabajo formidable. Soy un estudiante de electrónica y justamente tenemos que seleccionar un micro para un proyecto y compruebo que hemos adoptado criterios muy similares a los que proponés. Un punto sin embargo me parece poco profundizado en tu artículo, y es el referido a los criterios para dimensionar la RAM del equipo. Nosotros lo que hicimos fue enumerar las tareas que el micro debía realizar para comunicarse e interactuar con os periféricos, estimar para cada una de estas tareas cuantas instrucciones requerirían, en cuanto tiempo se ejecuta cada una y asi calcular la tasa de millones de instrucciones por segundo (MIPS) que requerirá cada una. Luego para el sistema calculamos la tasa de MIPS en base al peor caso (es decir que todas las tareas se superponen en algún momento => la suma de todas las MIPS calculadas)

A mi en particular ese enfoque no me convence, sino que prefiero considerar los eventos que efectivamente pueden ser simultáneos y así determinar cual de todas es la tasa MIPS máxima.

Luego aplicar un factor de seguridad a ese número para prever los futuros agregados que mencionas.

¿como calculás vos ese parámetro?