Mostrando entradas con la etiqueta conceptos básicos. Mostrar todas las entradas
Mostrando entradas con la etiqueta conceptos básicos. Mostrar todas las entradas

sábado, 28 de septiembre de 2013

Taller de Introducción a Arduino en Altea

Dentro de dos semanas, entre el 9 y el 13 de Octubre de 2013, tendrá lugar la primera edición de Altea Energy Lan Party. Esta será la primer Party LAN donde podremos reunirnos todos los aficionados a la informática, la electrónica y los videojuegos de la provincia de Alicante y por supuesto todo aquel que viva más lejos pero dese pasar unos días entre amigos. La Altea Energy LAN Party ofrece una oportunidad única para conocernos, aprender unos de otros y pasarlo bien.

Altea Energy Lan Party

Dentro de este evento, GoShield impartirá una charla/taller introducción a Arduino. La presencia en dicha charla es gratuita para todos los asistentes al evento, y tras la charla de introducción se realizará un taller donde se podrán hacer una serie de prácticas que perseguirán enseñar a utilizar los conceptos más básicos de Arduino, el uso de salidas digitales moduladas en PWM, el uso de las entradas analógicas y como conectar sensores analógicas a estas  y el uso de pantallas LCD paralelas basadas en caracteres. Todo esto tendrá lugar la tarde del Viernes 11 de Octubre entre las 17:30 y las 21:00. Aquellos que dispongan del material podrán llevárselo de casa y seguir el taller libremente, y para aquellos interesados que no dispongan del material podrá adquirir el kit para la realización del taller allí mismo. El máximo de kits disponibles es de 10 y es posible realizar la reserva pagando 10 euros a través de nuestra web, para aquellos que estén interesados y no quieran quedarse sin plaza, por supuesto para participar en el taller hay que estar inscrito al evento el día de su realización.
Espero que sea de vuestro interés y veros allí a todos.

sábado, 23 de marzo de 2013

Electrónica para dummies 1: ¿Que es el Voltaje?

En esta nueva serie de entradas pretendo ilustrar conceptos básicos de electrónica, de forma que sean fáciles de comprender por cualquiera, independientemente de los conocimientos en electrónica que posea. Esto no significa que vaya a ser fácil, sino que comenzaremos por el principio. Estos conceptos son importantes y necesarios para aquel  que quiera realizar  cualquier proyecto de electrónica de forma autónoma, por sencillos que sean. Además, dominar estos conceptos, le permitirá reconocer problemas en sus circuitos, que de otra forma no sería capaz de detectar. Para comenzar, hoy vamos a hablar del voltaje. Aunque parezca raro, no siempre se tiene un concepto adecuado del término voltaje y eso impide entender el funcionamiento de los sistemas electrónicos. Como he dicho antes, voy a intentar explicarlo desde el principio, ciñéndome a los principios físicos fundamentales del fenómeno.
En la figura anterior, se muestra una resistencia $R1$ y conectada entre dos valores, por un lado el valor $+5$ y al otro $GND$. Para comenzar habría que definir que significan estos valores. Como explicaré mas adelante, el símbolo $GND$ se refiere al punto de referencia de nuestro circuito, es lo que vendríamos a definir como el valor de voltaje 0 de nuestro circuito, aunque como veremos un poco más adelante esto no es del todo así. Para ser estrictos, $GND$ es la referencia sobre la que debemos medir el voltaje de cualquier punto en nuestro circuito, por lo que se debe entender que en el punto donde está escrito el valor $+5$ hay 5 voltios más que en el punto $GND$. Particularizando esto, para el caso de una placa arduino, el pin marcado como $+5$ es la salida del regulador de tensión, esto significa que hay un elemento en la placa, que se ocupa de garantizar que en entre $GND$ y ese punto siempre hayan $5V$ de diferencia. Pero cuidado, un regulador de tensión, será capaz de garantizar esto, hasta un limite, si le pedimos demasiada energía, en este caso está limitado por la corriente, esta tensión ya no serán $5V$ sino que podría caer, pero a esto le dedicaremos una entrada mas adelante. Para lo que vamos a explicar, supondremos que nuestro regulador es capaz de darnos una corriente infinita, tanta como le exijamos.

El primer concepto que debemos corregir es, el de pensar en la tensión como un valor único en un punto. Cuando decíamos en el caso anterior, que a un lado de la resistencia hay $0V$ o $GND$ y en el otro $+5V$ lo que estamos diciendo que es que están cayendo $5V$ en la resistencia que hemos puesto entre esos dos puntos, o lo que es lo mismo, que entre los dos bornes de la resistencia hay una diferencia de tensión de $5V$.
Para ver esto, en mas detalle, veamos el ejemplo siguiente:

En este caso, la diferencia de tensión entre los bornes exteriores sigue siendo de $5V$, pero ¿Que tensión hay en el punto intermedio?. Pues para responder a esta pregunta habría que establecer que la tensión será igual a la tensión que hay entre los bornes exteriores, menos la que caiga en la resistencia R1. Si por ejemplo, establecemos que $R1=R2$, la tensión que caerá en cada resistencia será de aproximadamente $2,5V$, es decir la diferencia de tensión entre sus bornes será de $2,5V$ y por lo tanto si medimos la tensión del punto $P1$ respecto a $GND$ veremos ese valor de tensión. Esto es lo que se llama, divisor de tensión, y le dedicaremos una entrada mas adelante. Este comportamiento, tiene su explicación en el fundamento físico que explica el voltaje y que se basa en la energía potencial. Para explicar lo que viene a continuación introduciremos la conocida formula que define la tensión como $V=IR$. Si analizamos detenidamente esta formula, podremos darnos cuenta, que viene a decir que para que exista voltaje entre dos puntos, debe haber una intensidad y una resistencia, ya que si la intensidad es cero, el voltaje sería cero y de igual modo si la resistencia fuese cero la diferencia de tensión entre los dos puntos sería cero. Es muy importante, tener claro que no tiene sentido hablar de tensión en un punto concreto de un circuito, la tensión o voltaje es una forma de energía potencial, y la energía potencial se define como energía almacenada que puede ser usada para realizar un trabajo, por ejemplo el trabajo que se realiza al ir de un sitio a otro o en el caso de un circuito electrónico el trabajo necesario que es preciso realizar para atravesar una resistencia. 

Podríamos imaginar que sujetamos una pelota en el aire, como es lógico, si la soltamos caerá a suelo. Esto ocurre porque al sujetar la pelota en el aire, ésta almacena energía que contrarresta la fuerza que la tierra ejerce sobre ella atrayéndola. Esta energía, mide la capacidad del sistema para realizar un trabajo, en este caso el trabajo consiste en caer al suelo y el sistema mano-pelota-suelo la contiene, nuestra mano es lo único que impide que este trabajo se realice.

En este símil, la energía potencial de la pelota se corresponde con la energía que almacena el sistema al estar la pelota en este punto, respecto a la que almacenaría el sistema si la pelota se encontrase en el suelo. Por tanto la energía potencial es la energía que el sistema tiene almacenada y que liberará en forma de energía cinética si soltamos la pelota mientras esta realiza el trabajo de ir desde nuestra mano al suelo. Según lo comentado, hay que fijarse que no tiene sentido hablar de energía potencial sin tener un punto de referencia, en este caso la energía potencial de la pelota en nuestra mano es mayor a la energía potencial que tendría en el suelo, esto es lo que se traduce en que si nada se opone a este recorrido lo recorrerá irremediablemente ,o lo que es lo mismo, si la soltamos caerá.

Cuando la pelota se encuentra en el suelo, no cae, pero esto no significa que su energía potencial sea cero ya que su energía potencial habría que medirla respecto a otro punto de referencia. Si la medimos con respecto al propio suelo, su energía potencial es cero, pero si la medimos con respecto a un punto 100 metros por debajo del suelo, la energía potencial será mayor en la superficie del suelo que en dicho punto, esto explica porqué si hacemos rodar la pelota por el suelo hasta un barranco, la pelota se precipitará por éste, liberando la energía potencial almacenada en forma de energía cinética. Esto también explica porqué la energía potencial siempre debe medirse como relación entre dos puntos, y por eso siempre se debe hablar de diferencia de potencial. Partiendo de esta explicación y teniendo en cuenta que el potencial o voltaje es un tipo de energía potencial, se puede explicar el fenómeno del que partimos al comienzo del post. Si no existe diferencia de potencial, no habrá circulación de electrones, es decir intensidad, que viene a ser como la caída de la pelota al suelto. Pero en este caso, además existe otra variable a tener en cuenta que es la resistencia, si no existe una resistencia entre el punto de mayor potencial y el de menor potencial, los electrones serán atraídos por completo y por tanto no habrá diferencia de potencial, ambos puntos tendrán el mismo potencial, pero si interponemos una resistencia, esta retendrá parte de los electrones al igual que nuestra mano retenía la pelota. Esto hará que se acumule energía entre ambos lados de la resistencia en forma de energía potencial, y con este razonamiento se llega a la conclusión de que la energía potencial en un punto $V1$ respecto a la energía potencial en otro punto $V2$ es igual a $V1-V2=IR$.
Para finalizar, se puede aprovechar esta explicación para describir un nuevo fenómeno que ocurre cuando la energía potencial entre dos puntos es mayor a cero y la resistencia es cercana a cero, es decir, si $(V1-V2)>0$, y la resistencia entre esos dos puntos es cero, llegaríamos a una incongruencia matemática ya que tendríamos $(V1-V2)=I0$ y al mismo tiempo que $(V1-V2)>0$. Esto vendría a significar que $I={(V1-V2)\over 0}$, lo que solo se podría resolver si la intensidad fuese infinita. Esto es lo que comúnmente se conoce como cortocircuito, y es lo que ocurre cuando conectamos dos puntos que contienen diferente energía potencial sin poner una resistencia de por medio.

En este caso el de mayor potencial tiene capacidad de liberar energía para emitir corriente hasta el de menor potencial, de forma que al estar conectados directamente sin una resistencia, se liberaría esta energía en forma de intensidad sin freno alguno, lo que podría provocar que se caliente el circuito en ese punto llegando a quemarse o estropeando algún componente. Por este motivo siempre debemos evitar que esto ocurra en nuestros diseños, y para evitarlo nunca debemos conectar dos puntos con diferente energía potencial sin poner una resistencia por medio.

sábado, 2 de marzo de 2013

Como instalar en Windows 8 los drivers para Arduino UNO, Arduino Mega 2560 y Arduino DUE

Mucha gente me ha comentado que tiene problemas al instalar los drivers de Arduino en Windows 8. Estos sobre todo puede ocurrir con las nuevas versiones de arduino como UNO, Mega 2560 o DUE ya que las versiones anteriores utilizaban el conocido chip FTDI ó FT232RL para la conversión de los niveles lógicos del USB a los niveles TTL de la UART de comunicaciones serie del microcontrolador de nuestra placa Arduino. Las nuevas placas de Arduino utilizan el chip Atmega16U2 como programador, tal y como se puede ver en los esquemas de Arduino UNO, Arduino Mega y Arduino DUE.



En estos esquemas se puede ver dicho integrado como en la imagen que se muestra a continuación:


Si comparamos con el esquema original de Arduino Duemilianove, podemos ver que abajo a la izquierda  se encuentra el chip FT232RL. Este es el integrado con el que se enviaban los programas al puerto de la UART, RX y TX del microcontrolador Atmega. Por tanto, comprobando el esquema ya podéis saber si estáis en el primer, en el que necesitaréis seguir los pasos descritos a continuación para instalar el driver, o en el segundo en el que no tendréis problema.


Para poder instalar los drivers de Atmel en Windows 8 tenéis que seguir los siguientes pasos. Antes de continuar, tened en cuenta que el segundo paso reiniciará el ordenador, por lo que antes de continuar debéis guardar toda el trabajo que hayáis realizado.

  1. Presionar la tecla Windows y 'R' de forma simultanea.
  2. Copiar en en el cuadro de texto de la ventana de ejecutar el comando entre comillas "shutdown.exe /r /o /f /t 00" y a continuación pulsa"Aceptar".
  3. Selecciona la opción "Solucionar Problemas"
  4. Selecciona "Opciones Avanzadas"
  5. Selecciona "Configuración de Inicio" y pulsa "Reiniciar".
  6. Una vez reinicie el sistema aparecerá un menú donde se pueden elegir diferentes opciones como:  Habilitar Depuración, Habilitar el registro de arranque, Habilitar modo seguro, etc. Hay que elegir la opción 4 "Deshabilitar el uso obligatorio de controladores firmados".
  7. Cuando reinicie el sistema ya podremos instalar normalmente los drivers necesarios para programar nuestros nuevos arduinos.
Gracias a Javier Perez por reportar el link al post original con la solución.

jueves, 7 de febrero de 2013

III Concurso de Robótica en la Universidad de Alicante

Para aquellos a quienes interese la robótica, os informo que el día 20 de Febrero, tendrá lugar la 3ª edición del concurso de robótica de la universidad de Alicante, englobado en el mes cultural de la Escuela Politécnica Superior. Cómo los años anteriores, consistirá fundamentalmente en dos pruebas; una primera prueba de robots rastreadores, y una segunda prueba de una especialidad ideada en la universidad denominada Balloon Fight.

Prueba Rastreadores: Esta prueba, consiste en conseguir resolver un laberinto antes que el rival. En esta prueba, existe una serie de caminos trazados en cinta aislante negra sobre fondo blanco. Aproximadamente 5 cm antes de las intersecciones  se encuentran unas lineas a los lados del camino que indican el camino que se ha de tomar en el siguiente cruce. Una sola linea al lado derecho o al izquierdo indica que se ha de tomar el camino derecho o izquierdo respectivamente. Si, por el contrario se encuentran dos lineas (una a cada lado) habrá que tomar el camino central en la próxima intersección.

A continuación os dejo un vídeo del concurso del primer año:



Prueba Blloon fight: La segunda prueba, consiste en una pelea de sumo, en la que los competidores llevan atado a su espalda un globo, teniendo que intentar explotar los globos de sus oponentes o bien tirarlos del ring. Cada uno de estos logros tiene asociada una puntuación, por lo que cuantas más veces consiga un robot tirar a sus contrincantes del ring o bien explotar un globo a su adversario, mejor calificación obtendrá en la prueba. Además los robots, llevaran un LED emisor de alta luminosidad, para facilitar su localización al resto de robots mediante sensores de bajo coste como LDRs (Resistencias dependientes de la luz).

Finalmente se ponderan ambas pruebas obteniendo así la clasificación definitiva. Espero que os animéis a participar, ya que es muy divertido y a quien no le de tiempo a preparar un robot pues que venga y así coja ideas para poder participar el año que viene. Por supuesto si alguien está interesado, puede contactar con nosotros y le asesoraremos y ayudaremos en todo lo que podamos para que llegue a tiempo para presentar un robot este año. 

Aquí os dejo un enlace con las normas de la competición de este año y a continuación un vídeo promocional con tomas de la competición del año pasado:



miércoles, 30 de enero de 2013

Tutorial: Resistencias en Serie y en Paralelo

Hoy os traigo un pequeño tutorial para aquellos que necesitáis una resistencia de un determinado valor que no la tenéis. Como ya sabréis la podéis conseguir a partir de las que ya tenéis. En la mayoría de los casos, ya conoceréis estos conceptos, o en el peor caso conoceréis las formulas. Lo que pretendo aportar, es una forma de entender conceptualmente el porque, de la forma para calcular la resistencia equivalente. Es decir pretendo dar sentido a las formulas que ya conocéis (más allá de las matemáticas subyacentes).

Recordaré las formulas antes del vídeo para que podáis seguir mejor la explicación:
El caso 1, corresponde a resistencias en paralelo y el segundo corresponde a resistencias en serie. La forma de calcular la resistencia equivalente de dos resistencias en serie es mediante la suma de sus valores, es decir Req=R1+R2. Y de la misma forma, la resistencia equivalente de dos resistencias en paralelo, se obtiene utilizando la equivalencia 1/Req=1/R1 + 1/R2.

A continuación os dejo el vídeo donde aclaro este tema.



Como apunte, quiero aclarar un detalle sobre el video ya que al final comento que lo único que varía es la resistencia y no la tensión. Bueno, son cosas del directo, lo que en realidad quiero decir es que con una fuente suficientemente potente, si cambiamos las resistencias (sea cual sea la resistencia que utilicemos) la tensión en los extremos de las resistencias no debería haber variado. 

Esto si consideramos una fuente  con una capacidad infinita de aportar intensidad sería siempre cierto, ya que la resistencia determinaría la intensidad que debe circular según la formula dada por la ley de Ohm V=IR. Por lo tanto, a una diferencia de potencial V dada, y una resistencia R (fijos) siempre tendríamos una intensidad que se podría despejar de los dos anteriores.

Pero claro en la realidad, una fuente o batería siempre tiene una capacidad limitada para aportar intensidad. En una batería esto se llama capacidad de descarga y en una fuente se puede obtener a partir de los vatios de la misma (teniendo en cuenta que la potencia es igual P=IV. Y aquí es donde llega el problema, si la batería o fuente de alimentación no puede dar suficiente corriente... entonces I es inferior a la que debería ser y por tanto V como depende de I y de R también cae... a lo que quiero llegar es que si alguna vez veis que una fuente que debería dar una tensión determinada y al alimentar vuestro circuito veis que cae mucho es mala señal.

Por si alguien va perdido, recordaré el significado de cada uno de los parámetros de las fórmulas:
  • V - Voltaje o diferencia de potencial (se mide en voltios).
  • I   -  Intensidad (se mide en Amperios que equivalen a 1 A=1 Culombio por segundo).
  • C  -  Culombio (es una cantidad de electricidad, es decir la cantidad de electrones que pasan en un segundo con una corriente de 1 amperio, esto son muchísimos electrones :) lo pongo más abajo en notas. En definitiva es la unidad que mide cantidad de electricidad).
  • R - Resistencia (se mide en Ohmios y básicamente se podría entender como la medida en que los materiales a oponerse al paso de la corriente a través de ellos).
  • P  - Potencia (se mide en Vatios y representa una cantidad de energía absorbida  disipada o entregada por un elemento en un determinado periodo de tiempo).


domingo, 13 de enero de 2013

Arduino Shield List: Lista de placas para Arduino

Arduino se ha convertido en una de las plataformas más populares para el desarrollo de electrónica en el hogar a nivel aficionado. Muchas universidades han incluido esta placa de hardware y software libre en sus clases prácticas, por la facilidad de programación que ofrece su entorno, donde es posible programar directamente en C ó C++ y cargar los programas a través del USB.

Pero esto no es todo, hay infinidad de posibilidades para la creación de nuevas ideas a partir de una placa Arduino. Una de las formas más fáciles de añadir nuevas funcionalidades a la placa Arduino es a través de las Shields de Arduino. Pero, ¿que es un shield?. Pues un shield no es más que una placa electrónica que puede ser conectada en la parte superior de Arduino y que normalmente permite a su vez conectar más placas encima de ella y que incorpora una determinada funcionalidad.

Jonathan Oxer ha creado y mantiene desde hace tiempo Arduino Shield List una interesante página sobre este tema. Su cometido, creo entender, que consiste en recopilar toda la información de utilización de los pines originales de Arduino de cada placa, a modo de poder determinar fácilmente que shields son compatibles con que otros.

Diferentes Arduino Shields Apiladas


Entre otras muchas cosas, muestro a continuación algunas de las funcionalidades más populares de los Shields de Arduino que pueden encontrarse por ahí:


  • Módulo de Relés: Un relé permite controlar con una salida de Arduino, la activación de dispositivos que tengan altos consumos de corriente. Cada salida de Arduino no puede emitir más de 20mA por lo que ciertos elementos como por ejemplo motores u otros elementos actuados con bobinas, no pueden ser activados directamente desde una salda de Arduino. En estos casos es util utilizar un modulo de Relés para poder activar dichos elementos. A continuación podéis ver un vídeo donde se utiliza un Módulo de relés para encender una bombilla, aquí tened cuidado ya que hay relés de características diferentes, por lo que esto no se debe hacer con cualquier tipo de relé, comprobad antes que el relé es capaz de conducir la intensidad correspondiente.

  • Módulo Ethernet: Con estos módulos es posible conectar Arduino a nuestra red local de cada. De manera que podemos hacer que acceda a cualquier información o bien que actúe como un pequeño servidor Web o de directorios, aunque su uso más útil es poder conectar a Arduino un dispositivo actuador o sensor, y acceder a su control o monitorización a través de la red local de casa. En este otro vídeo se muestra como controlar un módulo de relés a través de un PC utilizando para ello un módulo Ethernet para publicar el servicio.

  • Expansores de I/O: En muchas ocasiones, nos encontramos con determinados tipos de aplicación, donde podemos encontrar que Arduino no tiene suficientes entradas o salidas para controlar todos los elementos necesarios. En estos casos, se puede recurrir a Shields específicos para aumentar la cantidad de entradas salidas de nuestro Arduino. Generalmente estos Shields utilizan un bus de comunicaciones I2C o SPI para controlar desde el Arduino las nuevas I/O por lo que hay que fijarse en que bus utiliza el shield en concreto ya que según cual sea dejará sin poder utilizar unas determinadas entradas de Arduino. En el vídeo incluido a continuación, se muestra como con uno de estos expansores de entradas, es posible utilizar hasta 8 entradas como entradas de interrupción. Esto se consigue ya que cada puerto del expansor (8 entradas/salidas) tiene asociada una patilla de generación de interrupción (de manera que si hay un cambio en cualquier entrada del puerto se genera una señal de interrupción). Por lo tanto, es tan sencillo, como conectar esta salida de interrupción a una entrada de interrupción de Arduino y cuando se produzca una señal leer el puerto completo para detectar cual ha sido la que cambió. Trabajar de esta forma, con interrupciones  evita tener que chequear el puerto en cada ciclo de programa.


martes, 4 de diciembre de 2012

Algunos detalles de implementación con Omron

Relacionado con las clases en Sistemas de Control Automático de el Máster en Automática y Robótica, la práctica consiste en realizar la programación de un grupo de presión de cuatro bombas. A raíz de esto se han comentado algunas estructuras de programación en clase para gestionar ciertas cosas. A continuación expongo unos ejemplos de como gestionar estas estructuras.

Registro de desplazamiento, con este registro se apunta a la bomba a encender, con otro igual a la siguiente bomba a apagar y por último habrá otro para gestionar la bomba que deberá arrancar por variador en el siguiente ciclo de trabajo.


Respecto a la gestión de tareas, muchos tienen aún dudas de como funcionan estas estructuras. Los bloques TKOF y TKON lo que hacen es activar y desactivar unos registros especiales (marcas) llamadas TK00, TK01 y así sucesivamente. Cada una de ellas está asociada al estado de un "programa" y cuando digo programa me refiero a lo que en CX-Programmer se considera programa (ver árbol de proyecto a la izquierda de CX-Programmer). De manera que estas mismas marcas pueden ser empleadas para activar una determinada sección de código como en el ejemplo que se muestra a continuación:


En este ejemplo, la marca TK01 (es decir cuando el programa con tarea de prioridad 1 está en ejecución), se activa una sección de código donde se detiene el programa con tarea de prioridad 0 y se ejecuta el programa con tarea de prioridad 3.

Sobre la gestión de arranques y paradas de bombas, mi consejo es emplear un biestable RS utilizando la función KEEP. Como se muestra en en la figura, la linea de la primera conexión del biestable contiene la condidicón de arranque de un contactor de la bomba 1, y la segunda linea contiene la condición de parada del mismo contactor. (No es necesario tener las mismas condiciones, sólo son a nivel ilustrativo, no deben tomarse al pie de la letra).




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