Al pasar esta corriente
eléctrica por el bombillo haremos que se ilumine al 100 %.
Si logramos hacer
que la señal aplicada al bombillo se recorte como se ve en la figura siguiente,
obtendremos valores de iluminación entre un 0% y un 100%.
El objetivo del proyecto es controlar el ángulo de
disparo de un TRIAC que estará conectado en serie con el bombillo, mediante el
controlador PI, de acuerdo a la intensidad de luz que perciba un sensor
LDR.
Etapas
Sensor y acondicionamiento
El sensor que se
utiliza es una fotorresistencia, el cual varía su valor, dependiendo de la
intensidad de luz que se le aplique. La señal de salida alta en caso de baja
intensidad de luz, y baja en caso contrario.
Como la salida del sensor (LDR) varia de
0-2.5v y la entrada del microcontrolador ATMEGA8 recibe voltajes de 0-5v,
amplificamos este valor en un factor de 2 para aprovechar la sensibilidad del
ADC del microcontrolador.
Referencia
Este potenciómetro se utilizará para
elegir la intensidad de luz de referencia que se requiera mantener. También irá
conectado a uno de los pines ADC del microcontrolador.
Control
El esquema muestra las conexiones de
los pines del microcontrolador.
Se utiliza este bloque de
circuito para poder sincronizar el programa con la señal sinusoidal del
circuito de potencia que se quiere controlar. Este circuito enviará un pulso de
interrupción cuando la señal cruce por 0, iniciando la rutina correspondiente
en el programa.
Circuito de Potencia
El diodo D1 se utiliza para proteger
al microcontrolador. El MOC3031 es un optotriac que enviará una señal de
activación al triac U6 cuando la salida del circuito de control sea 1 lógico (5
V), lo cual hará que el bombillo se encienda; caso contrario, si la salida del
circuito de control es 0 lógico (0 V) el bombillo no se encenderá.
Circuito Completo
Programa en Basic
$regfile = "m8def.dat" 'ATmega8
$crystal = 8000000 'Frecuencia de cristal=8 MHz
$hwstack = 32 'Hardware Stack
$swstack = 10 'Software Stack
Config Portb = Output 'Puerto B como salida
Config Portc = Input 'Puerto C como entrada
'Definicion de variables
Dim Sensor As Word 'Dato medido en ADC1=Sensor
Dim Ref As Word 'Dato medido en ADC0=Referencia
Dim Ek As Single 'Error actual
Dim Ek_1 As Single 'Error anterior
Dim Pk As Single 'Componente Proporcional
Dim Ik As Single 'Componente Integral actual
Dim Ik_1 As Single 'Componente integral anterior
Dim Kp As Single 'Ganancia Proporcional
Dim Ki As Single 'Ganancia Integral
Dim Uk As Single 'Señal de control
Dim Uk_dig As Word
Dim Ukmax As Word 'Límite máximo de Uk
Dim Ukmin As Word 'Límite mínimo de Uk
Dim T As Single 'Periodo de muestreo
Dim Rampa As Word 'Señal escalón
'Configuracion ADC
Config Adc = Single , Prescaler = Auto
'Configuracion de unterrupciones
Config Timer1 = Timer , Prescale = 256 'Configuración TIMER1, f=31.25 KHz
On Compare1a Int_timer1 'Interrupción por comparación
Enable Compare1a 'Habilitación interrupción por comparación
Config Int1 = Low Level 'INT1, flanco de bajada
On Int1 Int_zc 'Interrupción externa INT1
Enable Int1 'Habilitación INT1
Enable Interrupts 'Habilitación global de interrupciones
Timer1 = 0
Stop Timer1
'Programa principal
Ik_1 = 0
Ek_1 = 0
T = 0.0083 'Periodo de muestreo T=1/120=0.0083 s
Kp = 1
Ki = 0.04
Ukmax = 32 'Ukmax=32 escalones
Ukmin = 0 'Ukmin=0 escalones
Rampa = 0 'Reinicialización de Rampa
Do
nop 'Bucle infinito
Loop
'Rutinas de interrupción
'Interrupcion cruce por cero
Int_zc:
Stop Timer1
Timer1 = 0 'Reinicialización de Timer1
Compare1a = 7 'Interrupción cada 7*1/31250= 0.22 ms = 7.5ms/32
Rampa = 0 'Reiniciar Rampa en cada Interrupción
Portb.0 = 0 'Señal a Triac =0
'Obtensión de señales Referencia y Sensor
Start Adc
Ref = Getadc(0)
Sensor = Getadc(1)
Stop Adc
'control PI
Ek = Ref - Sensor
Pk = Ek * Kp ' P(k)=Kp*e(k)
Ik = Ek + Ek_1 ' I(k)=I(k-1)+Ki*T*(e(k)+e(k-1))/2
Ik = Ki * Ik
Ik = Ik * T
Ik = Ik / 2
Ik = Ik + Ik_1
Uk = Pk + Ik ' u(k)=P(k)+I(k)
Uk_dig = Uk + 1023 ' Ajuste en rango 0 - 32 escalones
Uk_dig = Uk_dig / 63
Ek_1 = Ek
Ik_1 = Ik
'limitación de rango de señal de control
If Uk_dig > Ukmax Then
Uk_dig = Ukmax
Elseif Uk_dig < Ukmin Then
Uk_dig = Ukmin
End If
Start Timer1
Return
'Interrupcion Timer cada 0.22 ms 32 escalones por semiciclo
Int_timer1:
Stop Timer1
Timer1 = 0 'Reiniciar Timer1
Rampa = Rampa + 1 'Incrementar rampa por cada interrupción
'Determinar instante en que se envia señal al TRIAC
If Uk_dig > Rampa Then
Portb.0 = 0 'Señal a Triac = 0
Else
Portb.0 = 1 'Señal a Triac =1
End If
Return
End
Funcionamiento:
El funcionamiento del programa es el siguiente:
- Se establece un nivel de iluminación deseado en un ambiente mediante el potenciómetro RV1.
- La iluminación se debe mantener en el nivel deseado, ya sea por acción del bombillo o por fuentes externas, como por ejemplo luz solar.
- El programa principal no realiza ninguna operación (se puede implementar alguna rutina). El control se realiza mediante una rutina de interrupción, por lo que no se tendrá al microcontrolador ocupado todo el tiempo.
- La rutina de interrupción, que se ejecuta en cada cruce por cero de la señal de potencia, consiste en un control PI discreto, en el que se implementan los siguientes algoritmos:
Se debe determinar el periodo de muestreo:
La
señal de interrupción se genera en los cruces por cero. En la rutina de
interrupción se obtienen las
señales del ADC, por lo tanto el periodo de
muestreo es igual al periodo de los pulsos de interrupción:
T=1 / (120 Hz) = 8.33 ms
- Se implementa una segunda rutina de interrupción por comparación que se ejecuta 32 veces en cada semiciclo de la señal de potencia. En cada interrupción una señal rampa se incrementa en una unidad y se reinicia en cada interrupcion de cruce por cero.
Se determina el valor en Compare1a:
El programa debe ejecutar una interrupción por comparación cada:
t = 7.5 ms / (32 escalones) = 0.23 ms
Frecuencia de Tiner1:
f = 8 MHz/256 = 31.25 KHz
Valor numérico en Compare1a:
Compare1a = 0.23 · 10^(-3) · 31.25 · 10^(3) = 7.18
Compare1a = 7
- Esta señal rampa se utiliza junto a la señal de control para determinar el ángulo de disparo del TRIAC.
La
señal de control “Uk” puede tomar un valor 0 -32 dependiendo de la intensidad
de
iluminación (mayor intensidad àUk mayor y viceversa).
iluminación (mayor intensidad àUk mayor y viceversa).
Si Uk > Rampa entonces el TRIAC no se dispara, el bombillo no se enciende.
Si Uk <= Rampa entonces el TRIAC se dispara, el bombillo se enciende.
voltaje eficáz también varíe; en consecuencia la intensidad de iluminación se controla.











tendras imagenes de la simulacion? grax
ResponderEliminarYa no tengo,
EliminarEsto fue hace mucho.
Saludos,