[TriEmbed] Coffee roaster sanity check

Brian triembed at undecidedgames.net
Tue Dec 31 18:45:45 CST 2019


Hi Craig,

 > The MOSFET in the diagram is being used for PWM fan control. It
 > interrupts the neutral fan wire.
 >

Oh wow, that totally slipped past me when I looked at it last.  That 
won't work because the Arduino's power supply is isolated (and that's a 
very good thing).  "GND" in your circuit is an isolated GND; there's no 
path through the MOSFET back to the neutral AC line.  The motor just 
won't run at all.

It also won't work if you connect Q1 pin 3 to the AC neutral instead of 
GND, again because the Arduino supply is isolated.  The MOSFET will 
behave as if its gate is floating.  The motor will get half the AC cycle 
when the MOSFET's body diode is forward-biased, and [undefined behavior] 
the other half cycle.  And you'd potentially have 120VAC coupled back 
into your Arduino circuit thanks to the gate capacitance in the MOSFET.

Another thing that won't work is to simply move the MOSFET between the 
bridge rectifier and the motor, again because of the lack of reference. 
It would also be equally bad to tie your DC GND to either DC side of the 
motor.  If the DC circuit isn't completely isolated, it's going to be 
120V away from earth ground 60 times every second (i.e. the whole thing 
will be "live").

So your best bet, if you want to have the fan powered as it presently is 
by the popper and not a separate 19-VDC supply, is to use a TRIAC with 
an isolated driver (photocoupler).  The TRIAC itself is connected to the 
AC lines, and only the LED inside the photocoupler is connected to your 
DC circuit.

A triac such as this one:
https://www.digikey.com/short/zczrp0
and a photocoupler such as this one:
https://www.digikey.com/short/zczr4t

The photocoupler's datasheet has a typical application diagram on page 7 
(PDF page 8), showing how the coupler and the external triac are wired 
to an AC load and a DC control circuit.  The diagram shows a BJT used to 
drive the coupler's LED, but your Uno can drive it directly with the 
appropriately-sized resistor (it's just like driving a discrete LED). 
The resistors and capacitor on the load side are forming a low-pass 
filter for the TRIAC's gate, and could be omitted (resistors become 
wires, capacitors become open circuit).

> Controlling the heater with PWM would be useful.
> 
> Could this technique work? "Bresenham algorithm" with SSR?
> https://electronics.stackexchange.com/questions/304148/is-there-a-way-to-use-pwm-to-control-ac-mains-powered-heater

The accepted answer on that question isn't a bad suggestion, but note 
that its PWM period is 255 AC cycles, or a little over four seconds.  I 
honestly think this is overkill, because...(read on)...

> A simple on/off with the SSR is also fine to get me started. The 
> instructables code example cuts power when the temperature probe says it 
> is too high. That should be fine. When it is low enough, it turns on again.

AFAIK, industrial process controls that monitor temperature commonly 
take readings no more often than 1 Hz, because in most cases a system 
simply doesn't heat up or cool off that fast.  I'd bet if you monitor 
and turn heat on/off only as fast as once per second, that'll be more 
than enough for good repeatability, no fancy-named algorithms required!

Of course, since you're using an Arduino, you could also do some 
datalogging, and empirically determine the difference in temperature 
profiles from a 1-Hz on/off thermostat versus a PWM approach.  I for 
one, in addition to welcoming our new Arduino-controlled 
coffee-bean-roaster overlords, would be interested to see if the 
difference is appreciable.

Cheers,
-Brian




More information about the TriEmbed mailing list