Dimmer para una lampara de 110 V ac utilizando pwm de pic 16f628

Hola fogonazo gracias por responder, bueno necesito 60Hz porque ese es el valor de la red eléctrica de la frecuencia en Lima.
adjunto el diagrama que vengo usando que encontré en internet, el moc3031 es un optotriac que detecta el cruce por cero.. el dimmer si regula, pero lo que no me cumple es que según lo observado con el osciloscopio, el triac se está disparando cuando quiere, es por eso que obtengo esos parpadeos y no una señal constante como yo quisiera, si me puedes ayudar a corregir este problema te agradeceria bastante..
 

Adjuntos

  • moc3031.jpg
    moc3031.jpg
    73.7 KB · Visitas: 442
Hola fogonazo gracias por responder, bueno necesito 60Hz porque ese es el valor de la red eléctrica de la frecuencia en Lima.
adjunto el diagrama que vengo usando que encontré en internet, el moc3031 es un optotriac que detecta el cruce por cero....

Creo que no estas comprendiendo como funciona un dimmer.

NO necesitas generar ninguna frecuencia de 60Hz
NO puedes emplear un Opto-acoplador con detección de cruce por cero.
 
Que tal nuevamente...

Te envio un archivo PDF de Microchip que describe el proyecto que tu quieres realizar, ten cuidado cuando lo implementes porque la fuente no usa transformador.

En el documento se explica todo y trae el codigo.

Saludos

con respecto a este proyecto una duda, la linea de AC que entra en el diagrama a bloques es rectificada? o que se hace con las fases? saludos y gracias!
 
que tal locopistol!!!
yo estoy haciendo un proyecto por no decir igual, yo estoy manejando un microcontrolador freescale ap16 y con el genero un pwm con el que por medio de un opto-triak vario la intensidad de luz del bombillo.
me sucede exactamente lo mismo parpadea, aunque si me varia, lo que sucede en mi caso es que la señal del PWM acondicionada a 120 hz por que la señal AC viene con 60 hz no esta en fase con la señal AC
he mirado y preguntado y toca hacer un circuito por deteccion de cruce por cero, para poder colocar ambas señales en fase y asi poder variar el dimmer, ya construi el detector de cruce por cero pero mi principal problema es que la señal es tan rapida que no se como poder medir el flanco de bajada con un pin del micro.
hay te dejo eso y si logra tener la respuesta o alguien me ayuda le agradesco me lo comunique.
 
Desde el momento en que se detecta el paso por "Cero" de la tensión de red generas un retardo variable de 0 a 10mS (50Hz) o de 0 a 8mS (60Hz), al finalizar ese retardo envías la señal de disparo al opto-TRIAC.
 
Desde el momento en que se detecta el paso por "Cero" de la tensión de red generas un retardo variable de 0 a 10mS (50Hz) o de 0 a 8mS (60Hz), al finalizar ese retardo envías la señal de disparo al opto-TRIAC.

si Fogonazo estoy de acuerdo....el problema no es generar el retardo de 0 a 8ms en mi caso, el problema que tengo es que no se como capturar el momento del cruce por cero, estuve utilizando un opto-transitor, incluso arme un circuito con un transistor que simulando en proteus isis y funciona a la perfeccion.

si ya pudo solucionar el problema me corrige, pero resulta que la señal es muy rapida para detectar el flanco de bajada con un pin del micro, asi que pense utilizar el modulo timer del micro (TIM), como modo de captura, no se si estoy haciendolo bien, o como lo hizo para poder arreglar el mio
 
Hola nicoman, primero se debe detectar el cruce por cero mediante un pequeño circuito como el que adjunto..y conectar los pulsos hacia la RB0 del pic, interrupcion configurada para cada que detecte cada flanco de bajada (o si quieren la configurar para flanco de subida), y una vez que la interrupcion es detectada, (si se trabaja con una frecuencia de red de 120Hz) el periodo es 8.3ms, esto quiere decir que se generara una interrupcion cada 4.15ms lo cual es una eternidad para el pic que trabaja con un cristal de 4Mhz..
 

Adjuntos

  • cruce_por_cero.JPG
    cruce_por_cero.JPG
    35.4 KB · Visitas: 544
Hola nicoman, primero se debe detectar el cruce por cero mediante un pequeño circuito como el que adjunto..y conectar los pulsos hacia la RB0 del pic, interrupcion configurada para cada que detecte cada flanco de bajada (o si quieren la configurar para flanco de subida), y una vez que la interrupcion es detectada, (si se trabaja con una frecuencia de red de 120Hz) el periodo es 8.3ms, esto quiere decir que se generara una interrupcion cada 4.15ms lo cual es una eternidad para el pic que trabaja con un cristal de 4Mhz..

que tal locopistol, muchas gracias por la respuesta, justamente asi lo solucione, tenia un pequeño error en la programacion no mas.
igual como lo dice es.
 
Hola que tal, es mi primer post, tengo que hacer un dimmer con un 16f877a con el modulo ccp del micro, generando una pwm que viene pre-fabricada en el micro, el problema esq al llevarlo a cabo el foco parpadea, es claro que la señal pwm no esta sincronizada con el detector de cruce por cero, es decir, genera la pwm pero no en el momento que se da el cruce por cero, adjunto un programa en c, para que me digan que esta mal, y si se puede corregir y como, muchas gracias!

por cierto, yo hice mi detector de cruce por cero con un optoacoplador 4n27 y quedo a la perfeccion
Código:
#include <16F877A.h>
#device adc=8
#device *=16
#fuses RC,NOWDT,NOLVP,NOPROTECT,PUT
#use delay(clock=1960000)
#use fast_io(A)
#use fast_io(C)
#use fast_io(D)
#byte puertoa=0x05
#byte puertoc=0x07
#byte puertob=0x06
int detector;
//Funciones
   inicializar(){
      puertoa=0;
      puertob=0;
      set_tris_b(0b111111);
      set_tris_a(0b111111);//entrada puerto a
      setup_port_a(all_analog);//todas entradas analogicas y vdd=vref
      setup_adc(ADC_CLOCK_INTERNAL);
      set_adc_channel(0);//indica canal de la entrada analogica
      set_tris_c(0b00000000);
      setup_ccp1(ccp_PWM);//entregar señal PWM
      setup_timer_2(T2_DIV_BY_16,255,1);//tmr prescaler, #ciclos a contar, postscaler
   }

//principal
   main(){
      inicializar();
      while(TRUE){
      detector=puertob;
      if (detector==1){
         set_pwm1_duty(read_adc());
      }
      }   
   }
 
Última edición por un moderador:
afromanrocker: que pena no poderlo ayudar con el programa, pues yo programo es motorola freescale...

si de algo sirve, es decirle como se hace, igual eso en todos los micros es igual, lo unico es que no conosco el lenguaje del PIC; todos los micros tienen un pin de interrupcion IRQ, que en mi caso podia configurar de acuerdo a solo el flanco de bajada o al flanco de bajada y 0v.

lo primero que hay que hacer es configurar ese pin, de hecho yo lo utilice con 0v, luego dentro del programa se configura al inicio el periodo del PWM (para 8ms), y dentro de la interrupcion del IRQ, hay que detener el PWM cambiar el ciclo util y ponerlo de nuevo a funcionar.

asi cada vez que por el pin haya un nivel bajo del cruce por cero, se actualiza el valor de ciclo util por medio de la interrupcion y el programa seguira funcionando normalmente..
 
Algunos no lee el todo las respuestas, se ha dicho que usar PWM para dimmer con cruce por cero no funciona bien.
Por que los 60Hz o 50Hz de la red electrica no son exactos varian en pequeña proporción
 
Última edición por un moderador:
Algunos no lee el todo las respuestas, se ha dicho que usar PWM para dimmer con cruce por cero no funciona bien.
Por que los 60Hz o 50Hz de la red electrica no son exactos varian en pequeña proporción

siento refutar lo que dice nuestro compañero...
no importa el hecho que de no sea el mismo todas las veces, por eso se utiliza el CRUCE POR CERO y la interrupcion con el IRQ; la razon de colocarle al PWM un periodo de 8.3ms es para poder controlar el ciclo util en porcentajes, me explico, de entre 1% al 99% de los 8.3ms, asi no pasarse del medio ciclo, y la razon de utilizar el CRUCE POR CERO con el IRQ es poder detener el modulo del PWM en el momento en que ocurra el cruce por cero y ponerlo a funcionar de nuevo.

lo he hecho muchas veces y siempre me ha funcionado perfecto
 
mi intencion no es abrir una discusion, tan solo quiero aclarar este tema...

de nuevo lo que dice no esta correcto, la mayoria de personas que haya hecho un PWM sabe que hay varias formas de hacerlo con compuertas o amplificadores, con una 555 o un circuito de amplificadores que usan un cruce por cero.
quien haya hecho un dimmer utilizando un PWM que no sea el del micro entendera que no es posible hacerlo con una 555, justamente por la razon que nuestro compañero citaba al comienzo:

Por que los 60Hz o 50Hz de la red electrica no son exactos varian en pequeña proporción

por tal razon se utiliza el CRUCE POR CERO y los amplificadores op. para hacer un PWM, del cual no me puede decir que no es continuo, y este PWM es exactamente lo que se intenta reproducir en el microcontrolador, pues compara una señal de referencia con una señal diente sierra que sincroniza cada 8.3ms por medio de los amp. ope. con el cruce por cero.
 
SI lo he hecho con lo que mi maestra llama interrupcion externa, conectando ahi el detector de cruce por cero, el problema esq genera la pwm, pero no la sincroniza con la linea, otra cosa, no pudimos agregar el "retardo" de 8.3ms o la pwm de 8.3ms ya que segun la maestra, es necesario agregar un oscilador RC en vez del cristal, funciona la pwm y "controla" la linea, el problema esq nuestro foco parpadea, y no hace la funcion de dimmer, ya hice el circuito con el timer, y con los amplificadores operacionales y todo bien, pero este namas no quiere jalar :S, creo que el problema es q esta generando la pwm bien el primer cruce por cero, pero se desfasa despues del segundo, no c si la pwm que genera se reinicia al cruce pór cero, o simplemente genera la primera, y la segunda ya no la genera bien, si no que se sigue con el error de la primera :S
 
Que tal afromanrocker:

justamente el error es el que dice
creo que el problema es q esta generando la pwm bien el primer cruce por cero, pero se desfasa despues del segundo

al principio yo tuve el mismo problema y mis concejos son:


utilizar un cristal para el oscilador en vez de un circuito RC, como le dijeron, y colocarle un periodo de ± 8.3ms para el PWM

en mi caso en freescale yo utilizo para hallar el periodo del PWM una formula donde utilizo el bus interno del micro que es de 1Mhz, la formula es la siguiente:

resolucion=1/(bus interno/prescalador)

(periodo MICRO)=(Periodo deseado)/resolucion

entonces define un prescalador en el micro dentro del modulo del PWM y con el bus interno obtiene la resolucion que luego divide en el periodo deseado que en este caso es 8.3ms y eso le da un numero que es el que ingresa dentro de la configuracion del micro en el registro del periodo del modulo PWM, ese numero es el que hace posible que el periodo del PWM del micro sea de ± 8.3 ms

ahora para sincronizarlo, ese error yo lo solucione deteniendo el PWM en el momento en que entrara a la interrupcion externa, se actualizaba el ciclo util sin importar si habia cambiado o no y luego colocandolo a funcionar, algo que no demora ni 10 ciclos de maquina para el micro.

debe revisar en el datasheet del PIC un bit con el que se detiene el modulo PWM o lo reinicia, y otro bit con el que lo pone a funcionar

repito, no importa mucho si el PWM tiene un periodo mayor que 8.3ms, pues en el momento que se sincronice con el cruce por cero no afectará, eso si que no sea menor, el truco esta en la interrupcion, haga el programa principal normalmente, con una rutina sencilla cualquiera como una rutina de encendido de leds, pero dentro de la interrupcion IRQ (interrupcion externa) haga lo que le digo, incluso a mi me gusta estar prendiendo un led al inicio de la interrupcion y apagandolo al final para verificar que si hay cruce por cero, en el caso que el led no se encienda significa que no esta funcionando bn

y un ultimo consejo mas, revisar en el osciloscopio que exista la señal de cruce por cero y que la señal del PWM tenga prioridad al nivel bajo o cero volteos, por que de otra forma le funcionara ON OFF
 
Gracias, este lunes lo pondre en practica y les platico, si, pusimos el cruce por cero y la pwm, y no la estaba condicionando para nada, de hecho una iba a una frecuencia y la otra a otra, asi esq ahi es donde supimos que no estaba haciendo el reinicio de la pwm, ya les platico si me quedo
 
Atrás
Arriba