Autores del proyecto:
Angela Bibiana Rivera González
En el siguiente documento se presenta la implementación y programación de un dimmer con PWM sincronizado usando el PIC 16F1937, el proceso se realizó en 4 etapas, la primera fue la implementación de un rectificador de onda completa, la segunda la programación en C de el detector de cruce por cero, la tercera realizando la programación e implementación del PWM sincronizado y por último implementando el circuito de potencia.
Este circuito se implementó por etapas, las cuales se describen a continuación.
PWM SINCRONIZADO CON LA RED: RECTIFICADOR DE ONDA COMPLETA.
El puente rectificador de onda completa es usado para convertir una corriente alterna en corriente continua, esta implementación se realizó con un puente rectificador de diodos que recibe un voltaje alterno de 6 V.
En la siguiente figura se evidencia el circuito utilizado en la primera etapa.
PWM SINCRONIZADO CON LA RED: ETAPA DE CRUCE POR CERO.
Esta etapa se realizó usando el integrado PIC 16F1937 el cual acepta una señal de tensión AC proveniente del rectificador de onda completa. El detector de cruce por cero se programó en C, para generar un pulso cada vez que la señal senoidal pasa por cero, proporcionando un pulso que genera un estado alto (1) cuando esto ocurre y cuando se repita cambie a estado bajo (0), obteniendo como resultado la siguiente señal:
PWM SINCRONIZADO CON LA RED: SINCRONIZACIÓN.
El primer paso de esta etapa fue realizar un programa que genero la señal PWM, luego de esto se pasó a realizar la
variación del ancho de pulso y por último sincronizar la señal resultante a la red mediante programación en C.
PWM SINCRONIZADO CON LA RED: ETAPA DE POTENCIA.
Se utilizaron los siguientes elementos:
1 resistencia de 1 K.
2 resistencias de 180 OMS.
1 MOC 3021.
1 Q4015 (triac).
1 bombilla a 110 V.
El optoacoplador (MOC 3021) se usa para convertir las señales eléctricas en luminosas y el Triac para controlar la fase de la corriente alterna, esta etapa se realiza para separar el circuito PWM del circuito de potencia y así evitar que las señales de potencia no pasen al circuito del PWM.
Resultados
En la práctica se evidencia un buen comportamiento en el Dimmer PWM sincronizado con la red. Anteriormente, el circuito se evidenciaba el bombillo como luz intermitente, luego de verificar un cable suelto en el circuito se logró solucionar el inconveniente.
Conclusiones
Con este trabajo se logra identificar la importancia del PWM en la variación de diferentes señales analógicas disminuyendo la degradación de las señales a controlar.
Este circuito es muy aplicable a nivel industrial.
PWM SINCRONIZADO CON LA RED: PROGRAMA PARA EL MICROCONTROLADOR PIC16F1937.
// PIC16F1937 Configuration Bit Settings
// ‘C’ source line config statements
// CONFIG1
#pragma config FOSC = INTOSC // Oscillator Selection (INTOSC oscillator: I/O function on CLKIN pin)
#pragma config WDTE = OFF // Watchdog Timer Enable (WDT disabled)
#pragma config PWRTE = ON // Power-up Timer Enable (PWRT enabled)
#pragma config MCLRE = OFF // MCLR Pin Function Select (MCLR/VPP pin function is digital input)
#pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config CPD = OFF // Data Memory Code Protection (Data memory code protection is disabled)
#pragma config BOREN = OFF // Brown-out Reset Enable (Brown-out Reset disabled)
#pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
#pragma config IESO = ON // Internal/External Switchover (Internal/External
Switchover mode is enabled)
#pragma config FCMEN = ON // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled)
// CONFIG2
#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)
#pragma config VCAPEN = OFF // Voltage Regulator Capacitor Enable (All VCAP pin functionality is disabled)
#pragma config PLLEN = ON // PLL Enable (4x PLL enabled)
#pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset)
#pragma config BORV = LO // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config LVP = OFF // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming)
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
#define _XTAL_FREQ 400000
#include <xc.h>
//Invierte la onda del ancho de pulso void convad (void)
{
GO=1; while(GO==1)
{}
CCPR4L = ADRESH;
__delay_ms(500);
}
char MIRAR = 0X10; // 00010000 PARA ELCRUCE POR CERO.
void main()
{
//Modulación de ancho de pulso
OSCCON= 0X6A; // RELOJ DE 4 Mhz.
TRISD=0X02;
ANSELD=0;
//CCP4CON=0B00001100;
//CCPR4L= 0;
//TRISD=0;
TRISB=0;
TRISC=0;
TRISE=0B00000001;
ANSELE=0B00000001;
ADCON0=21;
ADCON1=16;
//Detector cruce, onda rectificada y voltaje de referencia
ANSELA = 9; //9
ANSELB = 0;
ANSELD = 0;
TRISA = 9; //9
OPTION_REG = 0;
// LÓGICA DEL COMPARADOR:
CM1CON0 = 0XA0; //CM1CON0
CM1CON1 = 0; //CM1CON1
CMOUT = 1; //CMOUT = 1;
PR4=0X80; // PARA EL PERÍODO.(8,33 mseg. aprox).
while(1)
{
// CUANDO SE DA EL CRUCE POR CERO, SE HACE TMR4 = 0X00.
while(MIRAR == 0X10)
{
MIRAR = MIRAR & PORTA; if(MIRAR == 0X00) // SI LA OUT DEL COMPARADOR = 0:
{
MIRAR = 0X10;
}
else
{
MIRAR = 0X00;
}
}
MIRAR = 0X10; while(MIRAR == 0X10)
{
MIRAR = MIRAR & PORTA; if(MIRAR == 0x10)
{
MIRAR = 0X10;
}
else
{
MIRAR = 0X00;
}
}
MIRAR = 0X10;
TMR4 = 0X00;
CCP4CON = 0X3C;
convad(); // FUNCION PARA VARIAR EL ANCHO DE PULSO CCPTMRS0 = 0X40; // QUEDAN SETEADOS. // BORRAR LA BANDERA TMR4IF DEL REGISTRO PIR3
PIR3 = 0X00; // BIT 1 = 0.
// CONFIGURAR LOS BITS T4CKPS DEL REGISTRO T4CON CON EL // VALOR DEL PRESCALER. EN ESTE CASO SE CARGAN CON 00 QUE // EQUIVALE A UN PRESCALER IGUAL A 64(1:64).
// HABILITAR EL TIMER SETIANDO EL BIT TMR4ON DE ESTE REGISTRO // T4CON
T4CON = 0X07; // PRESC. = 1:64 Y TIMER4 = ON.
// HABILITAR EL PIN DE SALIDA DEL PWM
TRISD = 0X00;
}
}
RESULTADOS OBTENIDOS.
CIRCUITO IMPLEMENTADO EN PROTEUS
VIDEO DEMOSTRATIVO
CONTENIDOS RELEVANTES