Vai al contenuto
PLC Forum


Triac Bt137 6000D


sorecaro

Messaggi consigliati

Buongiorno, ho questo triac (BT137 6000D) connesso come da schema su di un pic 12F675:

eec3ae46ed884fe72dc8fd3500ca56f3.png

Il problema è che per far spegnere le lampade devo dare un valore alto
GPIO.F0=1; spegni lampada 1
anche la routine per l'accensione della lampada è al contrario:
*****esempio****
if(tasto1){
gpio.0=0;
delay_us(10);
gpio.0=1;
}
Ho fatto anche una prova, messo un pic vuoto, le lampade si accendono.
Dove sto sbagliando???
Modificato: da sorecaro
Link al commento
Condividi su altri siti


Se lo schema è questo non può funzionare.

Come piloti il gate dal pic? cos'hai un trasformatore d'impulsi? un fotoaccoppiatore?

Dovresti mettere lo schema completo.

Link al commento
Condividi su altri siti

Non risulta dallo schema quale sia il terminale comune , massa (spero che sia quello collegato ai T1 dei triac).

Se l'uscita comune del ''PIC'' è il negativo (massa ) e l'ingresso comune per i triac è quello dei T1(altrimenti credo che il PIC non ci sia più :smile: ), credo che Tu debba invertire la logica nel programma .

Fa un test semplice : alimenti i triac a 220 Vca e comandi l'ingresso gpio.x con un impulso positivo da 5-10 Vdc ;dovresti ottenere un impulso luminoso dal canale corrispondente .


Scusa Livio , non avevo visto il Tuo messaggio :P !

Link al commento
Condividi su altri siti

Livio lo schema è proprio questo, ho solo tralasciato la parte che alimenta il Pic. La scheda mi è stata data già assemblata con questi componenti.

in più c'è una resistenza da 10Mohm che serve per lo zero crossing ( funziona )

#define LUCE_1 GPIO.F4          //definisci gpio.4 come luce_1 
#define LUCE_2 GPIO.F5          //definisci gpio.5 come luce_2 
#define LUCE_3 GPIO.F2          //definisci gpio.2 come luce_3 
#define LUCE_4 GPIO.F1          //definisci gpio.1 come luce_4 

#define ON 0                    // definisci stato 1 come 0 
#define OFF 1                  // definisci stato 0 come 1 

unsigned bit zero_crossing;            //  appoggio variabili 
signed int tempo; i; pausa;            //  appoggio variabili 

             
void accendi_1(void){                                 //funzione accendi luce_1
                                  if(zero_crossing){  //se passaggio per lo zero 
                                  LUCE_1=ON;          // attiva luce_1 
                                  Delay_us(10);
                                  LUCE_1=OFF; 

                                          

                               } 
                                
                               } 
void accendi_2(void){                                //funzione accendi luce_2 
                                  if(zero_crossing){ 
                                  LUCE_2=ON; 
                                  Delay_us(10); 
                                  LUCE_2=OFF; 

                               } 
                               } 
void accendi_3(void){                                //funzione accendi luce_3 
                                  if(zero_crossing){ 
                                  LUCE_3=ON; 
                                  Delay_us(10); 
                                  LUCE_3=OFF; 

                               } 
                               } 
void accendi_4(void){                               //funzione accendi luce_4 
                                  if(zero_crossing){ 
                                  LUCE_4=ON; 
                                  Delay_us(10); 
                                  LUCE_4=OFF; 

                               } 
                               } 

void interrupt (void){                          //routine interrupt 
                              if (intcon.GPIF){ 
                              if(gpio.f3)  {  
                                  stato=1;
                                           }
                              if((gpio.f3==0)&(stato==1)){
                              zero_crossing=1;  
                                       i++;
                                       stato=0;     
                                        } 
                                        INTCON.GPIF=0;      //reset interrupt 
                                        INTCON.GIE=1;      // abilita interrupt


                                          } 
                                           } 

void main() {                             // 
   CMCON =  7;                         //Disabilita Comparatore. 
   ADCON0 = 0;                         //Disabilita convertitore A/D 
   ANSEL =  0b00000000;                //Tutte le porte in digitale 
   GPIO=    0;                         //metti a zero le porte gpio 
   TRISIO = 0b00001000;                //Tutti i pin in OUT tranne gpio3 
   IOC=     0b001000;                  //abilita cambio stato su gpio3 
   INTCON.GPIE=1;                    //abilita interrupt porta gpio 
   INTCON.GIE=1;                   //abilita interrupt porta gpio 
    i=0; 
   zero_crossing=0;                  //inizializza variabile 

 while(1)             //Eseguo un ciclo finito 
       { 

   LUCE_1=OFF;                          ////////////////////////////////////////
   LUCE_2=OFF;                          ///////////////////////////////////////
   LUCE_3=OFF;                          //comincia ciclo con lampade spente // 
   LUCE_4=OFF;                          ////////////////////////////////////// 

    if ((i>1)&(i<100))     { 
         accendi_1(); 
    } 
     if ((i>100)&(i<300))     { 
        LUCE_1=OFF; 
    } 
    if ((i>400)&(i<500))     { 
         accendi_1(); 

    } 
       if((i>500)&(i<700))     { 
        LUCE_1=OFF; 
    } 


      if(i>800){         
   zero_crossing=0; 
   i=0; 
     } 
     
    }                               

    
   } 
    
    


 } 

Il seguente codice funziona, la lampada si accende e si spegne ( sto usando la logica invertita come consivaglia gabri-z).

Il problema è che devo sincronizzare due schede con la frequenza di rete.

Se collego due schede con due pic identici per un po funzionano in sincronia, ma dopo un pò una anticipa l'altra.

Con simulazione fatta con Proteus noto che con questo codice il Pic ha un carico di lavoro del'82% e la variabile i che viene incrementata nella routine di interrupt perde qualche incremento.

Invece se faccio

#define ON 1

#define OFF 0

il pic lavoro in modo perfetto, non perde nessun incremento

Link al commento
Condividi su altri siti

Ma scusa che mi intrometto , come fanno le schedine a interpretare la frequenza di rete ? Non è che hanno i ''clock'' separati , ed evidentemente diversi , da creare sfasamenti ?

Cosa sono 'ste schedine e come sono collegate ?

Dobbiamo tirarti le parole con la pinza ? :superlol:

Ricordati che solo le domande chiare , precise possono rendere risposte chiare . (anche '' non lo so '' è una risposta chiara , ma almeno non giriamo 200 messaggi ) :thumb_yello:

Dicci qualcosa di più su queste schedine !

Anche rispondere alle domande di chi vuole aiutarti è gradito :roflmao: (la/le domande di Livio sono ancora senza risposta ;) )

Modificato: da gabri-z
Link al commento
Condividi su altri siti

Ma scusa che mi intrometto , come fanno le schedine a interpretare la frequenza di rete ? Non è che hanno i ''clock'' separati , ed evidentemente diversi , da creare sfasamenti ?

Ci mancherebbe che ti intrometti, anzi :-)

Sto usando lo zero crossing ( interrupt su gpio.3) per fare la sequenza di accensione e spegnimento, cosi hanno un riferimento bene preciso, almeno l'idea è questa.

Infatti nella routine di interrupt ad ogni passaggio per lo zero viene incrementata una variabile i, e dipende dal valore di quella variabile quale lampada accendere

Link al commento
Condividi su altri siti

Le "schedine" sono schede già assemblate dove un pic 12f675 deve pilotare 4 triac collegati come da schema del post 1.

Per quanto riguarda lo zero crossing viene preso tramite una resistenza da 10Mohm collegata direttamente alla 220VAC.

L'alimentazione del pic viene prelevata direttamente dalla 220VAC ( c'è un circuito che abbassa e stabilizza tramite zener ), se può essere di aiuto posto lo schema.

inoltre c'è un potenziometro collegato all'ingresso AN0 ( ma non deve fare nulla)

Se può essere di aiuto disegno lo schema oppure la foto della scehda

Link al commento
Condividi su altri siti

Se sono interfacciate direttamente in quel modo è una cosa veramente pessima, senza nessuna separazione da rete.

C'è almeno una An microchip che spiega molto bene come realizzare lo zero crossing per sincronizzarsi sulla rete. Funziona tanto bene che si può anche realizzare sia PLC (Power Line Comunication) che dimmerare la tensione. L'AN è anche completa di schemistica, ti consiglio vivamente di ricercarla sul sito Microchip e studiarla attentamente.

Link al commento
Condividi su altri siti

Anche se non le puoi modificare intanto ti rendi conto di come deve essere realizzato un simile dispositivo per funzionare decentemente.

Se il sincronismom sullo zero è reale e l'interrupt parte proprio sullo zero, la differenza che puoi avere tra le due schede è solo quella del comando, quindi devi anche sincronizzare il comando.

Link al commento
Condividi su altri siti

Se il sincronismom sullo zero è reale e l'interrupt parte proprio sullo zero, la differenza che puoi avere tra le due schede è solo quella del comando, quindi devi anche sincronizzare il comando.

Dove risulta che il problema non sta nel.....titolo :superlol::thumb_yello: (poveri triac , :( )

Link al commento
Condividi su altri siti

Povero me, no poveri triac :superlol::superlol::superlol::superlol::superlol::superlol:

Secondo me , dovresti fare vedere lo schema intero (non sarà mica secreto industriale :roflmao: ) ed in base a quello , eliminati eventuali errori ''hard'' , qualcuno , (mi NO ! :superlol: ), Ti :potrà aiutare nella parte ''soft'' . Credo che sia la più corta strada per risolvere il Tuo problema :thumb_yello:

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...