Reflow oven (toaster) heater AC control

Alright folks,

I'm working on building a reflow oven so I can do some reballing of some Virtex-5 FPGAs I've had laying around.

I've got most of the control notions down into code so far but I'm drawing a big blank on how to control the heater supply to be able to moderate temperature better. So far, I've considered -

  1. Using a triac circuit - there seem to be many examples of this online, although the notions of triac operation confound me a little bit, especially when trying to PWM the operation.
  2. Using SSRs - but I've heard that this is complicated by the fact that most SSRs are designed to latch during the cycle and therefore not be receptive to a PWM signal.
  3. Using a standard mechanical relay - this has the advantage of being able to handle mass current without the latching, but the issue is that the armatures would most likely need the 3kHz PWM adjustment, which would disrupt the timer operations I need to perform things like automatic temperature sensing and the stage of the reflow cycle. If I resorted to this option, I would put up with the clacking.
  4. Rectifying the 120V mains and feeding the heater coils with straight (albeit unfiltered) DC. This would allow me to use a standard high-current FET to switch the signal, at the expense of having a much higher heater voltage that would need to be compensated for (160V+).

Do any of you have experience with any of these options and have any ideas on how to accomplish this? I'm willing to go with a complex circuit, but only if it's understandable - if it's not, I'm still going to be the one troubleshooting it.

Just use an SSR. You don't need PWM with heaters, you can simply turn them on and
off every few seconds (think very slow PWM done in software). There's a lot of
thermal inertia in the system so the slow PWM rate won't be significant.

An opto-triac is the heart of an SSR, which could offer a cheaper option (but involves
some tinkering on the mains side yourself - only attempt if competent...)

If you ever get it working, don't ever try to run PCBs with thermal fuses on them because they will come out of the oven OPEN.
(Yeah, I know DUH , right ? Believe or not , people still do this...but only once.)

blasthash:
2) Using SSRs - but I've heard that this is complicated by the fact that most SSRs are designed to latch during the cycle and therefore not be receptive to a PWM signal.

TRIACs are like this too, they are what is called (at least in my textbook) a "semi-controlled switch". You can switch them on, but you can't switch them off. You need to wait for the next zero crossing.

But as already mentioned, you don't need kilohertz level PWM to effectively modulate a heater. A period of 10 seconds can be adequate.

MarkT:
Just use an SSR. You don't need PWM with heaters, you can simply turn them on and
off every few seconds (think very slow PWM done in software). There's a lot of
thermal inertia in the system so the slow PWM rate won't be significant.

An opto-triac is the heart of an SSR, which could offer a cheaper option (but involves
some tinkering on the mains side yourself - only attempt if competent...)

That's probably what I'm going to go with, so I can avoid the need for an optocoupler to feed a triac as well as perform zero-crossing detection. However, how would I go about the very slow PWM?

I understand the ideas here (if heater power is 80%, every 10 seconds the heater is only on for eight and switches off for two), but how would I implement that in software? The two things that spring to mind are the use of the evil delay function, which is a no-go because it would block everything, and timers, which would jam my code because I'm already attempting to make the device do a periodic reading of the temperature and do pseudo-real-time adjustments.

Pretty obviously, if I bust out my Mega, I could gain the use of the other timer as well as the added benefits of I/O, but the geometry difference would make the shield I'm trying to use incompatible - so I've been working with the Uno as of late.

raschemmel:
If you ever get it working, don't ever try to run PCBs with thermal fuses on them because they will come out of the oven OPEN.
(Yeah, I know DUH , right ? Believe or not , people still do this...but only once.)

I feel like that needs to be a sign above my reflow oven, just for kicks - "Thermal fuses get blown by heat".

Jiggy-Ninja:

blasthash:
2) Using SSRs - but I've heard that this is complicated by the fact that most SSRs are designed to latch during the cycle and therefore not be receptive to a PWM signal.

TRIACs are like this too, they are what is called (at least in my textbook) a "semi-controlled switch". You can switch them on, but you can't switch them off. You need to wait for the next zero crossing.

But as already mentioned, you don't need kilohertz level PWM to effectively modulate a heater. A period of 10 seconds can be adequate.

Right. I knew that triacs and SSRs have in many ways related behaviors but the intricacies of triacs (the gate pulse and zero-crossings) befuddled me a bit.

I've thought about it and what I'm going to implement is an ISR scheme that gets evaluated every second.

On the ramp stages, it will evaluate what the correct temperature should be (simply by adapting millis() or a simple counter and multiplying by the incline (*C/sec) of the ramp), if the current temperature exceeds that it will turn the relay off during that iteration and wait until the next to reevaluate.

On the soak/peak stages it will determine if the temperature exceeds the maximum temperature of the stage and do the same.

Let me know what you guys think, but I think that's a reasonable design choice that won't interfere with my current timer/interrupt scheme.

Slow PWM is easy to bit-bash. Look at how BlinkWithoutDelay works
and generalize it to have a controllable duty-cycle.

If you ever get it working, don't ever try to run PCBs with thermal fuses on them because they will come out of the oven OPEN.

Are you talking the PTC resettable fuses like every Arduino board with a USB conenction for power uses?
Or some other kind of fusible link?

look at the multitude of people who use an SSR for the toaster oven reflow.

just get an SSR that has 5v input.

blasthash:
That's probably what I'm going to go with, so I can avoid the need for an optocoupler to feed a triac as well as perform zero-crossing detection. However, how would I go about the very slow PWM?

The PID library works with a relay and has a default sample time of 200ms. Just keep adjusting the setpoint in your sketch to whatever you want and let the library figure out when to turn the relay on/off.

A bit overkill perhaps, but y'know.