Autor Tema: Como funciona un dimmer?  (Leído 41523 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado samshiel_pic

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 777
    • Electrónica·Ingenia
Re: Como funciona un dimmer?
« Respuesta #15 en: 25 de Octubre de 2008, 10:38:43 »
Hola chicos que tal?? estoy intentado hacer lo del dimmer para despues meterlo en otro proyecto. Lo que estoy haciendo es lo siguiente:
Código: C
  1. #include <18f4550.h>
  2. #FUSES   HS,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOPBADEN,NOLVP,NOCPD,NODEBUG,NOWRT,NOVREGEN
  3. #FUSES   CPUDIV1,NOIESO,NOLVP,NODEBUG,PLL1,NOMCLR
  4. #USE     delay(clock=20000000)
  5. #USE     rs232(baud=19200, xmit=PIN_C6, rcv=PIN_C7)
  6. #USE     fast_io(B)
  7. #BYTE    port_b               = 6
  8.  
  9. INT x=0,y=0,VECES=0,CRUCE=70;
  10.  
  11. #INT_TIMER0
  12. VOID TIMER0()
  13.    {
  14.    output_bit(PIN_B1,1);
  15.   // delay_us(1);
  16.    #asm
  17.    nop
  18.    nop
  19.    nop
  20.    nop
  21.    NOP
  22.    NOP
  23.    NOP
  24.    NOP
  25.    #endasm
  26.    //printf("estoy dentro");
  27.    output_bit(PIN_B1,0);
  28.    }
  29.  
  30.  
  31. #INT_EXT
  32. VOID Cruce_Por_0()
  33.    {
  34.    VECES++;
  35.    IF(y<1){
  36.       set_timer0(CRUCE);
  37.       ext_int_edge(0,H_TO_L);
  38.       y=2;
  39.       }
  40.      
  41.    ELSE{
  42.       set_timer0(CRUCE);
  43.       ext_int_edge(0,l_TO_H);
  44.       y=0;
  45.       }
  46.        
  47.    IF (VECES>50){
  48.       CRUCE++;
  49.       VECES=0;}
  50.      
  51.    IF (CRUCE>150){
  52.       CRUCE=70;
  53.       }
  54.    }
  55.  
  56.  
  57. VOID main() {
  58.    set_tris_B(0b00000001);
  59.    enable_interrupts(GLOBAL);
  60.    enable_interrupts(INT_TIMER0);
  61.    enable_interrupts(INT_EXT);
  62.    setup_timer_0(RTCC_INTERNAL | RTCC_8_BIT | RTCC_DIV_256);
  63.    ext_int_edge(0,L_TO_H);
  64.    set_timer0(CRUCE);
  65.    WHILE(1){
  66.   }
  67. }

con esto estoy haciendo un bucle en el cual enpieza a encender la bombilla  hasta su valor maximo. Y a groso modo lo hace pero le dan picos en los que ilumina al maximo en rachas. Haber si me explico mejor, cuando esta iluminando al 5% o 10% empieza a dar picos de intensidad pero no siempre al momento va mejor a los dos minutos va horrible despues bien, vamos que no se que puede estar fallando.
Aqui os dejo como tengo conectado el pic



Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Como funciona un dimmer?
« Respuesta #16 en: 25 de Octubre de 2008, 13:28:30 »
Sospecho que te puede hacer algo raro si estando dentro de la rutina de detección de flanco te desborda el Timer.
Se me ocurre que deberías desactivar la interrupción del timer al entrar en la interrupción externa, y activarlo al salir.
Además, podrías optimizar alguna cosa en la interrupción externa, tal que así:
Código: C
  1. #INT_EXT
  2. VOID Cruce_Por_0()
  3.    {
  4.    disable_interrupts(INT_TIMER0);
  5.    VECES++;
  6.    set_timer0(CRUCE);
  7.    bit_set (RegistroIntExt,!bit_test(RegistroIntExt,BitFlanco));
  8.    IF (VECES>50){
  9.       CRUCE++;
  10.       VECES=0;}
  11.      
  12.    IF (CRUCE>150){
  13.       CRUCE=70;
  14.       }
  15.    enable_interrupts(INT_TIMER0);
  16. }

Donde RegistroIntExt es la dirección del registro donde se almacena la configuración de la Interrupción Externa, y BitFlanco es el nº del bit que gestiona el flanco ascendente o descendente.

Desconectado samshiel_pic

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 777
    • Electrónica·Ingenia
Re: Como funciona un dimmer?
« Respuesta #17 en: 25 de Octubre de 2008, 14:23:03 »
Gracias Manolo por tu respuesta. Ya lo habia solucionado haciendo lo que tu me has dicho de cambiar la rutina de la interrupcion del timer a la interrupcion externa. Y ya mas o menos me daba menos destellos y cambiando la conexion de la lampara y el triac ya no me destella nada de nada.
GRACIASSSSSSSS
 

Desconectado samshiel_pic

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 777
    • Electrónica·Ingenia
Re: Como funciona un dimmer?
« Respuesta #18 en: 02 de Noviembre de 2008, 08:27:08 »
Hola chicos os coloco aqui el programa en el que corre el dimmer en mi PIC18F4550

Código: C
  1. #include <18f4550.h>
  2. #FUSES   HS,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOPBADEN,NOLVP,NOCPD,NODEBUG,NOWRT,NOVREGEN
  3. #FUSES   CPUDIV1,NOIESO,NOLVP,NODEBUG,PLL1,NOMCLR
  4. #USE     delay(clock=20000000)
  5. #USE     rs232(baud=19200, xmit=PIN_C6, rcv=PIN_C7)
  6. #USE     fast_io(B)
  7. #BYTE    port_b= 6
  8.  
  9. INT x=0,y=0,VECES=0,CRUCE=65;
  10.  
  11. #INT_TIMER0
  12. VOID TIMER0()
  13.    {
  14.    output_HIGH(PIN_B1);
  15.    IF (VECES>10){
  16.       CRUCE++;
  17.       VECES=0;}
  18.  
  19.    IF (CRUCE>254){
  20.       CRUCE=65;
  21.       }
  22.    output_LOW(PIN_B1);
  23.    }
  24.  
  25.  
  26. #INT_EXT
  27. VOID Cruce_Por_0()
  28.    {
  29.     VECES++;
  30.    IF(y==1){
  31.       ext_int_edge(H_TO_L);
  32.       y=0;
  33.       set_timer0(cruce);}
  34.  
  35.    ELSE{
  36.       ext_int_edge(L_TO_H);
  37.       y=1;
  38.       set_timer0(CRUCE);}
  39.    }
  40.  
  41.  
  42. VOID main() {
  43.    set_tris_B(0b00000001);
  44.    enable_interrupts(GLOBAL);
  45.    enable_interrupts(INT_TIMER0);
  46.    enable_interrupts(INT_EXT);
  47.    setup_timer_0(RTCC_INTERNAL | RTCC_8_BIT | RTCC_DIV_8);
  48.    ext_int_edge(L_TO_H);
  49.    set_timer0(CRUCE);
  50.    WHILE(1){
  51.   }
  52. }

Ahora me gustaria cambiar el TIMER0 por el TIMER1 pero no se porque no me cuenta. Haber si me pudierais orientar un poco. GRACIAS.

Desconectado Andreufr

  • PIC10
  • *
  • Mensajes: 19
    • Automatic water with Remote monitoring & Control
Re: Como funciona un dimmer?
« Respuesta #19 en: 05 de Noviembre de 2008, 18:13:42 »
Hola amigos,

Yo también intentando montar un dimmer, pero el mio me gustaría que tuviera 4 canales.

He estado mirando el condigo de samshiel_pic  y me parece genial (voy a usar el mismo pic), tenéis alguna idea brillante de como controlar cuatro tiempos de delay distintos (uno para cada bombilla)? cual sería una forma óptima para hacerlo y no saturar demasiado la interrupción?

Yo he pensado hacerlo de forma sucesiva, así es cargar primero al timer el tiempo mas pequeño luego la diferencia entre este y el siguiente y así sucesivamente hasta el mas grande. Pero no se si es la mejor idea...

Saludos,

 

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Como funciona un dimmer?
« Respuesta #20 en: 05 de Noviembre de 2008, 19:43:58 »
Esa idea que indicas es buena, aunque algo compleja porque tendrás que mantenerlos siempre ordenado y descontar los tiempos de carga del valor del timer y de entrada en la interrupción.
Si son sólo 4 yo haría que la interrupción fuera incrementando un contador, como el código de Samshield, y pondría cuatro "IF", uno por cada salida.
La frecuencia del PIC es tan alta comparada con la de red que ni se notará el posible desfase que se produzca con los IF.

Desconectado Andreufr

  • PIC10
  • *
  • Mensajes: 19
    • Automatic water with Remote monitoring & Control
Re: Como funciona un dimmer?
« Respuesta #21 en: 06 de Noviembre de 2008, 09:16:08 »
Muchas gracias Noctuno, voy a intentar lo que dices y ya diré que tal los resultados!

Desconectado sansanoloko

  • PIC10
  • *
  • Mensajes: 48
Re: Como funciona un dimmer?
« Respuesta #22 en: 06 de Noviembre de 2008, 11:20:37 »
Hola amigos del foro!!

Les cuento que el año pasado me propuse un proyecto similar, para presentarlo en una exposición de mi universidad, y resultó lo que considero mi obra de arte más preciada (por ahora....).

Lo que me propuse fue un dimmer digital de 8 canales de salida, controlado por un computador. El proyecto resultó con las siguientes características:
- 32 niveles de intensidad por canal.
- comunicación con el computador via RS232 a 9600 bps
- software de control amigable al usuario (hecho en Visual Basic)

En la electrónica de este proyecto se cuenta con lo siguiente:
- PIC16F648A corriendo a 4 MHz (oscilador RC interno)
- Programación del pic hecha en assembler
- Detección de cruce por cero en la fuente de alimentación.
- Salida por optoacoplador y triac

Para el programa que corre en el pic la clave son las interrupciones:
TIMER0: genera una interrupción cada 313 microsegundos (10ms / 32) y determina el angulo de disparo para el triac.
TIMER1: este timer primero se sincroniza con los cruces por cero y despues interrumpe cada 10 milisegundos, como precaución.
RB0: interrumpe en cada cruce por cero.
USART: genera una interrupción al recibir un byte desde el computador, y lo almacena en un buffer, hasta recibir la trama completa.

Al momento de probar me dio muy buenos resultados, ya que desde el computador podía generar secuencias de encendido muy interesantes. El gran problema que tuve fue con la resolución, que resultó se muy baja, ademas de asumir linealidad del control me dio como resultado cambios muy bruscos en intensidades bajas, asi que como verán es una obra de arte inconclusa, asi que espero me puedan colaborar con pulir esos detalles, al igual que yo pueda ayudarles en base a mi modesta experiencia.

Aqui presente y dipuesto a colaborar.
Saludos a quienes nos leen.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Como funciona un dimmer?
« Respuesta #23 en: 06 de Noviembre de 2008, 13:48:38 »
¿32 niveles es poca resolución?
Yo creo que el problema debería ser de otra índole; un salto de 1/32 del nivel de luminosidad en una bombilla es casi imperceptible.

Desconectado martincnc

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 352
Re: Como funciona un dimmer?
« Respuesta #24 en: 07 de Noviembre de 2008, 02:31:42 »
Hola sansanoloco.

TIMER0: genera una interrupción cada 313 microsegundos (10ms / 32) y determina el angulo de disparo para el triac.

..ademas de asumir linealidad del control me dio como resultado cambios muy bruscos en intensidades bajas..

Por lo que tengo entendido, al realizar una interrupcion cada una cantidad de tiempo uniforme, sobre una señal senoidal, el angulo de disparo no se mantiene constante y provoca estos saltos bruscos de tension en intensidades bajas. La verdad es que no estoy del todo seguro, pero lo comento para ver si alguien me puede confirmar esto.

Saludos
« Última modificación: 07 de Noviembre de 2008, 03:14:27 por martincnc »

Desconectado sansanoloko

  • PIC10
  • *
  • Mensajes: 48
Re: Como funciona un dimmer?
« Respuesta #25 en: 07 de Noviembre de 2008, 10:58:12 »
Hola amigos foreros, gracias por responder tan pronto!

martincnc, si no te interpreto mal, debiera verse un parpadeo en las luces al momento de conectarlas. Eso realmente ocurre, de hecho a mi me pasó en una etapa del proyecto, pero lo solucioné sincronizando las interrupciones del TIMER0 con los cruces por cero. De esta forma se mantiene constante el ángulo de disparo generado en el pic.


¿32 niveles es poca resolución?
Yo creo que el problema debería ser de otra índole; un salto de 1/32 del nivel de luminosidad en una bombilla es casi imperceptible.

El problema es que asumí una variación lineal de la luminosidad en función del ángulo de disparo, por eso el semiperíodo (10 ms) lo divido en 32 partes iguales para generar los ángulos de disparo, pero no me resulta en 32 niveles de luminosidad....

Asumo entonces que la variación depende de una forma no lineal, un logaritmo podría ser?? en esta parte necesito consejos.

Saludos a quienes nos leen (y responden).

Desconectado undertech

  • PIC10
  • *
  • Mensajes: 8
Re: Como funciona un dimmer?
« Respuesta #26 en: 11 de Noviembre de 2008, 21:50:51 »
Hola sansanoloko, yo tengo un dimer de 4 "canales" para belenes. Es analógicoy siempre he querido convertirlo en digital.
El funcionamiento del analogico es como sigue:

Se dectecta el paso por 0 como es lógico para sincronizar los pulsos y luego y con 4 redes RC, se controlan unos 555 en monostable que van alargando y disminuyendo el ancho del pulso para asi aumentar o disminuir la intensidad de las bombillas. Por lo tanto, el ancho del pulso y por ende la iluminacion de las bombillas sigue una curva de la carga y descarga de un condensador.

El circuito ofrece ajustes pero hasta cierto límite, por eso mi idea de pasarlo a digital y poder controlar mas parametros. Por ejemplo el tiempo global es controlado por otro oscilador que hace que un 4011 vaya dando salidas a los "canales" y va independiente de los RC que controlan las bombillas.

Te sirve de algo esto??

No he probado que ocurriria si la linea de carga y descarga fuera una linea recta, no se como se comportaria, pero en principio 32 niveles me parecen pocos, los cambios deben ser lo mas lineales posibles para un buen efecto.

La idea es buena y podriamos profundizar en ella.


Saludos



Desconectado sansanoloko

  • PIC10
  • *
  • Mensajes: 48
Re: Como funciona un dimmer?
« Respuesta #27 en: 16 de Noviembre de 2008, 01:34:57 »
Hola undertech!

Si logras hacer los cambios de intensidad de forma "lineal" con tu método, entonces la curva que estoy buscando la describe una función exponencial (no se me había ocurrido  :shock:). De no ser así, estoy pensando dos vías de trabajo:

Primer camino: obtener de forma empírica los valores de ángulos de disparo útiles, contrastando el nivel de luminosidad de una ampolleta con la forma de onda de la tensión en ella con un osciloscopio.

Segundo camino: de forma matemática llegar a una función y = f(x), o mejor dicho "luminosidad = f(ángulo de disparo)". Para ello estoy pensando empezar desde un supuesto: "la luminosidad de una ampolleta (incandescente) varía de forma lineal respecto al valor RMS de la tensión presente en ella".

El primer camino me gusta, ya que se pueden obtener tablas de datos, y a partir de ellos buscar una curva que mejor describa esos datos, por aproximación lineal o alguna otra que mejor se ajuste. El problema que tengo es que no dispongo de osciloscopio ni de tiempo y espacio para realizar esas mediciones  :?

Entonces, por el momento voy a seguir el segundo camino. Asi que por favor, si alguien lee esto y opina que estoy bien encaminado o estoy disvariando, por favor no dude en comentarlo.

Saludos a quienes nos leen.

Desconectado tuxandres

  • PIC10
  • *
  • Mensajes: 3
Re: Como funciona un dimmer?
« Respuesta #28 en: 17 de Noviembre de 2008, 00:49:23 »
que mas amigos del foro. Me parece genia el ciruito, la duda que tengo es como conectar la fase al PIC por lo que es de alta tensio para el PIC ademas, si esta es para dectectar el cruce por cero o para que es? y en que es el programa CCS o C18.

Desconectado aviarioejsv

  • PIC10
  • *
  • Mensajes: 1
Re: Como funciona un dimmer?
« Respuesta #29 en: 12 de Febrero de 2011, 16:45:19 »
Hola:
soy un criador de aves y ocupo un dimmer que me haga lo siguiente, que le ponga una hora de encendido a una lampara de filamento (digamos 6 de la mañana)pero que encienda gradualmente por un lapso de 30 minutos (para simular el amanecer), logrado esto permanesca encendida de 12 a 13 horas a su maxima potencia y a las 6:30 o 7:30 de la tarde empiece a apagarse gradualmente por un lapso de 30 minutos tambien, para simular el anochecer, y que esto lo haga todo los dias automaticamente, todos los dias sin que tenga que mover nada, lo unico no se que tenga opcion de escoger la hora de encendido y apagado de las lamparas. ojala me pudieran ayudar con el diagrama y programacion del pic, ya que de electronica y programacion se poco.