hola.abro este tema para publicar mis experencias con el control de iluminacion con triac y microcontrolador.
llevo mas de un mes intentando comprender el funcionamiento de este tipo de circuitos.y despues de muchas pruevas y configuraciones.y con la ayuda de nocturno que me ha asesorado en el tema.he podido realizar un circuito que controla la iluminacion de lamparas de filamento y fluorescentes de bajo consumo.
voy a explicar por encima como funcina este circuito:
el control de brillo de las lamparas de filamento se realiza al modificar el voltage de entrada a esta.o quizas seria mejor decir por el control de los semiciclos de la corriente alterna de la red electrica.
para este control utilizaremos un tirystor o un triac.la diferencia radica en que con el tirystor,solo podemos controlar una de las partes positiva o negativa de los semiciclos de la corriente electrica.
y con el triac podemos controlar las dos.
en el circuito que voy a mostrar utilizo un triac.ya que podremos aplicar el control de la corriente para los dos semiciclos.y de esta forma evitar una sensacion de parpadeo de la bombilla.
el funcinamiento del triac se basa en la posibilidad de permitir el paso de la corriente en un sentido o en otro de los pin T1 y T2
al aplicar un impulso de corriente de duracion determinada por las caracteristicas del componente que vallamos a usar,en el pin G (gate).
para poder activar el triac,lo primero es tener el circuito montado y alimentado con la carga en serie.la polaridad es indiferente para su activacion.una vez alimentado el circuito solo hay que aplicar la corriente en el pin gate.y el triac se activara en el sentido de la corriente que hayamos aplicado.
para poder desactivarlo,hay varias formas si no estoy equivocado.una es la desconexion de la alimentacion del circuito.y a la posterior conexion.el triac habra pasado a estado de alta impedancia.
tambien si aplicamos una tension de corriente inversa al pin gate cuando este este activo.(aunque no estoy seguro de esto)
y la otra la que vamos a usar en este circuito trabajando con corriente alterna.
la desconexion por cruce por cero.esto es el punto donde la corriente alterna pasa de una polaridad a la otra.
el funcionamiento del circuito se basa en la aplicacion de un impulso de corriente en el pin gate del triac en cada semiciclo de la corriente alterna.tanto de los semiciclos positivos como negativos.
la obtencion de la regulacion se basa en la activacion del triac en el momento preciso de cada semiciclo positivo y negativo.
asi que cuanto antes activemos el triac despues de cada cruce por cero,mayor tiempo estara el triac en conduccion y mayor sera la intensidad de luz de la lampara.
y cuanto mas tarde activemos el triac,menor intensidad de luz tendremos.
esta imagen seria un ejemplo:

aqui pongo la imagen del circuito del trimer:

el funcinamiento de este circuito se basa en la deteccion del punto donde el voltage de la corriente alterna pasa por 0 voltios.
y la posterior activacion del triac en un punto intermedio del semiciclo positivo y negativo de la corriente alterna antes del siguiente cruce por cero.
la deteccion de la señal de cruce por cero se realiza por el pin GP4 del pic mediante una resistencia de 1 mega conectada a la linea contraria a la de masa de 220v .
como hay dos tipos de cruces por cero.cuando la coincidencia se produce al pasar de + a - y cuando pasa de - a +
dentro del programa del pic hay que identificar estas dos situaciones.
como este pic no tiene interrupciones.la identificacion la realizaremos con unas lineas extras.
pero si tubiera interrupciones.la identificacion la realizariamos por el pin INT0 modificando el bit de INTEDG para que el disparo de
la interrupcion se realizara por flanco de subido o de bajada.
en este circuito la activacion del triac se realiza al poner a 1 el pin GP4.la conexion se realiza intercalando una resistencia de 10 homios.
aunque este valor varia segun el triac que vallamos a usar.
para la activacion del triac solo hace falta un impulso de corriente en su puerta.asi que entre pulso y pulso tenemos un tiempo bastante largo para gestionar otras operaciones del pic.como la lectura del boton de encendido/regulacion de la lampara.
este circuito es una forma basica del control de iluminacion midiante un microcontrolador 12F508.
dado que este pic no maneja interrupciones,el programa en asm.es mas largo que si tubiera interrupciones.
y solo es un programa para el estudio de este sistema.
ya que este circuito es propenso al fallo por interferencias.es decir que si se produciera una interferencia en la alimentacion,la luz se apagaria.
proximamente realizare otro programa para el mismo circuito con algunas protecciones por software contra interferencias.
aunque es muy posible que utilize otro pic.dado que este no posee eeprom de datos para salvaguardar datos despues de un fallo
por desbordamiento del wachtdog.
y aqui pongo el software:
;*************************************************www.ingeniopic.com*******************************************************
; PROGRAMA : dimmer_12F508_1v1
; Funcion : regulador de iluminacion para el hogar
;
;
; Revision : 1.1 26/10/2009 Programa para : PIC12F508
; CPU Clock : 4 MHz Reloj instruccion :
; WDT : Deshabilitado Tipo de reloj : IntRC
; Code Prot : OFF
;*****************************************************www.ingeniopic.com***************************************************
;FUNCIONAMIENTO DEL CIRCUITO:
;Para encender o apagar la luz se realizara una pulsacion breve sobre el pulsador.
;Si queremos entrar en el modo de regulacion,realizaremos una pulsacion larga (siempre que la luz este encendida)
LIST P=12F508 ;Se indica el modo de procesador
RADIX HEX ;Sistema de numeracion hexadecimal
INCLUDE "P12F508.inc"
;registros internos
__CONFIG _IntRC_OSC & _CP_OFF & _WDT_OFF & _MCLRE_OFF
CBLOCK 0x08 ;comienza el bloque de ram en la direccion 0x08
CONTADOR ;registro para el control de la pausa al activar el pulsador para entrar en modo de regulacion
REGULADOR ;registro que contiene el valor de la regulacion de iluminacion de la lampara
TIEMPO ;registro de temporizacion para la excitacion del tiristor
FLAGS ;registro contador de actuaciones sobre el pulsador
UPDOWN ;registro que identifica la ultima operacion de subida o bajada en el modo de regulacion de iluminacion
FLANCO ;registro contador del flanco de deteccion de cruce
REG_TEMPO ;registro para la temporizacion de la regulacion de la luz(para que al pulsar el boton tengamos mas precision a la hora de regular la luz)
ENDC ;fin del bloque de ram
;<<<<<<---------------------- VECTOR DE RESET ------------------------>>>>>>>
ORG 0x00 ;Inicio en el Vector de Reset
goto INICIO ;ir a la primera instruccion del programa
;<<<<<<----------------- INICIO PROGRAMA PRINCIPAL ------------------->>>>>>>
INICIO movlw b'10000100' ;configura el divisor de TMR0 division 1:32, pull up enable,wake up disable.
option
movlw b'00101111' ;PG0 salida excitacion triac,PG1 tx,PG2 rx,PG3 entrada pulsador,PG4 entrada deteccion cruce po cero
tris GPIO ;configura le puerto
clrf GPIO ;borra todas las salidas
movlw D'5' ;valor de regulacion maxima(cuanto menor sea el numero,mayor sera la iluminacion)este valor no puede ser inferior a 5.para evitar que se junten los cruces por 0
movwf REGULADOR ;borra registro de regulacion
clrf UPDOWN ;borra registro de identificacion de incremento o decremento de iluminacion.
movfw GPIO ;carga en w el contenido de GPIO
clrf TIEMPO
clrf FLAGS
clrf UPDOWN
clrf FLANCO
;<<<<<<<------------------------------------------------PROGRAMA PRINCIPAL---------------------------------------->>>>>>>>>>>>>>
PRINCIPAL goto DIMMER ;subprograma controlador dimmer
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<SUBPROGRAMA LECTURA INTERRUPTOR MANDO LUZ>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
BOTON clrf CONTADOR ;borra el contador de espera
espera btfsc GPIO,3 ;comprueva si el pin GPIO3 esta a 0(si el boton no esta pulsado)-
retlw 0x00 ;retorna
esperalo clrf TMR0 ;borra TMR0
espera_on movlw d'240' ;valor de temporizacion
subwf TMR0,W
btfss STATUS,C ;comparalo con TMR0 y si es menor sigue comprovando
goto espera_on
incf CONTADOR,F ;incrementa registro CONTADOR
movlw d'50' ;valor que determina el tiempo maximo de pulsado de interruptor para modo escaleras
subwf CONTADOR,W ;
btfsc STATUS,C ;si el valor es igual o superior,
goto REGULACION ;salta a subprograma de regulacion de luz
btfss GPIO,3 ;comprueva si el interruptor esta pulsado
goto esperalo ;si es asi,sigue temporizando
incf FLAGS,F ;en caso contrario incrementa FLAGS para on/off de la lampara
retlw 0X00
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<SUBPROGRAMA PARA AJUSTAR REGULACION DE LUZ>>>>>>>>>>>>>>>>>>>>>>>>>>>
REGULACION btfss FLAGS,0 ;comprueva que la entrada en el modo de regulacion se realiza con la lampara encendida
retlw 0X00 ;en caso contrario no entrar en este modo de funcionamiento
incf UPDOWN,F ;registro para el control del aumento/descenso de iluminacion
REGU_2 btfsc GPIO,3 ;comprueva si el interruptor esta pulsado
retlw 0X00 ;si no es asi retorna
;LAS SIGUIENTES LINEAS SON PARA RELENTIZAR LA REGULACION DE LA LUZ
incf REG_TEMPO,F ;incrementa registro REG_TEMPO
btfss REG_TEMPO,2 ;comprueva el bit 2 de REG_TEMPO
goto SALIDA ;si esta a 0 salir del programa de regulacion
clrf REG_TEMPO ;si es 1 borra el registro REG_TEMPO y continua con el programa
btfsc UPDOWN,0 ;si el bit 0 de UPDOWN es 1 (si la luz estaba subiendo de intensidad la ultima vez que la regulamos)salta
goto incre ;goto incre,(subprograma para el aumento de iluminacion)(si la ultima vez que regulamos estabamos decrementandola)
decf REGULADOR,F ;en caso contrario decrementa REGULADOR(disminulle intensidad de lampara)
movlw 0x05 ;valor maximo de iluminacion
subwf REGULADOR,W
btfsc STATUS,C ;si REGULADOR es menor del valor anterior salta
goto SALIDA ;en caso contrario saca valor de iluminacion
movlw 0x05 ;carga el valor 0x05 de iluminacion(valor maximo de iluminacion)
movwf REGULADOR ;en REGULADOR
goto SALIDA
incre
incf REGULADOR,F ;incrementa REGULADOR
movlw d'116' ;valor de regulacion minima.tope 116(menor iluminacion,se produce parpadeo en las lamparas de bajo consumo)
subwf REGULADOR,W
btfsc STATUS,C ;si REGULADOR se pasa del valor que contiene w
decf REGULADOR,F ;decrementa REGULADOR
goto SALIDA
;AQUI SE DETECTAN LOS FLANCOS DE SUBIDA Y BAJADA DEL DETECTOR DE CRUCE.
SALIDA incf FLANCO,F ;incrementa registro contador de flancos
btfsc FLANCO,0 ;si es par detecta primero el flanco de subida
goto $+6 ;si es impar detecta primero el flanco de bajada
btfss GPIO,5 ;espera a que se produzca la subida del pulso de cruze por 0
goto $-1
btfsc GPIO,5 ;espera a que se produzca la bajada del pulso de cruze por 0
goto $-1
goto $+5
btfsc GPIO,5 ;espera a que se produzca la bajada del pulso de cruze por 0
goto $-1
btfss GPIO,5 ;espera a que se produzca la subida del pulso de cruze por 0
goto $-1
bcf GPIO,4 ;desactivar triac
movfw REGULADOR ;carga en W el valor de REGULADOR (tiempo activacion de fase de semiciclo)
movwf TIEMPO ;mete el valor en TIEMPO
call FINE ;temporizacion fase de encendido de lampara
bsf GPIO,4 ;activar triac
FILL (nop),6 ;serie de 6 nop para darle tiempo al triac a excitarse.
bcf GPIO,4 ;desactiva el triac
goto REGU_2
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<DETECTOR CRUZE CERO>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DIMMER clrf CONTADOR
btfss FLAGS,0 ;si el bit 0 de FLAGS esta a 0
goto APAGA ;apaga la luz
;AQUI SE DETECTAN LOS FLANCOS DE SUBIDA Y BAJADA DEL DETECTOR DE CRUCE.
incf FLANCO,F ;incrementa registro contador de flancos
btfsc FLANCO,0 ;si es par detecta primero el flanco de subida
goto $+6 ;si es impar detecta primero el flanco de bajada
btfss GPIO,5 ;espera a que se produzca la subida del pulso de cruze por 0
goto $-1
btfsc GPIO,5 ;espera a que se produzca la bajada del pulso de cruze por 0
goto $-1
goto $+5
btfsc GPIO,5 ;espera a que se produzca la bajada del pulso de cruze por 0
goto $-1
btfss GPIO,5 ;espera a que se produzca la subida del pulso de cruze por 0
goto $-1
bcf GPIO,4 ;desactivar triac
movfw REGULADOR ;carga en W el valor de REGULADOR (tiempo activacion de fase de semiciclo)
movwf TIEMPO ;mete el valor en TIEMPO
call FINE ;temporizacion fase de encendido de lampara
bsf GPIO,4 ;activar triac
FILL (nop),6 ;serie de 6 nop para darle tiempo al triac a excitarse.
bcf GPIO,4
call BOTON ;subprograma de lectura de estado de interruptor de pared
bcf GPIO,0
goto PRINCIPAL ;principio de programa
APAGA bcf GPIO,4 ;apaga la luz
call BOTON
goto PRINCIPAL ;principio de programa
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<SUBPROGRAMA DE RETARDO DE SEMICICLO>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
FINE clrf TMR0 ;borra TMR0
retraso2 movfw TIEMPO ;carga en w el contenido de TIEMPO(retraso para la excitacion del tiristor)
subwf TMR0,W ;comprueva si TMR0 es mayor que TIEMPO
btfss STATUS,C ;si es mayor salta
goto retraso2 ;en caso contrario sigue comprovando
FINE2 clrf TMR0 ;borra TMR0
retraso3 movfw TIEMPO ;carga en w el contenido de TMR0
subwf TMR0,W ;carga en w el contenido de TIEMPO(retraso para la excitacion del tiristor)
btfss STATUS,C ;comprueva si TMR0 es mayor que TIEMPO
goto retraso3 ;en caso contrario sigue comprovando
retlw 0x00 ;retorna
end ;fin