Transistorle triyak surmek

Kod:
int AC_LOAD = 11;    // Output to Opto Triac pin

int dimming = 128;  // Dimming level (0-128)  0 = ON, 128 = OFF

/* Due to timing problems, the use of ‘0’ can sometimes make the circuit

flicker. It is safer to use a value slightly higher than ‘0’



*/

int i=0;



void setup()

{

  //Serial.begin(115200);

  pinMode(AC_LOAD, OUTPUT);// Set AC Load pin as output

  attachInterrupt(0, zero_crosss_int, RISING);

// Chooses '0' as interrupt for the zero-crossing

}

// the interrupt function must take no parameters and return nothing

void zero_crosss_int()

// function to be fired at the zero crossing to dim the light

{

  // Firing angle calculation : 1 full 50Hz wave =1/50=20ms

  // Every zerocrossing thus: (50Hz)-> 10ms (1/2 Cycle) For 60Hz => 8.33ms



  // 10ms=10000us

  // (10000us - 10us) / 128 = 75 (Approx) For 60Hz =>65

  int dimtime = (75*dimming);    // For 60Hz =>65 

  //Serial.println(dimtime); 

  delayMicroseconds(dimtime);    // Off cycle

  digitalWrite(AC_LOAD, HIGH);   // triac firing

  delayMicroseconds(10);         // triac On propogation delay

                                 //(for 60Hz use 8.33)

  digitalWrite(AC_LOAD, LOW);    // triac Off

}

void loop()  {

for (i=0; i <= 128; i+=1)

{

dimming=i;

delay(40);

}

  for (i=128; i >=0; i-=1)

{

dimming=i;

delay(40);

}

}
pwm on ve off süreleri değişebilen sabit peryodlu sürekli bir sinyaldir.
pwm 1. peryodu bitince hemen diğer peryoda geçer ve böyle devam eder.
yani zero croos sinyali ile pwm i başlatsanız bile diğer peryodlarda zero cross sinyalini referans olarak kullanamazsınız.
fakat dimmer devresinde her ateşlemenin başlangıcı zero cross detect ile başlamak zorundadır.
pwm peryodunu 10ms yapsanızda zamanla senkronizasyon sorunu oluşacağından verim alamazsınız.
 
Moderatör tarafında düzenlendi:
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için onları kabul etmelisiniz. Daha fazla bilgi edin…