Talking PCB reflow oven

After finishing my first Enigma machine replica I was considering making a 2nd replica, but using optical encoders instead of mechanical ones (with pogo pins). The optical encryption rotors in mind would have 7 electrical components per letter, times 26 letters, that’s 182 components per rotor. That’s a lot to solder by hand! Using PCB reflow could speed up the process, right? :)  But for that, I needed a reflow oven, and the plethora of YouTube vids, Instructables articles, and even several existing reflow controllers suggested that building one at home was quite doable. So why not add yet another one to the huge pile of existing ones?

Based on the recommendations from existing projects a good oven has volume about 15 liters or smaller, with at least 1200W of power or more, people usually buy ones from Aldi or similar we-have-it-all stores, but since that is not available around here, I’ve decided to go with Silvercrest SGB 1200 B5 oven from Lidl, which usually costs about 60 euro, but can sometimes be found for 40 euro.

 

From oven for food to oven for electronics

The first step is to open up the oven, strip away any existing regulator and see where would you place your own controller.

IMG_20241015_130359811

There are existing reflow oven controllers that can be bought online for 100+ Euros, but if you’re skilled enough then all you need is:

  • an Arduino (clone)
  • solid state relay (with at least twice the switching power of the heating elements your oven has)
  • K-type thermocouple with ADC chip like MAX6675
  • some display (mine’s 8 seven-segments display driven by MAX7219)
  • a audio playback module if you’re too lazy or in a hurry, but also too silly to have one (I’ve used MP3-TF-16P – df mini player) and a suitable speaker

IMG_20241020_125748396

IMG_20241020_125757054

I’ve designed and 3D printed a front panel for the display, speaker, button and two LEDs (power-is-on LED and heating-the-elements LED). I’ve reused part of the plastic from the original oven controlling part, so I wouldn’t have to measure and print everything, only the front part.

IMG_20241027_110609921

You should also add some heat insulation to the insides of your oven so the heating of the oven is faster, temperature more stable, and the outsides of your oven cooler. Just be sure not to let any live wire touch the metallic parts of the oven, or what happens next might shock you! :-D

Also, in the name of ‘I can build it cheaper’, I had to be creative on where to get the insulation. Yes, you could buy a roll of new insulation, but that’s like 35 euro and you would use only use a little bit of it, so not great. I’ve turned to local second hand page, looked up few offers cheaper and smaller amounts, and I’ve also found a guy who was giving away for free a sack of insulation pieces – basically garbage from his construction site, so I’ve decided to get that one. I’ve used only a couple of pieces from that bag and driven the test to local trash storage.

IMG_20241026_120835250

 

The oven control firmware

The development of the control firmware should be easy, right? Just measure the temperature in a loop, turn on the heating elements when the actual temperature is at least 5 °C lower than the desired temperature, and you’re good to go, right? Well, wrong… I didn’t realize this before trying this, it’s obvious when you look at any other similar oven with resistive heating elements, but you don’t fully realize it until you need the fast heating up of the oven… When you turn on your oven, it takes about a minute (or more) of continous current through the heating elements to turn them from black to glowing red. Until they are glowing red, they do not produce much heat, but once they are red, they produce a lot of heat. And once you reach your desired temperature (e.g. 150 °C) and you turn the heating elements off, there’s a lot of momentum there – the temperature can then rise from 150 °C to 220 °C, even though it’s already off for a minute, and that’s a huge overshoot compared to the ideal reflow curve.

Yes, ideally you should do some measurements on how fast the temperature rises, how much momentum there is, do some math or simulations and come up with good values into your PID controller, but this was supposed to be a quick project – just a sidequest, not academic project on re-learning PID controllers tuning – I remember we did something like that about 25 years ago on my technical secondary school, but that’s way too back… Or I could try to come up with the PID values by trial and error, but there’s got to be a simpler way, right?

Another thing I’ve tried was to use PWM. Set some very low pwm frequency, like 10 Hz, so it still would work with the 50 Hz mains current, and see what PWM duty cycle produces what final temperature if I let it settle long enough… Like, if I get 100 °C for 30% duty cycle, then I’ll just figure out what duty cycle I need for 150 °C, 200 °C, 230 °C, and we’re done. At least that was my expectation. So I’ve started with 30% duty cycle, and the temperature was rising slowly to about 200 °C, if I let it. So clearly 30% was too much, but what about 20%, or 10%? Well, if I let it run for long enough, they all would produce somewhere up to 200 °C – the lower duty cycle would get there slower, the higher duty cycle would get there faster, but it did not produce different levels of end temperatures as I first expected. I’ve tried this with 5% and even 1%, but still the result wasn’t a constant temperature output, it just got to the temperature slower or faster.

So instead I’ve decided to use the PWM duty cycle to determine the speed of heating, and the closer to the desired temperature the lower PWM duty cycle to heat slower and overshoot less, like this:

// Return duty cycle based on the closenes (difference) between desired and actual temperature.
// In the preheat and soak phase go slower
if(phase == PHASE_PREHEAT || phase == PHASE_SOAK) {
   if(diff > 40) return 100;
   if(diff > 30) return 66;
   if(diff > 20) return 33;
   return 15;
}
// In the reflow phase go faster
if(phase == PHASE_REFLOW) {
   if(diff > 10) return 100;
   if(diff > 7) return 66;
   if(diff > 4) return 33;
   return 15;
}

 

More heating elements

One additional thing I’ve tried is that I’ve added additional heating elements, but this time those were from a infrared heater, as they heat up much quicker – from dark to gloving red in like 10 seconds. The heat from these infrared elements was mostly radiant, while the resistive elements primarily heated the air through convection. The k-thermocouple being in a shiny steel enclosure probably reflected the radiated heat, so it measured mostly the temperature of the air without the radiated heat. So even though when the measured temperature showed around 200 °C, the test PCB started to burn! I’ve never seen this before! I unglugged the oven and and a cloud of pungent white smoke filled the room. I’ve opened the window and left the room, let it ventilate for couple of hours, but I couldn’t get the terrible smell to leave the room for next few days. I’ve decided to disconnect those infrared heating elements and stick to the original resistive ones.

IMG_20241028_043628595

 

First actual PCB reflow

When I ordered the PCBs, I’ve also ordered the stencil for the easier solder paste application. I’ve noticed that applying the solder paste wasn’t that easy and took few attempts to get a good results (why did I ever think one can be good with anything without trying and learning?). I’ve placed all the components on the PCB using tweezers, which was also more difficult than I’ve expected – a dedicated pick-and-place tool would do a better job than the tweezers.

The reflow went well—no burnt PCB or components. After the cooling down of the PCB I’ve inspected the PCB and it wasn’t great – some of the components were slighly shifted, few were out of place completely, and a couple were standing perpendicular to the PCB :-D Yeah, it looks easier in the YouTube videos. I’ve fixed all the issues with the soldering iron.

IMG_20241028_104553963

 

The oven that’s talking

As I didn’t want to fiddle around with creating the menu for the oven, I’ve decided that I’ll just let it play a couple of samples to let me know what is selected, what to press, what is about to happen. I’ve decided to use MP3-TF-16P – a df mini player clone for 3 Euros – a library for Arduino exists for this module, so this should be quick. But either the manual of this module is wrong, or this module clone doesn’t work exactly as the original manual says, so it took some moments to figure out the correct folders and files naming on the SD card to convince the module to cooperate. One source said the folder should be four digits and the file three digits, but according to forum users of this module it’s the exact opposite… But in the end I’ve figured it out, but I’m not sure which one was the correct option - I kept adding files to the SD card until it finally worked ;)

Yes, I could just store the raw samples in flash of the microcontroller and output the samples via another PWM, but it’s not that straightforward with Arduino environment, and if I would skip Arduino environment, I could end up the hassle of setting up the timers and PWMs and interrupts all alone, which sounded like too much of a effort for a joke feature on a sidequest project.

 

Hear it talk


 

Comments are closed.