Autor Tema: Duda Cruce por cero.  (Leído 8547 veces)

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

Desconectado kaki

  • PIC18
  • ****
  • Mensajes: 260
Re: Duda Cruce por cero.
« Respuesta #15 en: 19 de Mayo de 2011, 23:14:53 »
Muchas gracias ya entendi a la perfeccion gracias a rivale por las formulas y esplicaciones y Suky por el consejo de buscar en el foro.. buscando encontre una explicacion...

Cualquier cosa los vuelvo a moslestar saludos...

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Duda Cruce por cero.
« Respuesta #16 en: 19 de Mayo de 2011, 23:18:11 »
Por nada, que bueno que te sirvio.
y como dice suky trata de leer las hojas de especificaciones, ya si algo no entiendes se te ayuda en el foro ya con preguntas mas concretas o de aplicacion
"Nada es imposible, no si puedes imaginarlo"

Desconectado kaki

  • PIC18
  • ****
  • Mensajes: 260
Re: Duda Cruce por cero.
« Respuesta #17 en: 20 de Mayo de 2011, 14:29:41 »
Bueno en base a todo lo que aprendi quice hacer el dimmer.. pero no tuve exito. El problema es que no se seba nunca el Triac.

aca dejo el codigo a ver que ven anormal ustedes que yo no veo:

para variar la intencidad, vario una variable que se llama Intencidad. el ADC no lo uso por ahora solo para pueva, no lo miren...

Código: [Seleccionar]
#include <18f2550.h>
#device adc=8

//FUSES Y OCILADOR
#fuses HS,NOWDT,NOPROTECT,NOLVP,NODEBUG
#use delay(oscillator=20M)

//DEFINO PARA EL LCD
#define    LCD_DB4 PIN_B4
#define    LCD_DB5 PIN_B5
#define    LCD_DB6 PIN_B6
#define    LCD_DB7 PIN_B7
#define    LCD_RS PIN_B1
#define    LCD_E PIN_B2

#define  triac_on         output_high(pin_a1)
#define  triac_off        output_low(pin_a1)
#define  PIN1_ON       output_high(pin_c0)
#define  PIN1_OFF       output_low(pin_c0)
#define  PIN2_ON         output_high(pin_c1)
#define  PIN2_OFF       output_low(pin_c1)
  
//CONSTANTE
//const int TotalTiempo=255; //Tiempo total q demora cada medio ciclo

//VARIABLES
int PasosDimer;        // se incrementa en 1 cada X vueltas del timer, coincidendo con la captura de bits del mando
int Intencidad;   //Variable de
int j=0;          // Identifica Cruce por 0 si es alto o bajo

//INCLUDE LIBRERIAS
#include <LCD.lib>

//TIEMPO
#INT_TIMER0
void Desbordamiento()
{  
set_timer0(255);//51.2us
PasosDimer++;

if (PasosDimer == Intencidad ){ //Si Tiempo es igual a Pote disparo Trian
triac_on;
}    
triac_off;
}



//DETECTO PASO POR 0
#INT_EXT
void CrucePor0()
{
Intencidad = 100;//Regulo la intencidad manual mente por ahora variando esta variable y compilando (de 1 a 195)
PasosDimer=0;
   if (j==0){
j=1;
PIN1_ON;
PIN2_OFF;
        ext_int_edge(H_TO_L); // Cambio la detección del flanco, para que la proxima sea de bajada

}
   else {
     j=0;
PIN1_OFF;
PIN2_ON;        
ext_int_edge(L_TO_H); // La próxima interrupción será de subida  

}
}

//LECTURA ANALOGICA(NO LA USO POR AHORA)
#INT_AD
void leer()
{
 // Intencidad = read_adc();
}


//MAIN
void main(void){
//INICIALIZO LCD
lcd_init();

    //ADC
   setup_adc(ADC_CLOCK_INTERNAL);
setup_adc(AN0_ANALOG);
enable_interrupts(INT_AD);

//TIMER
    setup_timer_0(RTCC_INTERNAL | RTCC_DIV_256);
//disable_interrupts(INT_TIMER0);
    enable_interrupts(INT_TIMER0);
set_timer0(255);
   
    //INTERUPCION
    ext_int_edge(L_TO_H);
enable_interrupts(INT_EXT);


    //GLOBAL
enable_interrupts(GLOBAL);

//SETEO CANCAR DE ADC
set_adc_channel(0);

//TIEMPO PARA Q TOME CONFIGURACIONES ADC
  delay_ms(10);


   for(;;){
//Muestro la variable PASOSDIMER
lcd_gotoxy(1,1);  
printf(lcd_putc,"Timer:     ");
lcd_gotoxy(8,1);  
printf(lcd_putc,"%u",PasosDimer);

//Muestro la variable Intencidad
lcd_gotoxy(1,2);  
printf(lcd_putc,"Intencidad:         ");    
lcd_gotoxy(12,2);
printf(lcd_putc," %u", Intencidad);    

//Empieso Lectura
read_ADC(ADC_START_ONLY);
  }
}

Saludos..
« Última modificación: 20 de Mayo de 2011, 14:32:55 por kaki »

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Duda Cruce por cero.
« Respuesta #18 en: 20 de Mayo de 2011, 15:21:51 »
Utiliza el buscador, hay varios códigos de dimmers, como para que veas y leas las experiencias que han tenido otros. Fíjate cual opto-triac es el adecuado para esta aplicación.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado kaki

  • PIC18
  • ****
  • Mensajes: 260
Re: Duda Cruce por cero.
« Respuesta #19 en: 20 de Mayo de 2011, 15:26:35 »
ya me lei 50 post y no se cual es mi error... hay codigos que son similar al mio y no me anda igual... El optotriac es el adecuado el MOC3021... solo hechale una leida y ve que ves anormal... te lo agradeceria...

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Duda Cruce por cero.
« Respuesta #20 en: 20 de Mayo de 2011, 22:37:16 »
Hola.

Bueno, el error es que no sebas bien el TRIAC ... lee la hoja técnica del TRIAC en cuestión y verifica que el tiempo en el que esta el GATE es el suficiente. Mira aqui

Saludos
El papel lo aguanta todo

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Duda Cruce por cero.
« Respuesta #21 en: 20 de Mayo de 2011, 22:49:44 »
creo que tienes mal tu algoritmo, estas poniendo el set_timer0 dentro de la interrupcion del timer, pero lo debes de poner en cuanto detectes el cruce por cero, porque a partir de ese momento empiezas c contar para prender el triac, ademas, dentro de tu interrupcion del timer prendes y apagas el triac muy rapido, despues de que lo prendes pon un delay de 100 us y despues lo apagas. checa si eso funciona
"Nada es imposible, no si puedes imaginarlo"

Desconectado kaki

  • PIC18
  • ****
  • Mensajes: 260
Re: Duda Cruce por cero.
« Respuesta #22 en: 08 de Junio de 2011, 19:24:05 »
Encontre el problema. La interrusion se cumple mucho mas rapido que si cumpla la condicion dentro del TIMER0. Lo que no se si el error lo tengo en los timpo de desbor o en la Interrupsion. Saludos

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Duda Cruce por cero.
« Respuesta #23 en: 08 de Junio de 2011, 19:37:20 »
entonces me parece que el tiempo de tu timer es mayor que el periodo de la linea de AC, checa que si este bien el tiempo de desboradmiento
"Nada es imposible, no si puedes imaginarlo"

Desconectado kaki

  • PIC18
  • ****
  • Mensajes: 260
Re: Duda Cruce por cero.
« Respuesta #24 en: 08 de Junio de 2011, 22:00:47 »
TIMER0:

   Cristal -> 20Mhz
   Prescaler -> 256
   Ser_Timer0 (255)
       -------------------
   Tiempo 51.20 us


Divido el Tiempo del siclo para ver la intencidad maxima y minimo(osea desde donde

parte y hasta donde llega para que la lampara esta la maximo o minimo).

10000 / 51.20 = 195

Bueno lo que pasa es que el timer0 solo desborda 2 veces. Osea el paso por 0 va mas

rapido que el Timer0.

¿Cual puede ser el problema?

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Duda Cruce por cero.
« Respuesta #25 en: 08 de Junio de 2011, 22:12:23 »
El problema que veo es que el tiempo que permanece el GATE en alto es muy poco. Mirando tu último código, en la parte de la interrupción,  validas con un if para encender el GATE, pero inmediatamente lo vuelves a apagar. Si revisaste el link que te postee? ahí esta un código (probado) de lo que necesitas
El papel lo aguanta todo

Desconectado kaki

  • PIC18
  • ****
  • Mensajes: 260
Re: Duda Cruce por cero.
« Respuesta #26 en: 08 de Junio de 2011, 22:50:54 »
Lo que pasa que ese codigo que me pasaste usa el CCP y no entiendo mucho... quiero hacer que yo entienda para poder aprender... Ya corregi lo del Tiempo de cebado del triac.. El problema que tengo ahora es otro!! saludos..

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Duda Cruce por cero.
« Respuesta #27 en: 08 de Junio de 2011, 23:00:44 »
cual es tu problema actual?

para encender el triac yo lo he hecho con 100 us
"Nada es imposible, no si puedes imaginarlo"

Desconectado kaki

  • PIC18
  • ****
  • Mensajes: 260
Re: Duda Cruce por cero.
« Respuesta #28 en: 08 de Junio de 2011, 23:02:38 »
El problema es qeu el Timer0 va mas lento que la interutsion.. y se resetea antes que lo deberia...

mira:

Citar
TIMER0:

   Cristal -> 20Mhz
   Prescaler -> 256
   Ser_Timer0 (255)
       -------------------
   Tiempo 51.20 us


Divido el Tiempo del siclo para ver la intencidad maxima y minimo(osea desde donde

parte y hasta donde llega para que la lampara esta la maximo o minimo).

10000 / 51.20 = 195

Bueno lo que pasa es que el timer0 solo desborda 2 veces. Osea el paso por 0 va mas

rapido que el Timer0.

¿Cual puede ser el problema?

entra solo 2 veces con ese tiempo... y chau pone el contador en 0..

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Duda Cruce por cero.
« Respuesta #29 en: 08 de Junio de 2011, 23:17:30 »
si tu cristal es de 20 MHz, esta bien tu presscales de 256, pero entonces tu tiempo maximo de desbordamiento es de 13.107 ms, lo cual es mayor que el periodo de la senoidal

si tu señal de alterna es de 60 Hz entonces cada semiciclo de la senoidal dura 8 ms aprox.

tu timer porque lo cargas con 255? con eso se desbordaria inmediatamente.


si despues de detectar el cruce por cero le pones un valor de: set_timer0(99), entonces van a pasar 8 ms y te genera la interrupcion, en este caso coincidira con tu ciclo de la senoidal
si le pones  set_timer0(180) el timer se desbordara 3.8 ms despues del cruce, lo cual solo dejaria pasar aprox la mitad del ciclo y tendrias un valor de intensidad media
"Nada es imposible, no si puedes imaginarlo"