My new controller board is complete and has been delivering good coffee for several months now.
Here are some of the improvements:
- Much better provision for heatsinking the TRIACs. With an option to use water cooling (as it turns out I haven’t needed it, but it would definitely mean no more TRIAC overheating ever if I implemented it).
- Potential to use thermocouple or NTC temperature probes.
- Up to 3 temperature probes. This would allow for an algorithm to correctly control water flow rate when steaming and still give a spare probe (maybe to check the TRIACs don’t overheat or for a Gaggia Baby Twin steam boiler).
- Water level probe.
- Support for Gaggia Baby Twin steam boiler. (Extra temperature input and drive TRIAC).
- Louder piezo buzzer.
- 5V and GND exposed via pins for add-ons.
- TWI interface available. (Rather than using the pins for something else as I did previously!). This allows communication with add-ons and (yay!) also with the Baby Twin front panel.
- Power doubling is now done on-board so no external diodes needed. (This is why there are now five TRIACs, one for the steam boiler, one for each element of the main boiler and one for each of the pump and solenoid.)
- Better solution for mounting the board in the coffee machine (assuming you have a Gaggia Baby – any volunteers to do a Gaggia Classic PCB layout?).
- The transformer’s pinouts are arranged so that 120VAC transformers can be used for my coffee modding friends in the USA. (Whilst also still being able to use a 240VAC transformer as well of course.)
The rev2 schematic is coffeepidshield.pdf. Gerber files are here. Eagle files are here. Have a look particularly at DesignNotes.txt in the Eagle files zip for a mine of information. Or get the most up to date info at GitHub.
If you are in the USA or on another 120VAC mains supply, you might find it this bill of materials helpful.
Here’s a picture of the PCB:
The board is sized to fit where the Gaggia Baby Twin’s PCB mounting bracket lives along the left hand side of the top boiler housing. Here’s a picture of it in place:
That’s a bit busy so here’s an old bit of PCB giving an idea of the location:
The mounting posts for the Twin PCB bracket help to locate it and I have also bolted the PCB to that nice bit of clear base plate with the heatsink. (Note: those mounting posts break off really easily and are best not to be trusted!) I still need to implement some kind of plastic backing plate to this board to insulate the exposed mains voltage solder pads.
The heatsink is a copper plate I bolted over the TRIACs and bent 90° so it stands flat and doubles as a mounting bracket for the whole board. There is space on the face of the heatsink for a 40mm x 40mm water-cooled CPU heatsink. This could be cooled by water as it flows from the reservoir to the pump. I have found that the ceramic heatsink pictured above seems to be enough though.
Here’s a picture of the water-cooled heatsink and the pristine copper sheet (still in plastic film):
And here’s the finished product before mounting (I loved the colour of the copper so I sprayed it with lacquer to keep it from oxidising):
In commissioning, I found the following errors (despite very carefully checking everything over, there are somehow always errors when the board has actually been printed!).
- R43 is specced as being able to drop 400V but is an 0803 component – no such resistor exists! I have a workaround mod to the board to handle this.
- R43 and C26 form an RLC circuit with the inductance in the mains wiring and PCB tracks. If the inductance is high enough (and it can be in a normal scenario), this circuit can have oscillations with a peak voltage way above than the 340V mains peak1Caused by the inrush current if you switch on in the middle of a mains cycle.. This caused a catastrophic failure for me2A lot of arcing and multiple vaporised tracks. This was a sub-optimal outcome.. Replacing R43 with a 100R resistor overdamps the RLC circuit and prevents these peaks. Also, putting a metal oxide varistor across Live and Neutral absorbs spikes and prevents arcing.
- IC2 is connected to PMPSW instead of STMSW. IC2 changes the temperature range measured by the temperature probe so you can have one range for steam mode and another range for brewing mode. I meant it to be connected to STMSW! I have also decided that it was dumb to do this anyway and I am now driving PMPSW from firmware to control IC2 and have connected the pump switch to one of the DIGITALIO pins instead (the Arduino’s D10 pin).
This picture shows the R43 workaround and also the consequences of the over-voltage event.
Anyway, look out for a rev2.1 design at some point.