Programación en el PIC 16f876a
- El microcontrolador PIC se encargara de recibir las señales del circuito de cruce por cero, para esto se hara uso del módulo de “interrupción por el pin RB0” ya que cada vez que reciba la señal del fototransistor, automáticamente saltara de todo lo que esté haciendo el PIC en ese momento para atender a esa señal y sincronizar el disparo hacia el triac.
- Para controlar la velocidad, se hará uso de la “lectura analógica por el pin A0” de un potenciómetro. Ya que la lectura analógica toma algún tiempo para la conversión a digital, no sería viable usarlo en el bucle del programa principal, pues esto retrasaría las demás funciones que realizara el pic . Se optó por hacer una lectura del potenciómetro usando un temporizado de cada 200 ms, configurando el “Timer 1” del Pic a ese periodo.
- El pin que dispara al moc 3020 sera el “Pin Rb7” cuya duración del ancho de pulso será de 200 uS.
- Existen 2 leds indicadores: señal del cruce por 0 “Pin Rb1”, Señal de de cruce por 0 dividida entre 60 (0.5 seg) “Pin RB2”
e
Entradas al pic :
#define potenciometro pin_a0 //entrada analogica para control
#define cruze_x_cero pin_b0 //entrada digital para el sincronismo del disparo
Salidas del Pic:
#define disparo pin_b7 //disparo hacia la etapa de potencia
#define frec_1 pin_b1 //indicador de cruce por cero 60 hz
#define frec_2 pin_b2 //indicador cruce por cero 1 hz
Variables del Pic:
long delay=7000;
short bandera1=0;
int contador=0;
long adc=0;
Variables del Pic:
long delay=7000;
short bandera1=0;
int contador=0;
long adc=0;
Programa en Pic C (CCS C compiler):
#include <16f876a.h> #device adc = 10 #fuses hs,nowdt,put,nobrownout,nolvp, #use delay(clock=20M) #use standard_io(a) #use standard_io(b) #use standard_io(c) #priority INT_RB //prioridad interrupcion por rb0 #define potenciometro pin_a0 #define cruze_x_cero pin_b0 #define frec_1 pin_b1 #define frec_2 pin_b2 #define disparo pin_b7 long delay=7000; short bandera1=0; int contador=0; long adc=0; #INT_timer1 void timer1() { adc=read_adc(); //lectura de potenciometro externo para temporizar disparo delay_us(20); //tiempo de conversion adc delay=adc*7.7; //escalamiento hasta maximo periodo adc 0 a 1024 // //120Hz -> T:8mS = 8333uS max set_timer1 (65526); } #int_ext void ext_isr() { bandera1=1; //si entro pulso, poner en 1 bandera de sincronizacion output_toggle(frec_1); //indicador de interrupcion //si todo esta correcto frec de interrupcion = 60Hz //=>120hz/60=1hz ==>T=0.5seg contador++; if(contador==60) { output_toggle(frec_2); contador=0; } } void main() { delay_ms(100); output_high(frec_1); output_high(frec_2); delay_ms(500); output_low(frec_1); output_low(frec_2); delay_ms(500); enable_interrupts(int_ext); ext_int_edge(L_TO_H); setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);//Setup timer: Reloj interno, preescaler= 8 enable_interrupts(INT_TIMER1);//Habilito interrupción particular del TIMER1 set_timer1(65526);//Carga del TMR1 para 20 mhz q 200 ms setup_adc_ports(an0); setup_adc(adc_clock_internal); set_adc_channel(0); enable_interrupts(GLOBAL);//Habilito interrupciones globales while (true) { if(bandera1==1) //espera bandera de sincronizacion { delay_us(delay+440); output_high(disparo); delay_us(200); output_low(disparo); bandera1=0; } } }
Simulación
Pruebas en físico:
Link de descarga: https://mega.nz/#F!CxVHlLbZ!7-ff8bQFLlMAXJCPWJ0adA
clave de cifrado: !7-ff8bQFLlMAXJCPWJ0adA
Mejoras:
-Es Ovbio que este proyecto realiza el mismo trabajo que un simple Dimer analogico. Pero la gran potencialidad que este proyecto presenta no esta en solo controlar velocidad por medio de un potenciometro, si no que al ser diseñado para ser controlado por medio de un microcontrolador, este es mucho mas inteligente y se pueden programar mas cosas. Puede añadirse sensores de velocidad, temperatura, etc. Para hacer un control con un algoritmo PID de velocidad, temperatura pero en AC. Este es solo la parte básica,lo demás dependerá de la imaginacion e ingenio para aplicarlo en algo util.
<< Primera parte del proyecto
Link de descarga: https://mega.nz/#F!CxVHlLbZ!7-ff8bQFLlMAXJCPWJ0adA
clave de cifrado: !7-ff8bQFLlMAXJCPWJ0adA
Mejoras:
-Es Ovbio que este proyecto realiza el mismo trabajo que un simple Dimer analogico. Pero la gran potencialidad que este proyecto presenta no esta en solo controlar velocidad por medio de un potenciometro, si no que al ser diseñado para ser controlado por medio de un microcontrolador, este es mucho mas inteligente y se pueden programar mas cosas. Puede añadirse sensores de velocidad, temperatura, etc. Para hacer un control con un algoritmo PID de velocidad, temperatura pero en AC. Este es solo la parte básica,lo demás dependerá de la imaginacion e ingenio para aplicarlo en algo util.
<< Primera parte del proyecto