I need to control a heater element (about 500W) using arduino. For switching part I would go with zero-crossing SSR or zero-crossing optoisolator and triac (the second seems to be cheaper).

The question is do I still need a zero-crossing detection for the arduino. The time the load is switched on clearly depends on phase between arduino control pulses and line voltage.

case one

case two

In the first picture the load is switched on about half a cycle. And in the second it's switched on the whole time. But the only difference between these two cases is the phase of signals.

For controlling the heater I probably can make period of the pulses much longer which somewhat solves the problem.

But if I would like to use the same circuit to dimm a light bulb then I need to do zero-crossing detection in the micro controller to keep pulses in phase with AC line? And do I need zero-crossing SSR/optoisolator then?

Does this mean zero-crossing SSRs are suitable only in cases where switching period is long enough that the phase of control signal is not a problem?

  • \$\begingroup\$ If you're using a zero-crossing SSR, then your PWM period must be significantly longer than one cycle of the line frequency. The load will receive power (or not) for complete half-cycles of the power. \$\endgroup\$
    – Dave Tweed
    Nov 30, 2014 at 15:54

2 Answers 2


You cannot smoothly dim a normal incandescent light bulb with zero-crossing control of normal 50/60Hz single-phase mains- the filament (even a really fat high-power one) will visibly flicker to an objectionable degree with even a small number of possible levels of control. Similarly, radiant heating is problematic with zero-crossing control because the temperature can change significant within a small number of cycles. In those cases, phase control is typically used.

Normally for zero crossing control we would like a cycle length of several seconds or more (up to maybe 30-60s), so that the number of half-cycles is at least in the low hundreds. That limits the applications to those where the low-pass filter formed by the heat capacity of the various elements will smooth out the power, so generally those applications with a time constant in the 1minute + range.

Phase control has problems that zero-crossing switching does not have (more EMI, there may filtering required for EMC compliance, undesirable audible noise from lamp filaments, nonlinear response power-vs-trigger angle). On the other hand, zero crossing switching of high current loads can cause visible light flickering (otherwise independent lights that happen to be powered from the same mains circuit).

For phase control or for zero crossing switching you need zero crossing detection. In the case of zero crossing switching, the micro can delegate that job to the triac driver and just tell it roughly when it wants the triac on or off, and the driver and triac will respond with some latency depending on when the zero crossing happens to hit.

There's a third alternative- the simplest- random switching, where the triac just switches on whenever it is asked to (and switches off at the zero crossing, since that's all it can do).

If you implement a zero-crossing detector for a micro and drive the triac with a non-zero-crossing opto (or use a random switching SSR) then you can select any of the three options with firmware.

  • \$\begingroup\$ Maybe I had the terms mixed up a little bit. So if I got it right zero-crossing control means switching on and off only at crossing zero. Phase control is switching at specific point in the middle of half cycle and off at the end of it. And random switching is similar but trigering is not properly timed. Switching on in the middle of the cycle produces EMI. So if the system I want to control has slow response it's safe to go with zero-crossing opto and triac and control the switching circuit with variable width pulses with period of several seconds. \$\endgroup\$
    – loblik
    Nov 30, 2014 at 18:50
  • \$\begingroup\$ @loblik Yes, that's the normal way to do thermal control in systems with long time constants. You will still get a bit of EMI (because switching won't take place exactly at the zero crossing, maybe a few volts), but it will be relatively small. Several seconds or longer is good for most purposes. \$\endgroup\$ Nov 30, 2014 at 18:52
  • \$\begingroup\$ Thanks a lot. It's much more clear to me now. Marking as solved. \$\endgroup\$
    – loblik
    Nov 30, 2014 at 19:37

Heaters are best treated as on-off devices because on the long time constants involved, and PWM is more rare. So, no, you don't need to detect crossings. Dimming a light bulb is a different problem.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.