You are on page 1of 21

Fuente de alimentacin digital

Fuente de alimentacin digital

<<<< DOCUMENTACION EN CONSTRUCCIN >>>


Descripcin
Este proyecto se basa en las modificaciones de Osvaldo Valdorre (ver hilo del foro
TodoPic) a la fuente de alimentacin publicada por la revista elektor nmero 260.
La fuente tiene las siguientes caractersticas
Tensin de entrada: 220VAC
Tensin de salida: 0 a 25VDC con una corriente de 0 a 2.5A.
Precisin de la regulacin
Gruesa: 1V / 100mA
Fina: 100mv / 3mA
Uso del microcontrolador PIC 16F877A de Microchip dejando disponibles para el uso 10
puertos.
Ajuste por medio de pulsadores y encoder mecnico u ptico.
Ventilacin controlada de acuerdo al consumo de corriente.
Lectura del consumo de corriente, con indicacin de sobre corriente visual y auditiva.
Memorias preseleccionadas (2.5, 3, 3.3, 5, 9 y 12 voltios a 0.5A, 1A y 2.5A).
Control de ventilacin por lectura de temperatura.
Lneas de alimentacin de circuito de control separado de la parte de potencia.
Informacin de todos los valores por medio de LCD 16x2 con control de contraste y
backlight.
Control y comunicacin por RS232 con PC u otra placa de control.
Cdigo escrito en C del compilador SDCC.

Agradecimientos
Totalmente agradecido con Osvaldo Valdorre por crear esta fuente y compartirla con la
comunidad.
Un especial agradecimiento a los integrantes del Foro uControl - El mejor foro de internet
para los amantes de electrnica, por sus ayudas en mi carrera por armar esta fuente en muy
poco tiempo.

Licencia
Esta documentacin se encuentra disponible bajo la licencia Creative Commons
(Attribution-Share Alike 3.0 Unported)
Objetivo
Una fuente de alimentacin es una de las herramientas ms usadas en un laboratorio
electrnico, existen en el mercado de varios tipos, con voltaje fijo, regulables en forma
analgica, fuentes conmutadas (como las de PC) que proveen tensiones variadas (12v, -12v,
5V, -5V) con altos amperajes.
La idea de esta fuente de alimentacin es que sea una fuente analgica controlada/regulada
por el microcontrolador de fcil armado, barata y con mltiples prestaciones con
posibilidades de expansin.
Restricciones de diseo
Dado que la disipacin en calor para 25V a 3 o 4A puede comprometer algunos
componentes se debe contar con ventilacin forzada controlada por temperatura y consumo.
Las lneas de alimentacin externas deben estar separadas de la parte de control, esto
reduce posibles cadas de tensin por el uso de la ventilacin, la luz trasera del LCD u otros
dispositivos.
Para facilitar la construccin los PCBs se disearn a una cara sin puentes sin impedir el
uso de mtodos de menor costo como la transferencia de toner por calor.
El peso de dos transformadores ms la electrnica en general puede llevar a que la fuente
tenga un peso importante (3kg en mi caso), es por ello que se utilizar un gabinete de
aluminio de 3mm.
El lenguaje de programacin debe ser C dado que es fcil de entender para una amplia
mayora de personas, pero con rutinas en assembler cuando se requiera eficiencia de
ejecucin.
El compilador debera ser gratuito y sin lmite en la generacin del archivo HEX para el
PIC.

El cdigo debe estar muy comentado en cada una de sus fases para facilitar al que desee
adaptar el trabajo a sus necesidades.

Hardware
El circuito est formado por dos partes, una analgica con transistores de paso, operacional
LM324N, transformadores, regulador 7805, entradas y salidas de control.
La parte de control est formada por el microcontrolador, el LCD, el buzzer, conector ICSP,
y conectores a pulsadores de entrada y encoder si se elige usar.
Parte analgica
El circuito regulador est dominado por el componente LM324N, un operacional cuadrple
que nos da la posibilidad de una tensin mxima de 32V y con el uso de resistencias de baja
tolerancia (en mi caso utilizo de 5%, pero se recomienda del 1%).
El circuito lo divid en secciones para su mejor entendimiento y anlisis
Etapa de alimentacin

Provee la conversin de 220VAC a 24VDC para la parte de potencia, y 5VDC para la parte
de control, as como 12VDC para el ventilador.
Como acotacin, se recomienda que el transformador de 12V sea de 1A como mnimo.

Regulacin de tensin
La tensin se regula por medio de tres transistores de paso (TIP 142), un divisor de tensin
y el comparador del operacional LM324.

Regulacin de corriente

<< CONTINUA.... >>>


-----------------------Anlisis del encoder
Encoder para rotacin continua con tres pines de salida.
Dos canales de salida de cdigo grey (http://es.wikipedia.org/wiki/Cdigo_Gray).
Genera tres secuencias binarias 11,10, 00, 01 por cada giro.
Cdigo Gray de dos bits
00
01
11
10
El encoder posee tres terminales, uno es el comn, y los otros son las salidas digitales
generadas por los contactos internos del dispositivo.
Genera la siguiente secuencia
Canal A B

Estado1 0 0
Estado2 0 1
Estado3 1 1
Estado4 1 0
Rotacin en sentido horario ->
00 01 11 10 00
<- Rotacin en sentido antihorario Coneccin al PIC
El terminal del medio va a masa y los otros dos se conectan cada uno a una resistencia de
pullup de al menos 1k a VCC.

Chuck McManis y su publicacin "Quadratrack: Using Mechanical Rotary Encoders" es el


autor original de la lectura del encoder en el cdigo ASM de Valdorre.
URL: http://www.mcmanis.com/chuck/robotics/projects/lab-x3/quadratrak.html
Citando al autor:
Para una interrupcin de 1khz desde el TMR0 en un sistema a 4MHZ se debe hacer este
cdigo (en ASM):
; * * * * * *
; * BANK 1 Operations
; * * * * * *
BSF STATUS,RP0 ; Set Bank 1
MOVLW B'0000010' ; Set TMR0 prescaler to 8
MOVWF OPTION_REG ; Store it in the OPTION register
CLRF TRISB ; B all outputs
BSF TRISB,QUAD_A ; Except for Quadrature inputs
BSF TRISB,QUAD_B
; * * * * * * * * * * *
; * BANK 0 Operations *
; * * * * * * * * * * *
CLRF STATUS ; Back to BANK 0
BSF INTCON, T0IE ; Enable Timer 0 to interrupt
BCF INTCON, T0IF ; Reset interrupt flag
BSF INTCON, GIE ; Enable interrupts

Luego el servicio de interrupcin debera ser:

; Interrupt Service Routine Pre-amble, save state,


; reset status to BANK 0
INTR_PRE:
MOVWF TMP_W ; Copy W to temp register
SWAPF STATUS,W ; Swap Status and move to W
MOVWF TMP_STATUS ; Copy STATUS to a temp
CLRF STATUS ; Force Bank 0
;
; State is saved, and we've expended 3 Tcy plus the
; 3 Tcy (4 worst case) of interrupt latency for a total
; of 6(7) Tcy.
;
; Now loop through until we've satisfied all the
;pending interrupts.
;
ISR_0:
; ... test bit to see if it is set
BTFSS INTCON,T0IF ; Timeer0 Overflow?
GOTO ISR_1 ; No, check next thing.
;
; Else process Timer 0 Overflow Interrupt
;
BCF INTCON, T0IF ; Clear interrupt
MOVLW D'133' ; Reset 1khz counter
MOVWF TMR0 ; Store it.
CALL QUAD_STATE ; Check Quadrature Encoders.
GOTO ISR_1 ; Nope, keep counting
ISR_1:
;
; Exit the interrupt service routine.
; This involves recovering W and STATUS and then
; returning. Note that putting STATUS back
; automatically pops the bank back as well.
; This takes 6 Tcy for a total overhead of 12 Tcy for sync
; interrupts and 13 Tcy for async interrupts.
;
INTR_POST:
SWAPF TMP_STATUS,W ; Pull Status back into W
MOVWF STATUS ; Store it in status
SWAPF TMP_W,F ; Prepare W to be restored
SWAPF TMP_W,W ; Restore it
RETFIE

Como se puede ver, primero se recarga la interrupcin TMR0 para asegurar un ratio de
ticks (y adems esta es la primer interrupcin verificada!)
Luego se verifica el estado del encoder en la llamada a QUAD_STATE:

;
; QUAD State
;

; A quadrature encoder traverse a couple of states


; when it is rotating these are:
; 00 | Counter
; 10 | Clockwise
; 11 | ^
; 01 V |
; 00 Clockwise |
;
;
QUAD_STATE:
BCF STATUS,C ; Force Carry to be zero
MOVF PORTB,W ; Read the encoder
ANDLW H'6' ; And it with 0110
MOVWF Q_1 ; Store it
RRF Q_1,F ; And rotate it right.
RLF Q_NOW,F ; Rotate Q_NOW Left
RLF Q_NOW,W ; by two
IORWF Q_1,W ; Or in the current value
MOVWF QUAD_ACT ; Store at as next action
MOVF Q_1,W ; Get last time
MOVWF Q_NOW ; And store it.
;
; Computed jump based on Quadrature pin state.
;
MOVLW high QUAD_STATE
MOVWF PCLATH
MOVF QUAD_ACT,W ; Get button state
ADDWF PCL,F ; Indirect jump
RETURN ; 00 -> 00
GOTO DEC_COUNT ; 00 -> 01 -1
GOTO INC_COUNT ; 00 -> 10 +1
RETURN ; 00 -> 11
GOTO INC_COUNT ; 01 -> 00 +1
RETURN ; 01 -> 01
RETURN ; 01 -> 10
GOTO DEC_COUNT ; 01 -> 11 -1
GOTO DEC_COUNT ; 10 -> 00 -1
RETURN ; 10 -> 01
RETURN ; 10 -> 10
GOTO INC_COUNT ; 10 -> 11 +1
RETURN ; 11 -> 00
GOTO INC_COUNT ; 11 -> 01 +1
GOTO DEC_COUNT ; 11 -> 10 -1
RETURN ; 11 -> 11
INC_COUNT:
INCF COUNT,F
MOVLW D'201'
SUBWF COUNT,W
BTFSS STATUS,Z
RETURN
DECF COUNT,F
RETURN
DEC_COUNT
DECF COUNT,F
MOVLW H'FF'
SUBWF COUNT,W

BTFSS STATUS,Z
RETURN
INCF COUNT,F
RETURN

Soando un poco...

El diseo del gabinete para fuente lo estoy realizando con el software gratuito de google
llamado SketchUp.
Vista del frente

Vista posterior

Luego de teclear bastante, tengo programada y funcionando 100% la parte de control de la


fuente de alimentacin digital.
Leyendo mediciones.
Por un lado tenemos al voltmetro abajo, el lcd arriba, y a la derecha un programa de
comunicacin serial donde puedo comunicarme con la fuente.

Trabajando sobre el prototipo de la placa de control.


Aqu pueden ver al multiboard funcionando junto a sus amigos mdulos, pickit 2 clone
reloaded,FT232 para conversin RS232 a USB para control desde la PC, LCD de la fuente,
placa de potencia, etc.

El software est programado en C, totalmente explicado con comentarios y es posible


reemplazar el uso del encoder ptico por dos pulsadores o un encoder mecnico con una
simple lnea de cdigo:
#define USAR_PULSADORES
El compilador usado es el SDCC, un compilador gratuito, que uso desde un editor de texto

llamado ConTEXT.
Bueno, esta es la placa de control, va atornillada en el frente.

Es importante ver que del modelo con plano de masa le agrego igualmente ms area
marcada para ayudar al ataque cido.

Luego de 4 horas de laburo tenemos la placa de control funcionando, un agregado ms a la


fuente de valdorre es que dispone de coneccin ICSP para no tener que sacar el micro, que
tiene la extraa costumbre de no hacer caso a entrar o salir de los zcalos de 40 pines.

El LCD de 16x2 va soldado con pines a la parte posterior del pcb. No soldar hasta saber
que todo funciona ok, o de lo contrario te va a costar bastante la "desoldadita".

Software de control arrancando

1,2,3 probando, todo ok!

Control ventilacin por temperatura


Utilizo un NTC de 10k
El esquema es el siguiente:
entrada analogica RA2---------o------------NTC-------O 5V
|
Resistencia de
470 OHM
|
GND

Este componente no est en la placa de control, ya que lo arm de esta manera:

Le faltara el panel frontal en blanco con letras negras y de la parte trasera todava me falta
el conector RS232.

Videos de la fuente funcionando: