lunes, 2 de enero de 2012

Comenzando por lo Básico (2): "Diseños basados en microcontrolador"

En la última entrada se introdujeron los conceptos que se emplearán en el blog para referir a diferentes tipos de equipo que comúnmente se pueden encontrar en la industria. Como se comentó, desde el punto de vista del control podemos encontrar, partiendo desde lo más sencillo a lo más complejo:

  • Electrónica pura
  • Diseños basados en microcontrolador
  • Electrónica Reconfigurable
  • PLCs
  • PCs industriales

Continuando con la descripción de estos equipos, hoy voy a describir los diseños basados en microcontrolador.

Diseños basados en microcontrolador: Cuando se habla de diseños basados en microcontrolador, normalmente nos referimos a placas electrónicas que incorporan para su funcionamiento un microcontrolador, de cualquier tipo o marca. La ventaja de este tipo de diseño, es su versatilidad, ya que un microcontrolador no es más que un minicomputador que integra la RAM, ROM, Memoria de programa y datos (flash), CPU, entradas/salidas digitales y analógicas y un conjunto de periféricos que podemos emplear en los programas, como son: Convertidores Analógico Digital, Temporizadores, Contadores, Dispositivos de interrupción externos, unidades de comunicación serie universales USART, unidades de comunicación UART de sistemas específicos como I2C, SPI, CAN, Ethernet,etc.

El uso más común de estos microncotroladores es centralizar el control del sistema recibiendo señales a través de las entradas digitales o analógicas, y empleando las salidas digitales y analógicas para mandar señales al resto del circuito de forma que estas decisiones se toman en función de la lógica programada en el microcontrolador. Por lo general, en las entradas del microncontrolador se conectan sensores que permiten obtener información acerca del entorno, o botones que permiten a un operador mandar señales de usuario al sistema, y las salidas se emplean para realizar una acción sobre sistemas de actuación como diodos leds, motores, displays, etc.

Estos microcontorladores pueden ser de tipos muy sencillos, básicos y baratos como los archiconocidos 16F84 ó su hermando mayor el 16F876A ambos de microchip. Se trata de microcontroladores de 8 btis, sencillos y fáciles de programar dada su arquitectura RISC cuyo repertorio de instrucciones (ensamblador) es muy reducido y por tanto fácil de manejar. Son válidos para la mayoría de los proyectos que se puedan plantear, por poner dos ejemplos de uso, las viejas tarjetas programables empleadas para piratear los dispositivos de Canal+ empleaban el microcontrolador 16F84 y muchos otros proyectos de electrónica sencilla como el robot para principiantes Skybot emplea el microcontrolador 16F876A. Microchip es una de las marcas lideres en el campo de los microcontroladores ya que tienen una amplia gama, cuyas especificaciones permiten encontrar uno que cubra los requisitos de una determinada aplicación, por un precio muy ajustado. Dada la enorme popularidad de estos microcontroladores y su bajo coste existe multitud de proyectos, esquemas y páginas dedicadas a este tema en la Web, aquí os dejo una página con recursos sobre microchip.

Otros de los microcontroladores de 8 bits más famosos del momento, son los pertenecientes a la familia AVR de ATEML. El uso de los microcontroladores ATMEGA 128/328/1280/2560 en las placas de prototipo ARDUINO han dado a conocer sus altas prestaciones y han popularizado el uso de los bootloaders. Las arquitecturas AVR como estas, están especialmente diseñada para ejecución eficiente de código C. Esto supone una gran ventaja sobre los PIC en diseños con un alto requerimiento de complejidad en el control, aunque los microcontroladores PIC pueden ser programados en C hay que tener cuidad con ciertos detalles. Entre otras cosas, hay que tener especial cuidad con la pila del microcontrolador, cuando se llama a una función o se está evaluando una sentencia if, se van apilando resultados intermedios, parámetros y direcciones de retorno en la pila. La pila de los microcontroladores PIC es de 8 niveles, por lo que el uso indiscriminado de estos mecanismos, puede dar lugar a que la pila se llene no pudiendo almacenar más valores y en consecuencia obtener comportamientos aparentemente ilógicos. Esto no ocurre con los microcontroladores ATMEGA de la familia AVR cuya arquitectura Hardvard les proporciona una memoria de datos y una memoria de programa independientes, de esta manera son capaces de utilizar una pila dinámica en la memoria de datos SRAM (RAM estática)

Además de las dos comentadas, existen muchas otras marcas que se dedican a fabricar microcontroladores como ST, Freescale antes perteneciente a Motorola, Intel, National Semiconductors, entre otros. También existen arquitecturas de microcontroladores de 16 bits y 32 bits que permiten realizar sistemas más complejos con mayor necesidad de cálculo, mayores requerimientos de velocidad o necesidad de periféricos avanzados como UART extra, CAN ó Ethernet. Estas arquitecturas son conocidas como ARM, en esta familia se incluyen microcontroladores como los Cortex-M3 ampliamente utilizados por su buen equilibrio entre simplicidad, coste y potencia, como ejemplos de uso podemos encontrar el robot uXbot y un proyecto imitador de ARDUINO llamado MAPLE y que ofrece una buena alternativa cuando ARDUINO no dá la talla. Las arquitecturas ARM de ATMEL ofrecen un excelente abanico de funcionalidades, por ejemplo el microcontrolador SAM7X512 empleado en el proyecto NetDuino, otro imitador de ARDUINO, en este caso incorpora un RunTime del Micro Framwork 4.1 de .NET lo que nos permite programarlo en C# a través del IDE de Microsoft Visual Studio Express.

Otro problema clásico en la programación de microcontroladores es la necesidad de una placa entrenadora. Estas llamadas placas entrenadoras son las tradicionalmente utilizadas para grabar los programas en las las memorias EPROM o EEPROM de los microcontroladores, además estas placas suelen ser caras y es complejo programar el microcontrolador ya que para ello hay que extraerlo de la placa de aplicación e introducirlo en la entrenadora cada vez. No obstante, para solucionar este problema se suelen emplear los conocidos bootloader, que no son más que unos programas que preparan lo básico en el microcontrolador para que esté listo para funcionar. Estos bootloader son grabados en los microcontroladores inicialmente y a partir de ese momento permiten grabar nuevos programas en el chip a través del puesto serie. Esta funcionalidad se debe a que en cada reinicio, el bootloader encuesta el puerto serie del microcontrolador, en caso de haber alguien a la escucha (software de programación), recoge los datos enviados por el software y los mete en una dirección de memoria del microcontrolador que usa como memoria de inicio de programa, en caso de que no haya datos disponibles en el serie o de que ya se haya terminado de grabar el programa salta a esa dirección de inicio y ejecuta el código que haya a partir de ella. De esta manera es posible programar a posteriori el microcontrolador a través del puerto serie de una forma muy simple y cómoda. En este principio es en el que se basan los diseños comentados anteriormente como ARDUINO, NetDuino, uXbot, MAPLE, etc. Para ello, proporcionan un IDE de desarrollo que permite escribir el código en lenguajes de alto nivel y permiten grabar los programas generados en chips que tenga cargado el correspondiente bootloader. De esta manera el problema se reduce a grabar un único programa mediante la tarjeta entrenadora, el bootloader, y el resto ya serán grabados empleando un protocolo serie a través de la USART.

A pesar de estas pequeñas cuestiones, los diseños basados en microcontrolador siguen siendo una alternativa segura y muy flexible con respecto a los diseños basados únicamente en componentes electrónicos no programables. Siguen ofreciendo una alta estabilidad, siempre que se haya verificado la parte electrónica y que se haya comprobado adecuadamente que no existen posibilidades de que la pila del microcontrolador se llene, lo que provocaría comportamientos anómalos. Aún así, la verificación de estos sistemas es compleja, dado que se habrá de tener en cuenta toda posible sucesión de eventos, incluyendo aquellos que pueden producirse de forma imprevista o asíncrona, como una interrupción interna provocada por un timer, o bien una interrupción externa provocada por las comunicaciones o por una entrada de interrupción. Una solución, para que no se apilen interrupciones solapadas puede ser inhibir las inrerrupciones cuando se está atendiendo una de ellos. Para supervisar que el comportamiento sea adecuado, los microcontroladores incorporan los Watchdog Timer que permiten reiniciar el sistema en caso de que quede en un estado anómalo.

En resumen, la electrónica basada en microcontrolador permite una corrección de errores mas flexible ya que en muchos casos se puede realizar a través de una actualización del software, y permite realizar operaciones mucho más complejas de una forma más sencilla. Como desventaja, requieren de una mayor formación ya que es necesario tener buenos conocimientos de electrónica, al igual que en el caso de los sistemas basados en electrónica pura, y además requiere conocimientos de programación y nociones de arquitectura de Computadores para poder sacar el máximo partido al microcontrolador. Sin ninguna duda, esta es la opción por la que se está decantando el mercado actualmente, por tratarse de una opción intermedia entre los PLC y la electrónica pura, son flexibles por ser programables como un PLC y económicos como los circuitos basados en electrónica pura.

Más adelante veremos en detalle algunas de las múltiples cuestiones que han aparecido hoy como las comunicaciones, los bootloader, el acople de sensores y actuadores o el uso de los periféricos de los microcontroladores.

miércoles, 21 de diciembre de 2011

Comenzando por lo Básico (1): "Electrónica pura"

Bueno, para ir introduciendo materia, cabría distinguir entre los diferentes tipos de equipo más comunes que se pueden encontrar en la industria. Desde el punto de vista del control podemos encontrar, partiendo desde lo más sencillo a lo más complejo:
  • Electrónica pura
  • Diseños basados en microcontrolador
  • Electrónica Reconfigurable
  • PLCs
  • PCs industriales
Por definir un poco cada uno de estos elementos, voy a  hacer una breve explicación de las características más destacables de cada uno de ellos, desde mi punto de vista. Hoy vamos a comenzar con el primero de ellos.

Electrónica pura: Cuando se habla de diseños basados en electrónica pura, normalmente nos referimos a placas cuya circuitería realiza las funciones de control y potencia de forma acoplada, de manera que para un cambio en el comportamiento de nuestro diseño no hay más opción que rehacer la placa. La principal ventaja de este tipo de sistemas es la rapidez de respuesta, la fiabilidad (una vez que se ha verificado) y la estabilidad.

Al tratarse de un circuito electrónico, la verificación de estos sistemas no siempre es fácil, pero una vez que se ha logrado verificarlo, la garantía de que no se altere su comportamiento es muy alta. Sin embargo, padecen el problema de que si se detecta un fallo de diseño a posteriori, hay que rehacer el diseño y sustituir el hardware, lo que implica un coste enorme. Este tipo de diseños, sólo estaría recomendado para expertos en la materia y en aplicaciones en las que se tenga una alta garantía de que nada va a cambiar a lo largo del tiempo, en pocas palabras, la estabilidad de los requisitos está asegurada.

Por poner un ejemplo, si diseñamos un circuito electrónico para un radiocasete cuyas funciones son: avanzar, retroceder, parar y reproducir, existe una alta garantía de que mañana no se nos vaya a ocurrir una función nueva que queramos añadir y que invalide el diseño previo. Sin embargo la cosa cambia mucho si hablamos de vídeo digital. En primer lugar, la lógica para reproducir video, es verdaderamente compleja, y mucho más si hay que desarrollarla en un circuito electrónico. La probabilidad de cometer errores sería muy alta, y el fracaso del proyecto estaría garantizado. Además, existe otro factor importante, y es que cada cierto tiempo aparecen nuevos formatos de codificación/decodificación de la información (vídeo), los conocidos CODECs. Un sistema basado en electrónica pura, tendría muy complicado adaptarse a los nuevos CODECs, sin embargo un sistema basado en microcontrolador podría de una forma muy sencilla ser adaptado con una actualización del firmware (que no es otra cosa que el software del microcontrolador). Cabe destacar la ventaja para los usuarios de nuestra aplicación, que no tendrían más que entrar en nuestra Web descargarse la nueva versión del firmware y actualizar el sistema a través del USB y un programita que hayamos preparado para realizar esta tarea.

En resumidas cuentas, la electrónica pura es barata, estable y rápida. En cadenas de producción se pueden conseguir unos costes asombrosamente pequeños. Sin embargo, un fallo de diseño, puede invalidar toda una producción, no se puede adaptar a nuevos requisitos a posteriori y es difícil de diseñar y verificar.

Cómo últimamente estoy adentrándome en el mundillo de los robots velocistas voy a poner dos ejemplos de lo que comento con este tipo de robots. En primer lugar aquí hay un ejemplo de un proyecto de un robot siguelíneas realizado solamente con electrónica y aquí otro proyecto similar, en este caso robot velocista basado en microcontrolador

Motivación

Me llamo Iván Perea, soy Ingeniero Técnico en Informática de Sistemas y actualmente estoy terminando las optativas que me faltan para acabar Ingeniería Informática (lo que debería ocurrir en Enero de 2012). Al mismo tiempo estoy terminando el máster en Automática y Robótica (www.mayr.ua.es) y trabajando en el grupo AUROVA donde realizo labores de técnico en un proyecto de investigación. Y os preguntareis ¿Y este tío, además quiere hacer un blog?... bueno, pues si que quiero... lo que no sé es de donde voy a sacar el tiempo, pero bueno... poco a poco intentaré ir contando cosas por aquí.

A lo largo de mi vida profesional he realizado tareas de lo más diversas, por lo que tengo amplios conocimientos en BBDD y programación en  general (C++, Java, C#, PHP, JavaScript,...) aunque últimamente me he decantado bastante por el Framework de ".Net". No es que sea un fanático de Microsoft, pero conforme uno crece como programador (diseñador, analista, arquitecto software, como prefiráis verlo), necesita realizar proyectos serios de forma fácil y eficiente, lo cual se consigue en primer lugar dominando la herramienta de trabajo, y en mi caso si no tienes un gran grupo de desarrollo, pues mejor si usas un IDE que aumente tu eficiencia al desarrollar, y  en mi caso esto lo he encontrado en Visual Studio. 

Sin embargo la mayor parte de mi experiencia profesional se ha relacionado con las redes de dispositivos industriales, interconexión de sistemas y desarrollo de sistemas embebidos. Como no podía ser de otra manera, esta especialización me ha llevado a adentrarme en los intríngulis de la electrónica, la automática y la robótica, temas del día a día en mi actual empleo. En este ámbito, como informático me he enfrentado a problemas que requerían conocimientos técnicos que he tenido que aprender sobre la marcha, y que sigo aprendiendo día a día. Sin embargo hay otras habilidades cómo la capacidad de abstracción que muhcas veces supone una ventaja, respecto a otros tipos de ingeniero, a la hora de resolver algunos problemas comunes en ingeniería.

Debido al reducido número de informáticos que se atreven a entrar en este campo, he decidido hacer este blog. Mi objetivo es intentar plasmar aplicaciones y desarrollos relacionados con la robótica, la automática y la electrónica desde el punto de vista de un informático a modo de memoria de los trabajos que voy realizando. Y así, a modo de referencia, tener un sitio donde poder encontrar de nuevo las soluciones que planteé a distintos problemas, como referencia personal y por supuesto si esto puede a su vez ser de ayuda para alguien más, pues perfecto.
Espero no aburriros y poder ir planteando cosas interesantes con el tiempo, en cuanto tenga un rato a ver si hago la primera aportación.