2

To control the average voltage, output by a triac, the controller needs to know the time of the zero crossing. But the circuit for detecting the zero-crossing is a sensor, vulnerable to noise; taking it's input from the mains - same place the thyristor is injecting noise into.

What are some general guidelines for designing a system of 1 zero-cross detector, one micro-controller and several phase-controlled triacs of about 900W each?

Vorac
  • 3,091
  • 5
  • 29
  • 52
  • What is the sensor? – Andy aka Nov 10 '15 at 10:34
  • Simistor is a russian name for triac? – Marko Buršič Nov 10 '15 at 10:37
  • Yep, the Bulgarian, but I am nearly sure we stole it form them (or the germans). The sensor PCB will be using [SFH-620A-3](http://electronics.stackexchange.com/a/33043/9910). On another note, I just figured out I will be using switching only at the zero-crossing, so probably no noise will be generated. – Vorac Nov 12 '15 at 11:26

1 Answers1

1

You can try to google for the zero-cross detector. It can be done with a transformer or opto-coupler.
http://www.edn.com/design/analog/4368740/Mains-driven-zero-crossing-detector-uses-only-a-few-high-voltage-parts
https://sound-au.com/appnotes/an005.htm

Then you set a ISR at each trigger event that starts a new timer ISR, or you simply have a time interrupt at each 200us and you count for each output required phase delay, at ZC ISR you reset counters.

ISR_ZC():
1. phaseCounter = 0;
2. All Outputs Off
3. Set interrupt at time where phase angle is 160 degrees - ISR_Off()
4. Enable Interrupt ISR every 200us - ISR_Cnt

ISR_Cnt():
phaseCounter = phaseCounter + 1;
if phaseCounter >= setCnt1 then ouput1 = ON;
if phaseCounter >= setCnt2 then ouput2 = ON;
if phaseCounter >= setCnt3 then ouput3 = ON;

ISR_Off():
1. disable ISR_Cnt
2. All outputs off

pipe
  • 13,748
  • 5
  • 42
  • 72
Marko Buršič
  • 23,562
  • 2
  • 20
  • 33