Menu
in

LED Control: PWM, Servo y LED Dimmer

En el artículo de hoy vamos a poder ver varias aplicaciones reunidas para lograr un objetivo común. Un control PWM trabajando a 1Khz, un LED Blinker, un alerta sonoro (BEEP), un servo con el que posicionaremos un potente conjunto de 36 LEDs blancos y un LED Dimmer para ajustar a voluntad la intensidad de iluminación alcanzada por esta fuente luminosa. Este desarrollo es parte de un proyecto colaborativo y comprende la iluminación que llevará a bordo un cuadricóptero (Quad). Luces direccionales e inteligentes para volar durante la noche y asistir de este modo al sistema de transmisión de imágenes en tiempo real. ¿Te gusta la idea? Observa como lo hacemos, te invitamos a compartir el diseño de esta parte de una aeronave que verás volar aquí, en NeoTeo.

Entre los mil y un detalles que debemos tener en cuenta al momento de diseñar un cuadricóptero encontramos la posibilidad (a veces necesidad) de dotar al desarrollo de un sistema de iluminación para favorecer las posibilidades de realizar vuelos nocturnos o con bajas condiciones de luminosidad ambiente. Un escenario de estas características se puede presentar en el momento y lugar menos esperado y es bueno tomar recaudos antes de lamentar esta falencia en nuestra nave. Además, esta disponibilidad se transforma en obligatoria al momento de contabilizar el uso de un sistema de transmisión de imágenes en tiempo real montado sobre el artefacto. Pero debemos ser muy cautos y cuidadosos con todo lo interesante que le podamos agregar a nuestra plataforma aérea: cada tornillo que utilicemos significa “peso agregadoy eso se notará en los motores al momento de efectuar maniobras rápidas o bruscas. Si nos dejamos guiar por nuestro entusiasmo, y le agregamos todo lo que se nos cruza por la mente, es probable que nuestro cuadricóptero ni siquiera logre despegar del suelo.

Para evitar cualquier dolor de cabeza durante los ensayos de vuelo, lo mejor será pensar antes de la construcción, la manera más práctica y efectiva de realizar las cosas. Por supuesto, la iluminación será en base a diodos LED que serán montados en placas de material fenólico. A pesar de entender que en fibra (FR4) las placas lucirían de manera más profesional hay que evaluar lo elemental que mencionamos al inicio: el peso total aumentaría demasiado por el simple hecho de mantener una estética constructiva. Un trabajo bien ideado será tan funcional y efectivo en un material de soporte o en otro. Lo mismo ocurre con el anclaje de las placas. Podríamos haber adoptado una placa de aluminio del tamaño de los PCBs que soportan los LEDs mientras que la elección se orientó hacia una pequeña vara de ese material liviano. Es decir, logramos la misma función de soporte con menos de la mitad del peso posible. Además, no esperamos lograr una estructura fuerte y resistente a los impactos porque no esperamos exactamente eso: los impactos. Por último, un servo de características comunes cierra este montaje junto a dos soportes en forma de “L”, también de aluminio. Observa la construcción que hemos adoptado en el siguiente video:

Podemos agregar, a lo que hemos observado en el video, que una mejor estructura puede resultar más sólida y confiable, pero no debemos olvidar que esa ventaja se nos vuelve en contra, en peso agregado. Vale recordar además, que la iluminación y el sistema de transmisión de imágenes en vivo no son partes fundamentales para el funcionamiento de un cuadricóptero. Podemos volar sin estos elementos o podemos construir un vehículo para todo terreno sin iluminación ni video, pero la experiencia de tener estos “adicionales” es única y apasionante. Por lo tanto, abandonando los preámbulos, y avanzando sobre el funcionamiento del sistema deseado, abordaremos en primer lugar el funcionamiento general del conjunto y luego finalizaremos explicando las funciones destacadas de cada sección en particular. El corazón del sistema descansa en un poderoso PIC 18F25K20 al cual haremos trabajar como esclavo I2C en el momento final, cuando todo esté terminado. Es por ese motivo que en el diagrama en bloques figura la conexión a ese bus. Aprovechando las posibilidades que nos ofrece el módulo MSSP, que ya hemos visto en el montaje de un display I2C, acoplaremos nuestro sistema “esclavo” al bus I2C del sistema principal de control de la nave. De este modo, podremos operar las luces y la cámara del cuadricóptero desde el mismo sistema que se utilizará para comandar la nave.

Esquema básico del montaje realizado

Utilizando el PIC como esclavo I2C será muy sencillo recibir instrucciones y actuar en consecuencia ejecutando un trabajo que estará determinado por los tiempos que pueda manejar el sistema de proceso principal. Por ahora, y antes de trabajar sobre el dron volador, utilizaremos sencillos pulsadores de toque suave hasta terminar de ensayar el comportamiento del desarrollo completo. Este diseño comprende, en la parte inicial que veremos hoy, el movimiento de un servomotor entre dos posiciones extremas y la operación de un MAX16805 utilizando un PWM, generado por el PIC, para controlar la intensidad lumínica de los LEDs principales. Cuando el servo alcance los extremos de recorrido o en los momentos en que el PWM provoque la mínima o máxima intensidad de luz un Beep! sonará acompañado del destello de un LED (hemos elegido uno de color amarillo por ahora). El sonido del Beep puede ser simple o doble según nuestro gusto y sólo se usará en esta etapa de ensayos. En el montaje final sólo quedará el LED indicador que se podrá observar a distancia ya que el sonido del Beep no será muy útil allí, arriba de la nave. Por lo tanto, al llegar a los extremos sonará el Beep y seguirá haciéndolo una vez cada 10 segundos, indicando que estamos trabajando en un extremo. Al salir de esta situación, el Beep se silencia y el LED no destellará más. Obsérvalo:

Como has observado, hasta un LCD 16X2 hemos colocado sobre el puerto B del PIC para hacer sencilla la tarea de programación inicial. Por supuesto que el código, que encontrarás al final del artículo, incluye al LCD para que a ti también te resulte fácil el trabajo (muy útil para controlar el valor de las variables utilizadas). De este modo, reunimos en un solo montaje muchos circuitos que ya hemos visto por separado en NeoTeo, pero que en este desarrollo todos forman un conjunto único y con un objetivo específico: iluminar en la medida que sea necesario, el viaje nocturno de nuestra nave de exploración. Recordemos entonces algunos conceptos fundamentales. El MAX16805, encargado de administrar la iluminación de los 36 LEDs blancos de 10 mm., recibirá la señal PWM a una frecuencia de 1Khz. y mediante la variación del ciclo de trabajo se ajustará la intensidad de iluminación. Para esto utilizamos el módulo ECCP que posee el 18F25K20 y conectaremos la salida del canal 1 de PWM (CCP1) ubicado en PORTC.2 llegamos a la entrada DIM del MAX16805 a través de un pequeño divisor resistivo como muestra el siguiente esquema. El resto de la conexión necesaria para activar el MAX16805 será el mismo que vimos en el artículo del Dimmer, con la Rsense de 1 Ohm y su alimentación principal de 12Volts.

Para el movimiento de los paneles de LED, como ya anunciamos y vimos en los videos, utilizaremos un servomotor convencional (en nuestro caso, un Hitec HS-311) al que debemos alimentar con 5Volts. A estos 5Volts también los utilizaremos para el adaptador de impulsos que formamos para activar la señal de control del servo. Anécdota: durante el inicio de los ensayos observamos movimientos erráticos en el servo ante las instrucciones directas desde el PIC que se alimenta con 3,3Volts. A pesar que las especificaciones técnicas hablan de que el servo puede trabajar con impulsos a partir de los 3Volts de amplitud decidimos colocar un adaptador de niveles (de 3,3V a 5V). Luego de esto, la respuesta del servo fue siempre exacta y precisa.

Estas alimentaciones de 12Volts y de 5Volts se completan con una de 3,3Volts que es destinada al PIC y el circuito es el que te mostramos en la imagen superior. Vale aclarar que por comodidad y por costumbre técnica, nos referimos a valores de tensión de 12Volts a lo largo de toda la explicación pero para ser más exactos debemos aclarar que las baterías utilizadas en radiocontrol son las de Litio – Polímero (Li-Po)  de tres celdas que poseen una  tensión nominal de trabajo de 11,1Volts. Para los efectos prácticos, la tensión entregada es tan efectiva como si estuviéramos trabajando con una batería Lead-Acid de 12Volts. Además, todos los ensayos se hicieron con este tipo de baterías y es por este motivo que en todo el texto y en los circuitos mostrados, la tensión de alimentación referida es de 12Volts. Es importante dejar en claro este tema para saber que a la hora de montar todo sobre la nave, la tensión disponible será la indicada de 11,1Volts.

El programa generado para el PIC es muy sencillo y se basa en generar un sistema de instrucciones condicionales que interrogan durante todo el tiempo el teclado. Por supuesto, cuando pasemos a trabajar en modo I2C esclavo esta situación cambiará de manera radical, pero mientras realizamos los ensayos, 4 pulsadores de toque suave hicieron el trabajo de activar la movilidad y luminosidad del sistema. Volviendo a las partes sobresalientes del programa del microcontrolador destacamos la atención permanente de lazo principal a la potencial acción sobre los pulsadores. En caso de detección, el programa ejecutaba las poderosas instrucciones que brinda Amicus para operar servomotores y salidas PWM. En el caso del servo, basta con indicar el pin de salida y la posición deseada. Este último valor oscila entre 500 y 2500 según el tipo de servo utilizado y el largo de carrera deseado. En nuestro caso, los valores límites fueron 975 y 2140.  El manejo y la generación de PWM, es igual de simple a través de una instrucción única, como en el caso del servo, sólo hay que definir el ciclo de trabajo (Duty-Cycle) (PVVM) y la frecuencia de trabajo deseada (FPWM). Estos valores se obtienen en variables que, a cada toque de un pulsador, incrementa o decrementa una unidad a la variable empleada. Es decir, generar un PWM, controlar un servomotor y activar su trabajo desde cuatro pulsadores es una tarea que Amicus te permite resumirla en 20 líneas de programa. Así:

Otra parte interesante para observar es la generación del Beep. No debemos olvidar que este sonido estará acompañado por la actividad de un diodo LED (en este caso amarillo) y ambos indicarán que las variables para el servo y el PWM llegaron a su valor máximo o mínimo. ¿Porqué un LED amarillo? Porque el dron estará lleno de LEDs rojos y verdes indicadores de funcionamiento de diversas etapas, por lo tanto el LED amarillo se podrá diferenciar sin problemas y se notará sin esfuerzo el estado de funcionamiento del sistema de iluminación. Para generar el Beep entonces, sólo necesitamos una única instrucción sobre una sola línea de programa: FREQOUT. Luego, el encendido y apagado del LED completan el indicador “audio-visual

Por último, otra secuencia de instrucciones muy útiles y eficaces son las que se encargan de generar la entrega de un Beep cada 10 segundos cuando alguna de las variables llega a su valor extremo. Haciendo un código fácil, se implementa un retardo de 10 segundos, luego se enciende y apaga el LED, se emite el Beep, se controlan el teclado y se cierra el lazo de programa. Sin embargo, estaríamos 10 segundos retenidos en un retardo de tiempo “inútil” mientras que la situación puede requerir algún movimiento o variación de intensidad de luz antes de que se completen los 10 segundos. Para esto, un elemental lazo For-Next resuelve este escenario de estar atento a cada momento de la acción del teclado, aunque estemos dentro del tiempo de conteo de 10 segundos para el Beep.

Con el condicional de la línea 93 verifico la actividad de los pulsadores cada 2 milisegundos (el tiempo que dura el retardo) y si alguno se activa a GND, salgo del lazo For-Next y acudo a la instrucción que me requiere en ese momento. Las instrucciones “OR” equivalen a lo que conocemos como “o” en nuestra lengua castellana. Este “o” aquél. Hoy “o” mañana. Es decir, si alguna de todas las entradas controladas posee un estado lógico bajo, el programa direccionará las acciones hacia la parte del código donde se haya producido el cambio de estados. En este caso será la acción de pulsar un botón,  en el desarrollo final será una instrucción recibida mediante el bus I2C. El resto del programa del PIC son declaraciones de variables, asignación de valores iniciales a las mencionadas variables y, con estos valores, determinar una posición inicial del conjunto mediante el servo y un nivel de iluminación, también inicial, a través del PWM al MAX16805.

De este modo se completa la etapa de desarrollo y ensayo inicial del módulo de iluminación del cuadricóptero. La próxima fase estará abocada a comenzar a trabajar con el bus I2C desde otro microcontrolador y establecer las bases de la comunicación y del funcionamiento del PIC 18F25K20 en modo esclavo. Una vez completado ese proceso, el desafío pasará por optimizar el consumo energético. Luego, la reducción de peso en una construcción de tamaño acotado dará lugar a la última etapa: montar la cámara en el mismo brazo que maneja los LEDs (¿o en otro conjunto de servos independientes?, ¿tú que opinas?) y el transmisor de TV que emitirá las imágenes en vivo de cada vuelo, de cada aventura. ¿Quieres ser parte de esta experiencia? Participa en el Foro de Electrónica de NeoTeo; colabora aportando opiniones, sugerencias e ideas a esta parte del desarrollo. ¿Lo harías de otro modo?, ¿cómo?, ¿porqué? Cuéntanos, tu opinión nos interesa.

¿Porqué un LED amarillo? Porque el dron estará lleno de LEDs rojos y verdes indicadores de funcionamiento de diversas etapas, por lo tanto, el LED amarillo se podrá diferenciar sin problemas.

Escrito por Mario

Leave a Reply