This is part 7 of my reflow controller series.
Reflow soldering is a pretty simple process. Take a PCB, add solder paste, place components, and then let the whole thing go through a controlled reflow termperature profile. As I’ve described before.
In my (limited) experience, these temperature profiles are not nearly as critical as one might expect. Just preheat the thing while staying under the melting point of solder, then ramp up and keep it all well over the melting point for a while. Not too high and not too long, so nothing gets damaged. Then let it cool down. That’s basically it.
I’m going to use the following profile to start with:
- do nothing for 10 seconds
- heat up to 140°C
- stay there for at least 30 seconds
- heat up to 170°C
- stay there for another 20 seconds
- heat up to 250°C
- stay there for 15 seconds
- turn off and open up the grill for fast cool down
- the finished board can be removed when under 150°C or so
In code:
I’m staying a bit longer at the high temperature because my grill is a bit uneven in its temperature distribution. I want the cooler spots to work properly as well. Hopefully that won’t damage anything.
So how do you go from a thermostat to a reflow controller? Simple: implement the profile. I added a RunProfile proc, which keeps calling itself over and over again, so it behaves like a background process. Its task is to adjust the target variable over time to match the requested reflow profile. When a step has been completed, it will be removed from the front of the profile list:
RunProfile is called in start, right after calling InitPlot.
Ok, let’s try it:
Hey, this is starting to look like something!
I changed the colors a bit and am now also plotting the target temperature for reference.
Latest source code available here.
But all is not well. While trying this out, I noticed that the current setup hangs once in a while. No more incoming data, so the plot and the control stops. I suspect that there’s an occasional conflict between sending out OOK commands and handling incoming packets – perhaps a bug in RF12demo. I worked around this by omitting all the redundant OOK commands.
There was also another case where the last temperature target was set, but the heater wouldn’t get turned on, i.e. HeaterControl returning 0.
So… progress, but not finished yet!
You have the patience of a saint! I would have given up on the OOK control of the mains power and thrown a triac at the problem by now!
I can see this exercise is fascinating, but I must express that I prefere your old solution. ie temp measure – node – mains from a safty point of view.
your new systems is temp – node – radio link 1 – jeelink – pc – jeelink – radio link2 – mains.
thats an awful lot of unreliable link between temp measure and mains – what if it gets stuck on… melted chips
Oh, absolutely. I’m only using this approach to explore the algorithms, get some graphs, and find the proper way to do things. I can go through a lot more iterations this way, without having to upload anything (the JeeNode is in fact on the other side of the room, running on a 3x AA pack).
Once that’s good enough, I intend to move everything over to create an autonomous battery-powered reflow controller.
I have no experience with reflow, but is fast cooldown from 250C a wise thing ? you might create cracks in chips or solder joints because the stuff expands when heated/shrinks when cooled.
everybody is a critic these days ;-)
The above graph seems to indicate around 5°C/sec.
I think 3°C/sec is the advised rate. The grill I use is still hot, so opening it up doesn’t cause that much of an abrupt change. Don’t have any fact so to back me up, though. If it becomes an issue, I could put a metal mesh over the whole thing, so that the bare parts aren’t exposed to cold air right away.
Or perhaps just open it up more slowly…