| ![[Photo of the Author]](../../common/images/Guido-S.gif)  por  Guido Socher (homepage)
 
 Sobre el autor:
 
 Guido ama linux no solo porque es divertido descubrir las grandes posibilidades
    de estos sistemas sino por toda la gente que está envuelta en su diseño. 
 Traducido al español por:
 Miguel Magán C." <miguelmmc/at/terra.es>
 
 Contenidos:
 | 
 
| Fuente de alimentación de corriente contínua basada en microcontrolador![[Illustration]](../../common/images/article251/dcpower-logo.gif)  Resumen:
 
    Este es el cuarto artículo en LinuxFocus de la serie del microcontrolador AT90S4433. Te
    sugiero que leas los artículos anteriores sobre la programación de microcontroladores Atmel, en especial:
     Uno de los dispositivos más importantes para tu laboratorio casero es una buena y
    fiable fuente de alimentación de contínua. En este artículo nos construiremos una.
    Será controlada por un microcontrolador. Tiene un display LCD y se la pueden enviar comandos
    desde tu ordenador en Linux por el puerto serie RS232. Tiene un diseño muy robusto.Como instalar y usar el entorno de desarrollo Linux AVR y como construir el hardware de programación:March 2002,
      Programming the AVR Microcontroller with GCC
Como hacer tu propia placa de circuito impreso:Mayo 2002,Un panel de
      control LCD para tu servidor Linux
Como construir una caja para tu fuente de alimentación:Septiembre 2002,
      Contador de Frecuencia de 1Hz-100Mhz con visor LCD e interfaz
      RS232
 
 Este artículo muestra también como son de versátiles los microcontroladores. Aunque no es un diseño sencillo.
 Así que si sólo estas buscando una fuente de alimentación sencilla echa un vistazo a
    "simple DC power".
    Esta fuente tan simple es buena si sólo necesitas una fuente de alimentación de contínua pequeña para tus otros
    experimentos electrónicos en LinuxFocus. Aunque no tiene nada que ver con Linux ni
    software en general.
 Incluso si finalmente sólo te construyes esta fuente sencilla en este artículo puedes leer
    y aprender un montón de aspectos interesantes sobre los microcontroladores.
 _________________ _________________ _________________
 
 | 
     
Introducción
    El microcontrolador en el que se basa la fuente de alimentación
    no es el circuito más sencillo pero te puedo asegurar que no te importará
    el tiempo necesario para construirlo. Es muy robusto y fiable.
    También técnicamente muy interesante, porque puedes aprender como
    generar un voltaje de contínua analógico con un microcontrolador
    sin usar un conversor digital-analógico.
    
    Necesitarás bastantes componentes para este artículo pero son
    baratos y estándar. Esta fuente de alimentación no es cara.
     
Qué necesitas
    Mira esta lista de componentes para
    ver todos los que necesitas. También puedes ver estos componentes con sus valores en el
    esquemático de debajo.
    Nuestra fuente de alimentación viene con 3 variantes.
    Excepto por el transformador y una resistencia sólo hay una modificación
    en el software requerido. Todos los demás componentes son idénticos en las 3 opciones:
    
      - 0-16V Imax=2.2A
 compra un transformador de 15V 2.5A
- 0-24V Imax=2.2A
 compra un transformador de 24V 2.5A
- 0-30V Imax=3A
 compra un transformador de 30V 3A
Nota: En los tres casos necesitas el transformador de 9V, 100mA para la alimentación
    de la placa principal.Esquemático y placa
    Yo usé eagle para Linux
    para diseñar el esquemático y la placa. Los archivos de eagle son
    también incluídos en el paquete tar.gz junto con el software.
    Puedes bajarlos al final de el artículo.
     
    El circuito está dividido en 2 partes. Una parte principal y otra
    para los transistores de potencia.
    Debajo tienes dos esquematicos independientes para las dos partes
    que son luego conectadas por cables. 
     
     El esquemático principal (pincha en la imagen para agrandarla):
     ![[main schematic]](../../common/images/article251/schematic_th.gif) 
 
     
     El esquemático para la parte de potencia (pincha en la imagen para agrandarla):
     ![[power part schematic]](../../common/images/article251/schematic_powerpart_th.gif) 
 
     Como conectar los pulsadores en una matriz (pincha en la imagen para agrandarla):
     ![[push buttons schematic]](../../common/images/article251/push_buttons_schematic_th.gif) 
    
     
     La placa principal, vista desde arriba (pincha en la imagen para agrandarla):
     ![[board]](../../common/images/article251/linuxDCpower_board_white_th.jpg) 
 
     
     
    La placa está especificamente diseñada para aficionados a la electrónica.
    Sólo la capa azul tiene que ser grabada en una placa de circuito impreso.
    Las líneas rojas son cables. Es mucho más sencillo, y requiere menos precisión,
    construir una placa de circuito impreso de sólo una cara.
    Puedes soldar los cables (en rojo) de forma que tengan la menor longitud.
    No podía hacer eso en eagle. 
     
    Los pocos componentes de la parte de alto voltaje de la fuente pueden ser
    montados en una placa de prototipado estándar (son esas placas con muchos agujeritos).
    La placa principal y la parte de potencia se conectan con cables (JP2 y JP3).
    Notarás que el cable de masa de la parte principal se conecta a la salida
    positiva de contínua (DC). Esto es correto y es la razón por la que necesitamos
    dos transformadores separados (uno para la parte de potencia y la otra para
    la parte lógica con el microcontrolador y los amplificadores operacionales).
     
Como funciona
    Mirando en el esquemático principal puedes ver que consiste de 2
    partes. Una es marcada en el esquemático como "current control"
    (control de corriente) y la otra como "voltage control" (control de voltaje).
    Son dos bucles de control independientes. Uno controla la salida de voltaje
    y el otro la caída de voltaje(diferencia de potencial) sobre la
    resistencia de 0.275 ohmios en la parte de alimentación.
    La caída de voltaje es equivalente a la corriente.
    Las dos partes de control son "combinadas" con los diodos D2 y D3.
    Estos diodos forman una puerta OR analógica. Esto es, si la corriente es
    demasiado alta entonces la parte del control de corriente baja el voltaje hasta
    que la corriente vuelva dentro de los límites, por otro lado, si la corriente
    no es demasiado alta, la parte de control del voltaje se encarga de regular
    la salida de voltaje. 
    
    Esta puerta OR trabaja porque el transistor T3 está conectado vía
    la resistencia R19 a +5V. Si no hubiera amplificadores operacionales
    conectados tras D2 y D3 conseguirías la máxima potencia de salida.
    El amplificador operacional en el bucle de control controla la salida
    quitando los +5V de T3 (cogiendo de masa tanto como se necesite). 
    
    El bucle de control de voltaje controla la salida de voltaje acorde
    al nivel de voltaje que consigue del pin 5 de IC6B.
    En otras palabras, el voltaje en el pin 5 es equivalente a la salida
    multiplicada por el factor de amplificación que es determinado por
    las resistencias R15,R10 y R16. Igual para la corriente, excepto que
    es el voltaje en la resistencia R30 el equivalente para la máxima
    corriente de salida. 
    
    Para seleccionar la máxima corriente o regular la salida de la fuente
    de alimentación sólo necesitaremos suministrar los voltajes apropiados en los
    dos puntos (pin 5 de IC6B y en la resistencia R30). Esto es lo que
    hace el microcontrolador.... pero, ¿cómo puede un microcontrolador generar
    y regular un voltaje de referencia de contínua?. Echa un vistazo a la
    siguiente imagen:  
    
      ![[pwm]](../../common/images/article251/lowpass.gif) 
    
    
    Lo que ves en esta imagen es como una señal pulsante(tren de pulsos) puede ser
    transformada en una señal contínua. Todo lo que nececesitas es
    pasarla a través de un filtro paso bajo con una frecuencia de corte
    unas 100 (o más) veces por debajo de la frecuencia de la señal.
    Como nuestro microcontrolador funciona a 4MHz no es demasiado
    difícil diseñar ese filtro. Incluso si generásemos la señal con
    software conseguiríamos unos pocos kHz y el filtro todavía sería
    muy pequeño. 
    
    La diferencia en la imagen ente el diagrama superior y el inferior
    se llama modulación por ancho de pulso. Cambiando la longitud de los
    pulsos podemos cambiar el voltaje en contínua despues del filtrado. 
    
    !Genial, podremos generar un voltaje de corriente contínua
    exacto con una señal digital! 
    
    El microcontrolador AT90S4433 tiene dos contadores internos,
    uno de 16 bits y el otro de 8. El contador de 16 bits tiene la posibilidad
    de usar modulación por ancho de pulso (PWM - Pulse Width Modulation -
    en inglés), implementada
    en hardware en el micro con una resolución de 10 bits.
    El contador de 8 bits no tiene esta capacidad, pero nosotros la
    podemos implementar por software.Todavía es suficientemente rápido.
    Usaremos el contador de 16 bits para la regulación del voltaje, lo que
    nos da 10 bits=1023 escalones de resolución para el control del voltaje.
    La salida de corriente está controlada con el contador de 8 bits que nos
    da 255 escalones para controlar el rango de 1-3000mA. Esto significa que
    tendremos una precisión de 12 mA (o menos). Es suficiente para el control
    de corriente. 
    
    Todos los demás componentes en el circuito son para la fuente
    de alimentación y la referencia de voltaje (el 7805 es nuestro
    punto de referencia) y para asegurar que la fuente de alimentación
    no se comporta de manera inestable cuando se conecta o se desconecta.
     
El software
    El software para el microcontrolador usa muchos aspectos que ya
    conoces de los artículos anteriores (uart para el rs232, display LCD,
    contadores en modo interrupción). Puedes echar un vistazo en: 
    linuxdcp.c.
    
    
    Lo más interesante es quizás el software PWM (Modulación por
    Ancho de Pulso). La variable ipwm_phase implementa junto con
    ipwm_h el PWM para la corriente. Nosotros correremos el contador
    de 8 bits en modo interrupción y cada vez que se genere una
    interrupción por overflow será llamada la función
    "SIGNAL(SIG_OVERFLOW0)". Aquí comprobaremos ipwm_phase para ver
    si tenemos que generar un '1' o un '0' en la salida y reiniciaremos
    el contador. Fácil!.
    
    Aunque el software no es demasiado complicado, para entenderlo del
    todo te recomiendo que leas las hojas de características de el 4433
    (ver las referencias). 
    
    El 4433 es un microcontrolador de 8 bits y sus capacidades matemáticas
    son limitadas. Las funciones divXbyY y multiXbyY implementan
    matemática de 24 bits que necesitaremos para calcular el ancho de
    pulso desde un voltaje dado por el usuario. 
    
    Nuestra fuente de alimentación tiene 7 botones. Seis de ellos
    son para seleccionar los niveles de voltaje y corriente, y el
    otro es para el modo "reposo" (standby).
    Usando este modo puedes temporalmente desconectar la salida
    y todavía podrás cambiar los límites de voltaje y corriente.
    El estado de los botones es sondeado en el bucle principal del
    programa. La variable ignorebutton es usada para el rebote de los
    botones. Cuando presionas un botón con tus dedos lo mueves arriba
    y abajo un poco. Como humano no notarás esto pero el microcontrolador
    es tan rápido que verá on,off,on,off... El contador ignorebutton
    espera un poco después que se haya presionado el botón para evitar
    estos rebotes.
     
Haciendo la placa de circuito impreso
    
      
        | La placa principal: 
 ![[main board]](../../common/images/article251/dcpower-mainbrd_th.jpg)  | 
      
        | La caja para la fuente. Madera a los lados y
        metal para la parte de abajo, arriba y frontal: 
 ![[box]](../../common/images/article251/dcpower-box_th.jpg)  | 
      
        | El panel frontal: 
 ![[front]](../../common/images/article251/dcpower-frontpanel_th.jpg)  | 
    
    El paquete software contiene un archivo postscript (linuxDCpower.ps)
    para la placa de circuito impreso. Personalmente encuentro que los
    pads son siempre un poco pequeños. Por tanto os recomiendo agrandarlos
    un poco con un rotulador antes de insolar la placa. El proceso para
    hacer la placa de forma casera es descrito en: Mayo 2002, Un panel de
    control LCD para tu servidor Linux". 
    Cómo construir una barata pero bonita caja para tu fuente de alimentación
    es descrito en el artículo "Septiembre 2002, Contador de
    Frecuencia de 1Hz-100Mhz con visor LCD e interfaz RS232".
    Puedes ver la caja y el panel frontal que yo hice a la derecha.
    Pincha en las imagenes para agrandarlas.
     
Comprobaciones
    Como cualquier otro circuito que hayas soldado es buena idea
    no conectar directamente al completo la fuente de alimentación,
    sino probarlo paso a paso. Así detectarás fallos que puedas haber
    tenido mientras hacías el circuito. 
    
      - Monta la placa principal con todos los componentes pero no
      pongas todavía los circuitos integrados en sus zócalos.
- Coge una batería de 9V y conecta el positivo al pin 2 y el negativo
      al pin 1 del conector marcado en el esquemático con AC_POWER.
      Usa un voltímetro y comprueba que tienes +5V en el max232 entre los
      pines 8 y 16 y en los pines 7 y 8 del micro.
      En los amplificadores operacionales deberías tener casi 9V
      en el pin positivo.
- Ahora da la vuelta a la pila de 9V (el pin 1 al positivo y el
      pin 2 al negativo) y comprueba que tienes alrededor de -9V en los
      pines negativos de los operacionales.
- Si todas las pruebas hasta aquí se han superado, entonces
      la fuente de alimentación de la placa principal funciona y puedes
      insertar el max 232 y el microcontrolador en sus zócalos.
- Usa de nuevo la batería de 9V y conéctala para tener los +5V
      (ver arriba). Conecta el cable del programador al puerto paralelo
      y el conector para programación a la placa.
 Desempaqueta el software (para bajártelo vé al capítulo de referencias),
      "cd" al directorio que se ha creado y teclea:
 make avr_led_lcd_test.hex
 make testload
 make ttydevinit
 
 Ahora el software de prueba debería ser cargado a la placa.
      En el display LCD tendrías que ver "hello", el LED rojo parpadeando
      y si conectas el ordenador al rs232 deberías ver "ok" impreso
      (inicializa la línea rs232 con ttydevinit, entonces teclea
      cat /dev/ttyS0, o cat /dev/ttyS1 para el COM2).
- Ahora monta la parte de potencia pero no conectes el
      transformador principal todavía. En su lugar conecta la batería
      de 9V a los cables donde el transformador tendría que ser conectado.
      No te preocupes en cuál dirección debería ser la pila conectada,
      el condensador de 4700uF debería siempre cargarse alrededor de los 9V.
      Comprueba esto con un voltímetro.
- Cuando este último paso de prueba haya sido superado haz algunas
      comprobaciones finales de los cables,conecta todos los transformadores
      y enciende la fuente. Sin amplificadores operacionales en sus
      zócalos deberías tener el voltaje máximo de salida de la fuente.
      Mide esto pero cun cuidado de no causar ningún cortocircuito porque
      quemarás los transistores de potencia porque no no hay limitación
      de corriente todavía.
- Apaga,inserta todos los amplificadores operacionales y vuelve
      a conectar el cable de programación, enciende y teclea:
 make
 make load
 
- Ahora la fuente de alimentación debería ser completamente funcional.
      Nota que mientras el cable de programación esté conectado la salida
      es ligeramente distinta. Desconectalo para conseguir el voltaje y la
      corriente de salida exactos.
Aquí está: Nuestra propia fuente de alimentación
    Has visto arriba que hay 3 opciones disponibles dependiendo del transformador
    que uses. El software por defecto es para 16V, 2.2A de salida.
    Para cambiar ésto edita el archivo linuxdcp.c
    y busca:
    MAX_U, IMINSTEP, MAX_I, además tendrás que cambiar la calibración
    en la función set_i si tienes la salida máxima de 3A. El código está
    bien comentado y verás que es lo que necesitas cambiar. 
    
    Finalmente aquí tienes unas pocas imáenes de la fuente de alimentación
    que me he construido. Es un poco de trabajo pero realmente es muy buena
    y robusta. El tiempo fué bien invertido porque una fuente de alimentación
    de laboratorio es realmente una de las cosas más usadas. 
    
    
      ![[front view]](../../common/images/article251/dcpower-final_frontview_th.jpg)
      
      ![[top view]](../../common/images/article251/dcpower-final_topview_th.jpg) 
    
     
Usando la fuente de alimentación
    Probablemente es casi obvio como usarla.
    Tienes 4 botones para seleccionar el voltaje de salida. 2 de
    ellos para subir/bajar en pasos de 1V y otros 2 para pasos de 0.1V.
    La limitación de corriente puede ser seleccionada también con 2 botones.
    Aquí los pasos no son lineares. Para valores pequeños puedes incrementar
    o decrementar pasos de 50mA. Para valores por encima de 200mA los
    pasos son de 100mA y superiores a 1A en 200mA. De ésta forma es fácil
    seleccionar el rango completo con sólo 2 botones. 
    El botón de standby puede ser usado para desconectar temporalmente la
    potencia sin la necesidad de seleccionar los valores de nuevo cuando
    sea conectada. 
    El led rojo se encenderá cuando se alcance el límite de corriente,
    y parpadeará en el modo standby. 
    La fuente de alimentación puede ser controlada completamente via
    comandos ascii por el puerto serie. Los siguientes comandos están
    disponibles:
    u=X selecciona el voltaje (p.ej u=105 selecciona el voltaje
    a 10.5V)
    i=Xmax selecciona la corriente máxima (p.ej i=500 selecciona el límite
    de corriente a 500mA)
    s=1 o s=0 selecciona el modo standby
    u=? o i=? o s=? imprime los parámetros seleccionados actualmente. Esto producirá
    una salida en la pantalla como esta, p.ej:
    u: 50 s:0 i: 100 l:0
    u: significa voltaje=50 =5V, s:0 significa standby off, i: 100 es
    100mA, y l:0 que el límite de corriente no se ha alcanzado.
    Usando este lenguaje de comandos ascii podrías también escribirte una interfaz
    gráfica de usuario para la fuente de alimentación. Para usar la línea rs232
    necesitas inicializarla primero con el comando ttydevinit. ttydevinit está incluído
    en el paquete software. Esto está descrito también en el artículo:
    Septiembre 2002, Contador
    de frecuencias.
    Como has visto en el esquemático usamos 2 transformadores y el plano de
    masa de la lógica de control está conectada a la salida positiva de
    corriente contínua (DC). Los dos transformadores separan los voltajes y
    no hay problema con esta configuración. Necesitamos conectar cosas como
    estas para tener la polaridad correcta para los bucles de realimentación
    de los amplificadores operacionales.
    Unas palabras de atención: Esta configuración significa también que el
    cable de masa de la línea RS232 está conectada a la salida positiva de corriente
    contínua! En otras palabras, no puedes usar la línea rs232 si quieres usar la
    fuente de alimentación con otros componentes que estén conectados a la línea de
    masa del ordenador. Pues ser una buena idea poner una etiqueta en la fuente
    de alimentación que diga "la línea de masa de la conexión rs232 está conectada
    a la línea de salida positiva de corriente contínua".
    Si quieres asegurarte que no hay forma de causar un cortocircuito a través de
    la cable de masa de la línea RS232 o usas un portátil alimentado por la batería
    o haces seguro que el circuito alimentado por la fuente de alimentación no tiene
    cualquier otra conexión o no usa el interfaz de comandos RS232. Tampoco te preocupes
    demasiado por este aviso. Si no sobrepasas los 250mA de limitación de corriente
    de la fuente entonces el led rojo te dirá cuando has cometido un error y no hay
    peligro para tu ordenador incluso si haces alguna estupidez.
    
     
Seguridad
    Este circuito contiene un transformador que está conectado la toma de
    corriente principal (230V o 110V dependiendo del país). Por favor
    asegurate de un aislamiento apropiado. Si nunca has trabajado con
    fuentes de alimentación pide a una persona experta que compruebe el
    circuito mirando por el aislamiento y la seguridad antes de conectarla
    por primera vez.
     
Ajustes
    El software para la fuente de alimentación está ya calibrado.
    Seguramente no tendrás que cambiar nada ahí. La calibración en
    el lado hardware depende sólo del 7805, R15, R10, R16 y R38,
    R30, R26. Sólo estos componentes influyen en los niveles de
    voltaje y corriente. Si quieres hacer un ajuste fino puedes o
    cambiar estas resistencias o modificar el software. Nota que
    el cable de programación conectado influye en la salida. Antes
    de medir deberías desconectarlo. En el software puedes hacer
    cambios en las funciones set_u y set_i. Esto está comentado
    en el código de linuxdcp.c
     
Referencias
    
    
  
 
Formulario de "talkback" para este artículo
Cada artículo tiene su propia página de "talkback". A través de esa página puedes enviar un comentario o consultar los comentarios de otros lectores
<--, regresar al índice de este número 
2004-02-20, generated by lfparser version 2.43