viernes, 19 de noviembre de 2010

¿Cuál microcontrolador elegir?

Normalmente, el núcleo de un sistema mecatrónico es un procesador (CPU), o sea, un ente que contenga el software que gestionará la información recibida del exterior –vía sensores, instrumentos o interfaces de usuario- a fin de elaborar automáticamente las respuestas o actuaciones consecuentes hacia el mundo exterior. 

Hoy en día hay muchas opciones para que el desarrollador elija el procesador adecuado. Los criterios de selección, por lo tanto, tienen que responder a una filosofía definida, si se quiere que la elección sea la óptima. Y óptima significa, en última instancia, la más fiable y económica.

Hubo una época, en la prehistoria, hace 40 años, en que la electrónica era sinónimo de avería, la era de las conexiones cableadas –falsos contactos, soldaduras frías, cables partidos e interferencias por inducción-, en las que muchas veces la mejor solución era la menos elegante: dar unos cuantos golpes en el sitio preciso.  Hoy en día, la fiabilidad de cualquier circuito más o menos bien diseñado y elaborado –incluso la de los que no lo son- es muy satisfactoria y no debe causar demasiada preocupación.  Tan sólo hay que cuidar un aspecto crítico: la simplicidad.

Y digo esto porque hay una tendencia –reforzada por una competencia de carácter endogámico entre los diseñadores- que consiste en complicar innecesariamente los diseños, con dos intenciones totalmente injustificadas: corregir o evitar problemas que jamás ocurrirán en el tiempo de vida esperado, por un lado, o intentar impresionar al jefe de proyecto o al cliente para justificar el trabajo, por el otro.  En tecnología hay dos principios básicos que hay que respetar a rajatabla: Si funciona, no lo toque, y todo intento de mejorar el diseño más allá de lo estrictamente necesario, reportará sólo problemas.

Mi filosofía de selección presta especial atención al aspecto económico, pero tomando en cuenta no sólo el precio del componente que alberga la unidad de control, sino algo que suele incidir mucho más de lo imaginado en el coste total de un proyecto o en su repercusión sobre cada unidad, en caso de que se fabriquen varias. 

De hecho, casi siempre, tendemos a preferir diseños minimalistas, ajustados, funcionalmente óptimos, que van muy bien para un concurso de robótica, pero que nos obliga a dedicar muchísimas horas de trabajo en el diseño, la programación y la solución de fallos.  Creemos que el diseño es económicamente viable porque hemos usado tan sólo un chip de 8 patas, de 1 €, capaz de comunicarse con una pantalla LCD y un PC, posicionar un servo y atender un teclado matricial, y todo eso programado desde cero en ensamblador mediante elegantes rutinas de diseño propio, totalmente libres de error. Luego nos sorprende que hayamos tardado varias semanas más en terminar el proyecto, respecto a lo habríamos tardado si hubiésemos usado otro de 28 patas, programable en alto nivel sobre una plataforma pródiga en rutinas preprogramadas y probadas por otros, que nos ha costado tal vez 10 €.  La manía de hacer diseños “de diseño” nos la meten en la cabeza los profesores; pero es que la mayoría de ellos jamás han tenido que diseñar para un mercado, en tanto que casi todos nosotros sí.

Una vez expuestos estos principios y para definirlos de un modo práctico, permítanme llamar su atención hacia una familia de microcontroladores que tengo en especial estima: la del ZX24 y similares, de la firma Elba Corp.  La firma nos vende un ATmega (de Atmel) preparado para aceptar programas escritos un lenguaje de alto nivel, una variante ligera del Visual Basic, el ZBasic.  Y es en ello en lo que, a mi juicio, radica el principal appeal de estos micros.


El ZBasic, es prácticamente igual al VB 6.0, al menos, en todo lo que atañe a un microcontrolador.  ¡La plataforma es como un pequeño sistema operativo que hasta permite hacer programas multitarea!  Eso significa, amigo programador, que el diseño que usted haga puede atender, simultáneamente –o casi, como ya se imagina-, en lazos infinitos independientes, varias entradas desvinculadas entre sí, con poquísimas líneas de código y gestión semiautomática del uso de la memoria de la pila.  Por otro lado, admite matemáticas en coma flotante, algo todavía no muy frecuente en este mundillo: cualquier diseño mecatrónico que pretenda objetivos algo más elaborados que manejar un ascensor o abrir y cerrar las válvulas en una empacadora, o sea, un proyecto que realmente incorpore inteligencia, no puede hacerse con matemáticas de enteros.

El IDE, incluido el compilador, es gratis.  La noticia es que se trata de uno de los pocos entornos de programación –al menos en Basic- que están bien documentados, libre de bugs importantes y con una suficiente cantidad de rutinas listas para su uso, tanto dentro del propio paquete como en las notas de aplicación.  Hay muchos usuarios habituales de estos micros, que participan en un foro serio y oportunamente atendido por los ingenieros del fabricante, con lo que resulta muy fácil encontrar una solución para nuestro problema en pocos minutos, tan sólo leyendo los posts afines.

Y aquí quiero romper todas mis lanzas a favor del Basic: Es, con diferencia, el entorno de programación con la mejor curva de aprendizaje y, en sus versiones más elaboradas –como ésta, el ZBasic- es más que suficiente para programar casi cualquier cosa.  Todos mis programas, con fines profesionales o no, los he hecho en este lenguaje y funcionan perfectamente bien.  Es el lenguaje ideal para quien usa la programación como una herramienta más en sus diseños y que, por lo tanto, no quiere perder tiempo en hacerse especialista en programación y pelearse con el árido ensamblador o con el poco simpático C. 

Tal vez valga la pena decir ahora que hay procesadores como los Arduino, con posibilidades y precios en el rango del ZX, pero por el momento, no puede programarse en Visual Basic. A mi juicio, es una seria desventaja para la gente como yo.

En ZX24 tiene unos 4 kBy de memoria RAM –a repartir entre las variables y la pila-, que permiten programar con mucha comodidad, incluso si fuera necesario emplear muchos arrays de decenas de elementos, sin preocuparnos demasiado por quedarnos sin memoria operativa.  Los 32 kBy para el código son más que suficientes para programas bastante pesados.  Y podemos guardar en variables persistentes los datos pseudo-constantes, para lo cual tiene algo de EEPROM disponible.

Ah, por cierto, se programa vía RS232 desde un PC –convertidor USB-Serie mediante, si hiciera falta-.  El ZX24 admite niveles no TTL, o sea, directo del PC.  Otros, como el ZX328, requieren que suministremos una simple interfaz de conversión.

Algo que conviene tener en cuenta: Estos micros son la última, la más reciente, etapa histórica de una saga de microcontroladores que, desde hace aproximadamente un decenio tuvieron, cada uno en su momento, gran éxito en el mercado de la robótica profesional y amateur: El BasicATOM, el Basic Stamp y el BasicX.   Los primeros estaban muy limitados, tanto en RAM como en las posibilidades de su lenguaje Basic; su principal mérito fue establecer y popularizar el concepto de una CPU pequeñita, “all-in-one”, insertable en un zócalo convencional, “interfaceable” directamente con una electrónica TTL y programable vía RS232 en un lenguaje que se aprende en un día.  El BasicX, a mi juicio, introdujo algunos cambios revolucionarios: una variante del Basic más cómoda, casi igual al Visual Basic, la multitarea y matemáticas en coma flotante.  Fue y sigue siendo el más popular y prueba de ello es la ingente cantidad de ejemplos de aplicaciones y soluciones que podemos encontrar en la web. 

Pero sigo prefiriendo los de Elba Corp. pues, a la vez que pueden usar directamente los programas escritos para BasicX  -o sea, tenemos a nuestra disposición toda la base de conocimiento disponible en BasicX-, el entorno ZBasic está mucho más refinado, especialmente lo relacionado con la multitarea, tiene más y mejores funciones, está mejor documentado y los chips tienen muchísima más memoria RAM.

Respecto al precio, para unas pocas unidades, el ZX24 cuesta unos 35 €.  Con la mitad de RAM (2 kBy) y suministrando nosotros el cristal oscilador y la interfaz RS232 PC->TTL, el ZX328 nos cuesta sólo unos 7 € y es capaz de manejar las mismas aplicaciones que podemos gestionar con el ZX24. 

Yo sugiero empezar con el ZX328, si nos preocupa el coste por unidad y vamos a desarrollar varios proyectos con este tipo de controladores; añadir la interfaz RS232 y el oscilador no complica sustancialmente el diseño y el límite de 2 kBy de RAM es bastante amplio para la mayoría de los algoritmos.  Si, por el contrario, se prevé que los programas usarán arreglos (arrays) extensos, o sea, que la cantidad de RAM necesaria será alta, o deseamos comenzar cuanto antes, sin complicarnos demasiado, tal vez partiendo de un diseño pensado para el BX24, y el proyecto admite el precio del ZX24, entonces éste es la elección adecuada.

Se que algunos me podrán decir que el mismo ATmega 328 de Atmel, que cuesta unos 3 € o menos, programado con BASCOM, es una solución equivalente y más barata.  Pues no.  El BASCOM está a kilómetros del ZBasic en cuanto a posibilidades y no es gratis.  

Otros podrán argumentar que hoy en día hay opciones más potentes, como los “embedded PC”, que también pueden programarse en Visual Basic, ya que admiten auténticos sistemas operativos,  que se comportan como ordenadores “normales” a los efectos de un usuario y que, por el otro extremo, sus interfaces están diseñadas para la conexión directa con la electrónica digital del “mundo real”. Vale, lo acepto.  Pero muchas de las aplicaciones mecatrónicas o instrumáticas no precisan de tanto poder.  Sería matar moscas a cañonazos, en la mayoría de los casos, y estos cañones cuestan por encima de los 100 €.

El mundo de los microcontroladores está en constante evolución. Hoy en día hay mucha competencia –eso es bueno para todos- y resulta difícil hacer una elección atinada.  En tales casos lo aconsejable es “casarse” con un tipo de micro que sea razonablemente versátil, de precio medio, del cual sea fácil migrar a otros similares si el fabricante deja de producirlos, con un entorno de programación bien documentado, pleno de funciones preprogramadas y fácil de aprender, con muchos seguidores en la comunidad, lo suficientemente simple y accesible como para usarlo en proyectos amateur pero que se pueda integrar fácilmente en un diseño con fines comerciales.  Por el momento, la familia ZX reúne todas esas condiciones.

No hay comentarios:

Publicar un comentario