Autor Tema: Contro de nivel y Temperatura de un calderin por medio de RF  (Leído 24374 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Contro de nivel y Temperatura de un calderin por medio de RF
« Respuesta #60 en: 08 de Agosto de 2009, 15:56:58 »
Hola.

No te compliques, si se debe esperar al proximo cruce por cero para volver a activar la interrupcion del Timer0, pues no hay necesidad de modificarla en la funcion que tienes para int_TIMER0. La activas en la interrupcion de cruce por cero y la desactivas luego de enviar el pulso de activacion al TRIAC -es como lo tengo en el codigo que te he posteado-. El setear el timer con set_timer0(); no habilita la interrupcion.

Si vas a hacer control ON-OFF debes usar un opto-triac que tenga detector de cruce por cero como el MOC3041.

Saludos
El papel lo aguanta todo

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Contro de nivel y Temperatura de un calderin por medio de RF
« Respuesta #61 en: 08 de Agosto de 2009, 23:30:58 »
no me fue posible identificar el problema..ya te entendí la idea pero si utilizo tu codigo por alguna razon no funciona...con mi rutina funciona pero estoy perdiendo preciosos milisegundos...

por otro lado, tengo los dos triac de gate sensible, y el MOC3011. Con el MOC3041 solo debo enviar pulso y el solo se encarga de activar el triac en el cruce por cero y ya no tendria q detectar los flancos?..de ser asi solo debo cambiar el MOC
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Contro de nivel y Temperatura de un calderin por medio de RF
« Respuesta #62 en: 09 de Agosto de 2009, 14:42:50 »
Hola.

Es diferente el control ON-OFF al control de fase.

ON-OFF:


Fase:


recuerda que yo hago la deteccion del cruce por cero con la interrupcion en RB0.
« Última modificación: 09 de Agosto de 2009, 14:46:46 por MLO__ »
El papel lo aguanta todo

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Contro de nivel y Temperatura de un calderin por medio de RF
« Respuesta #63 en: 09 de Agosto de 2009, 22:01:50 »
ok, pero lo que quiero decir es q si con el MOC3041 lo  unico q tengo q hacer es enviarle el '1' o '0'  y el con su cruce por cero activa o desactiva la carga?
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Contro de nivel y Temperatura de un calderin por medio de RF
« Respuesta #64 en: 09 de Agosto de 2009, 22:05:09 »
Hola.

El resultado seria como el de la grafica de arriba. Lo que garantiza el MOC es que cuando envias el '1', el espera al cruce por cero para activar la carga, esto ayuda a reducir los transcientes de corriente y voltaje sobre la carga, ya que la señal de voltaje comienza desde ceros.

Saludos
El papel lo aguanta todo

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Contro de nivel y Temperatura de un calderin por medio de RF
« Respuesta #65 en: 11 de Agosto de 2009, 23:36:39 »
estoy teniendo problemas con una de las plaquetas de potencia, cuando la conecto se me resetea el micro y tambien me corrompe los datos del LCD. Como voy a cambiar el hardware de potencia pss voy a aprovechar para cambiar el detector de cruce por cero hacia la interrupcion externa y es que por cambio de nibble de pronto se me puede estar presentando problemas de ruido por esos pines y solo utilizo uno.

resulta que para la parte de potencia, tengo identificadas la fase y el neutro del tomacorriente, para hacer una sola tierra comun a todo el circuito lo q hice fue enviar neutro con resistencia de 10K a tierra digital, es decir una sola tierra, pero entonces yo supuse que en un toma doble pss la fase y neutro son los mismos y como conecto dos plaquetas de potencia de la misma red pss el otro neutro tambien estaria enviado a tierra con la misma resistencia de 10K, entonces no se si estoy haciendo bien asi? o q podria hacer...adjunto la imagen como haria las nuevas plaquetas de potencia pero ahora le puse a cada una una resistencia de 10K en el neutro...entonces independientemente de donde conecte la plaqueta el neutro ira a tierra digital con 10K.
otra cosa a tener en cuenta es que a la primera plaqueta de potencia le envio un solo conector desde el puertoB con las dos señales necesarias para activar y de esa plaqueta  pongo otro conector hacia la segunda plaqueta con el bit de activacion y las tierra general...espero haberme hecho entender



la que actualmente me resetea el micro es la segunda y esa la tengo sin resistencia...el valor de la resistencia deberia ser mas alto???
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Contro de nivel y Temperatura de un calderin por medio de RF
« Respuesta #66 en: 12 de Agosto de 2009, 13:13:10 »
cambiando el programa para detectar el cruce por cero utilizando la interrupcion externa
lo puse asi, de entrada pongo el flanco en 0...y ya dentro de la interrupcion se actualiza
Código: CSS
  1. #int_EXT
  2. void  EXT_isr(void)
  3. {
  4.    DELAY_US(1300);
  5.    IF(FLANCO==0)
  6.       {
  7.       FLANCO=1;
  8.       ext_int_edge(H_TO_L);
  9.       SET_TIMER0(99);
  10.       enable_interrupts(INT_TIMER0);
  11.       }
  12.    ELSE
  13.       {
  14.       FLANCO=0;
  15.       ext_int_edge(L_TO_H);
  16.       SET_TIMER0(99);
  17.       enable_interrupts(INT_TIMER0);
  18.       }
  19. }
  20.  
  21. #int_TIMER0
  22. void  TIMER0_isr(void)
  23. {
  24. CONTADOR++;
  25. IF(CONTADOR==SETPOINTFASE)
  26.    {
  27.    disable_interrupts(INT_TIMER0);
  28.    OUTPUT_HIGH(PIN_B1);
  29.    CONTADOR=0;
  30.    DELAY_US(300);                        
  31.    OUTPUT_LOW(PIN_B1);
  32.    FLAG_TIMER=1;
  33.    }
  34. SET_TIMER0(99);
  35.  
  36.  
  37. /*IF(FLAG_TIMER==1){
  38.    disable_interrupts(INT_TIMER0);}
  39. ELSE
  40.    SET_TIMER0(99);
  41.    enable_interrupts(INT_TIMER0);*/
  42.  
  43. }
  44.  
  45.  
  46. #int_RDA             //INTERRUPCION POR RECEPCION SERIE
  47. void  RDA_isr(void)
  48. {
  49.  DATO=0;
  50.  IF(KBHIT())
  51.    {
  52.    DATO=GETC();
  53.    SWITCH(DATO)
  54.    {
  55.    CASE '1':SETPOINTFASE=1;
  56.             break;
  57.            
  58.    CASE '2':SETPOINTFASE=2;
  59.             break;
  60.            
  61.    CASE '3':SETPOINTFASE=3;
  62.             break;
  63.            
  64.    CASE '4':SETPOINTFASE=4;
  65.             break;
  66.            
  67.    CASE '5':SETPOINTFASE=5;
  68.             break;
  69.            
  70.    CASE '6':SETPOINTFASE=6;
  71.             break;
  72.    
  73.    CASE '7':FLAG_LECTURA=1;
  74.             break;
  75.  
  76.    CASE 'A':OUTPUT_HIGH(PIN_B2);
  77.             LCD_GOTOXY(7,2);
  78.             PRINTF(LCD_PUTC,"ON ");
  79.             break;
  80.  
  81.    CASE 'B':OUTPUT_LOW(PIN_B2);
  82.             LCD_GOTOXY(7,2);
  83.             PRINTF(LCD_PUTC,"OFF");
  84.             break;
  85.    }
  86.    
  87.   }
  88.  
  89. }
  90.          
  91.  
  92.  
  93.  
  94.  
  95.  
  96. //#######################FIN INTERRUPCIONES#############################
  97.  
  98.  
  99.  
  100.  
  101. void main()
  102. {
  103.  
  104.    
  105.    setup_adc(ADC_CLOCK_DIV_32);
  106.    setup_psp(PSP_DISABLED);
  107.    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32);
  108.    setup_timer_1(T1_DISABLED);
  109.    setup_timer_2(T2_DISABLED,0,1);
  110.    setup_comparator(NC_NC_NC_NC);
  111.    setup_vref(FALSE);
  112.    //enable_interrupts(INT_RB);
  113.    //enable_interrupts(INT_EXT);
  114.    //enable_interrupts(INT_RDA);
  115.    //enable_interrupts(INT_TIMER0);
  116.    //port_b_pullups(TRUE);
  117.  
  118.    
  119.    DELAY_MS(250);
  120.    LCD_INIT();
  121.    LCD_PUTC("PRUEBA LCD");
  122.    DELAY_MS(1000);
  123.    LCD_PUTC("\f");
  124.    output_high(PIN_B1);
  125.    DELAY_MS(1000);
  126.    OUTPUT_LOW(PIN_B1);
  127.    
  128.    LCD_GOTOXY(1,1);
  129.    PRINTF(LCD_PUTC,"TEMPERATURA:");
  130.    LCD_GOTOXY(1,2);
  131.    PRINTF(LCD_PUTC,"BOMBA:");
  132.    enable_interrupts(INT_EXT);
  133.    ext_int_edge(L_TO_H);
  134.    enable_interrupts(GLOBAL);
  135.    
  136.    
  137.    while(true)
  138.    {
  139.     LECTURA();
  140.     enable_interrupts(INT_RDA);
  141.     enable_interrupts(INT_RB);
  142.     IF(FLAG_LECTURA==1)
  143.       {
  144.       FLAG_LECTURA=0;
  145.       PRINTF("T%uT\r\n",Q);
  146.       PRINTF("N%uN\r\n",O);
  147.       }
  148.     }
  149.    
  150.      
  151.    
  152. }//FIN DEL MAIN
  153.  
  154.  
  155. ////################################LECTURA######################################
  156. VOID LECTURA(VOID)
  157. {
  158.    ADCON1=0B00001101; //AN0 AN1 VREF+ VREF-
  159.    SET_ADC_CHANNEL(0);
  160.    DELAY_US(100);
  161.    Q=READ_ADC();
  162.    
  163.    
  164.    ADCON1=0B00000100;//AN0 AN1 VREF+=VCC VREF-=GND
  165.    SET_ADC_CHANNEL(1);
  166.    DELAY_US(100);
  167.    O=READ_ADC();
  168.    
  169.    //P=((2.5*Q)/255.0)*0.001;
  170.    //R=(5.0*O)/255.0;
  171.    LCD_GOTOXY(13,1);
  172.    PRINTF(LCD_PUTC,"%d",Q);
  173.    
  174.    
  175.    
  176. }  
  177.  
  178.  
  179. //#################################################################################
el control de fase se puede simular con los numeros del 1 al 7 y con "A" y "B" pongo on off en el lcd pero me aparecen unos numeros al lado

lo q no entiendo por q pasa q cuando le mando al lcd poner on off en la segunda linea me salen unos numeros??
« Última modificación: 12 de Agosto de 2009, 13:17:14 por jhozate »
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Contro de nivel y Temperatura de un calderin por medio de RF
« Respuesta #67 en: 12 de Agosto de 2009, 14:06:54 »
Que version del ISIS usas? no abrio  :(

Pon una captura de pantalla para ver de que se trata.

Saludos
El papel lo aguanta todo

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Contro de nivel y Temperatura de un calderin por medio de RF
« Respuesta #68 en: 12 de Agosto de 2009, 14:29:50 »
uso la version 7.5
te adjunto la imagen, a veces me salen unos 7 al lado de la palabra on u off
« Última modificación: 12 de Agosto de 2009, 14:32:46 por jhozate »
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Contro de nivel y Temperatura de un calderin por medio de RF
« Respuesta #69 en: 12 de Agosto de 2009, 15:36:24 »
Hola.

Creo que los printf() que estan en la #int_RDA seria mejor ponerlos en el programa principal.

Saludos
El papel lo aguanta todo

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Contro de nivel y Temperatura de un calderin por medio de RF
« Respuesta #70 en: 12 de Agosto de 2009, 16:16:53 »
 :mrgreen: ..si .era eso...pero q me recomiendas con lo de potencia?..pongo una resistencia mas grande para enviar neutro a tierra digital y asi tener una sola tierra
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Contro de nivel y Temperatura de un calderin por medio de RF
« Respuesta #71 en: 12 de Agosto de 2009, 18:31:55 »
enfrento un pequeño detalle...cuando quiero apagar totalmente la carga a la que le hago control de fase..me alcanza a destellar... cuando recibo el 7 cargo el setpoint con 0..adjunto el codigo..
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Contro de nivel y Temperatura de un calderin por medio de RF
« Respuesta #72 en: 12 de Agosto de 2009, 21:02:49 »
Pues, yo no soy amigo de mezclar AC con DC de esa manera. Prefiero usar algo que aisle las dos señales. Hay varias formas de hacerlo: con transformador, con optoacoplador (este es mas pequeñin).

Para apagar la carga yo envio a ceros el pin que habilita el GATE del TRIAC. Puedes asignar un if dentro de la interrupcion del Timer0, que solo tome el conteo del tiempo cuando el valor del SetPoint sea diferente del maximo, si es el maximo, pues pones a 0 el pin y listo.

Saludos
El papel lo aguanta todo


 

anything