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
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:
- 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
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.
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):
El esquemático para la parte de potencia (pincha en la imagen para agrandarla):
Como conectar los pulsadores en una matriz (pincha en la imagen para agrandarla):
La placa principal, vista desde arriba (pincha en la imagen para agrandarla):
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:
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:
|
La caja para la fuente. Madera a los lados y
metal para la parte de abajo, arriba y frontal:
|
El panel frontal:
|
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.
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