NOTE: For a larger version with a bigger hot plate and improved cooling see SMD Reflow Hot Plate (new version)
Over the years, electronic components have changed both in terms of size and also their footprint. More and more designs incorporate or solely use surface mount components (SMD) rather than the more bulky through hole components. In the assembly of printed circuit boards, pick-and-place machines replace the older insertion machines. They are faster and more versatile. SMD components also use less solder.
One of the down-sides of SMD components is when they are heated too quickly, water vapour that may have penetrated the component over time, may turn into steam and damage it. SMD components need to be heated firstly to a soak temperature to allow any water vapour to escape and also to allow the flux in the solder to activate. After around 90 seconds at the soak temperature (usually around 150°C), the temperature is raised to the melting temperature of the solder (usually around 240°C). The melting temperature only lasts for around 20 seconds maximum otherwise there is a risk of damaging the component. After that the component is allowed to cool slowly. Too fast a cool down period can cause extra stress on the component resulting in internal damage.
DemonstrationCase design3D printing with material that melts at 180°C makes designing a case for a heating element that can exceed 250°C a challenge. The heating element must be isolated from the case as much as possible. The element itself is mounted on a single sided PCB using 25mm pillars. This is screwed onto the bottom of the case using 4 x M3 6mm screws.
Next heat insulation material is used to cover the base and also the hole in the top of the case. I used "Car Soundproofing Deadening Mat Heat Sound Insulation Cotton Firewall Auto Hood Door Deadener 25x50cm 5mm Foam" from Ali-Express. (About AU2.80).
I also glued on a heatsink to the heating element using thermal glue. I'm not sure whether this makes a difference but the idea was that it provided more area so that the fan would be able to cool the plate quicker. Also I added the 100k ohm NTC 3950 Thermistor (also from AliExpress) in the hole where the element is and held it in place with Kapon high temperature tape. Finally I countersunk the holes so that if the PCB that is being heated is larger than the heating plate, the screw heads won't lift the PCB off the surface.
The rest of the case follows a clam shell design.
3D printingAll printing is done using a 0.2mm layer height with no supports. The top, front, text and back pieces will need rotating on the built plate before slicing.
The first 3 layers of "SHP - Text.stl" is printed using the front base color and switches to a contrasting color at the start of layer 4. Join "SHP - Text.stl" to "SHP - Front.stl" using double-sided tape.
CircuitThe design of the electronics are based around a ATtiny1614 microprocessor and a 1.8in TFT SPI display.
The heating element is controlled using a solid state relay. My previous version used a mechanical relay but I found that the element at full power heated way too quickly and overshot the desired value by 20 degrees or more. By using a solid state relay, PWM can be used to control the power to the heating element.
My previous design had the fan only switch on when it needed to cool the plate but its impact on the cooling the hot plate is limited. So now I have it on continuously when the temperature of the plate is more than 10 degrees over the ambient temperature.
The unit is controlled by two buttons:
SELECT: When in STOPPED mode, it will select the heat curve to use. In PAUSED mode, it will abandon the current heat curve.
START: When in RUNNING mode, it will pause the at the current temperature in the heat curve and maintain that temperature until the START button is pressed again. In STOPPED mode, it will start the displayed heat curve from the beginning.
AssemblyNote: some of the images are from by V2 build which used a mechanical relay. The assembly process regardless of version remains the same.
I have included the Eagle files in case you want to get the board commercially made or do as I did and make it yourself. I used the Toner method.
Start by adding the SMD components
Add any links if your board is single sided
Add the 220 ohm through-hole resistor.
Add the two right-angle KF2510 2.54mm 2-pin male connectors for the power and heater connections
Add the two 12x12mm tactile switches
Add the female 2.54mm Dupont header for the display
Add the solid state relay. It lies flat on the PCB.
3D print "SHP - TFT Spacers.stl" and super glue them to the board.
Plug in the 1.8in TFT display.
Add the 240VAC to 5VDC 700mA module to the copper side of the board. Add a small amount of packing under the module so it doesn't short out on anything.
Add a plastic cover over the module so that the 240VAC sections are covered. This will help prevent any accidental touching of the high voltage section. However be aware that you are dealing with mains voltages so be very careful.
Add 2.54mm male Dupont headers on the copper side of the PCB. If you use a header on a single sided board, here is the method I use to add them.
Place header on PCB with longer pin side down, solder pins, push black plastic down towards the PCB.
3D print "SHP - Button Extender.stl". Add the extenders to the buttons and push on the button tops.
Next place the LEDs in their holes but don't solder them yet. Make sure they are correctly orientated first.
Screw on the PCB to the front using 4 x M2 6mm screws.
Push the LEDs into their corresponding countersunk holes and solder them to the board. Cut off any access wire.
Next add the active buzzer. (A passive buzzer won't work).
Program the ATtiny1614 microprocessor. See next section.
The lugs on the clam shell can sometimes split on a 3D printed layer line when the screw is inserted. To protect against this, super glue a nylon washer to each lug.
Add the ambient temperature sensor to the front corner of the case. Stick the thermistor hard against one of the vent openings and hold it in place with a piece of tape.
Finally wire up the fan and mains socket.
When joining the clam shells, put the hot plate through the hole in the top, screw the shells together using 4 x M3 6mm screws and finally screw the hot plate to the pillars using 4 x M3 6mm countersunk or flat-head screws.
The finished unit.
The software makes use of the attached thermistor library by Miguel Angel Califa Urquiza.
The software can hold any number of heat curves. A plot is a series of six pairs of temperature and time values. The time is the number of seconds from the start to when that temperature should be reached. A temperature of zero will be considered the end of the heat curve and any other slots ignored.
Originally I had the tables in flash memory but because flash memory is very tight, I moved them to the static RAM (Data space).
If you add to the number of plots, don't forget to increase the NUMBER_OF_PLOTS definition and also append a reference to your new plot in the plots array.
#define TABLES_IN_DATA_SPACE
typedef struct {
int temp; //Temperature to reach
int period; //Seconds to reach temperature
} TARGET;
#define NUMBER_OF_PERIODS 6
#ifdef TABLES_IN_DATA_SPACE
const TARGET plot1[NUMBER_OF_PERIODS] = {{150,90},{150,180},{240,240},{240,260},{0,420},{0,0}};
const TARGET plot2[NUMBER_OF_PERIODS] = {{150,50},{180,140},{240,175},{240,185},{120,250},{0,350}};
const TARGET plot3[NUMBER_OF_PERIODS] = {{150,60},{200,120},{250,160},{250,190},{0,260},{0,0}};
#else
const TARGET plot1[NUMBER_OF_PERIODS] PROGMEM = {{150,90},{150,180},{240,240},{240,260},{0,420},{0,0}};
const TARGET plot2[NUMBER_OF_PERIODS] PROGMEM = {{150,50},{180,140},{240,175},{240,185},{120,250},{0,350}};
const TARGET plot3[NUMBER_OF_PERIODS] PROGMEM = {{150,60},{200,120},{250,160},{250,190},{0,260},{0,0}};
#endif
#define NUMBER_OF_PLOTS 3
const TARGET* plots[NUMBER_OF_PLOTS] = {plot1, plot2, plot3};
The other variable you may need to adjust is the MAX_PID_VALUE. If your hot plate can't reach the desired temperature, you can increase this value. It has a range of 0 to 255 and controls the maximum PWM ON period.
#define MAX_PID_VALUE 180 //Max PID value. You can change this.
Unlike the earlier ATtiny series such as the ATtiny85, the ATtiny1614 uses the RESET pin to program the CPU. To program it you need a UPDI programmer. I made one using a Arduino Nano. You can find complete build instructions at Create Your Own UPDI Programmer. It also contains the instructions for adding the megaTinyCore boards to your IDE.
Once the board has been installed in the IDE, select it from the Tools menu.
Select the ATtiny1614 board in your IDE
Select Board, chip, clock speed, COM port the Arduino Nano is connected and the programmer
The Programmer needs to be set to jtag2updi (megaTinyCore).
Open the sketch and upload it to the ATtiny1614.
ConclusionsBottom line - IT WORKS! 😄 - (I was expecting it to end in a big blob of plastic).
However there is room for improvement. The really issue is that the hot plate can't cool fast enough. While not a show-stopper, it does need a better way to dissipate the heat. Any ideas are most welcome.
Comments