Introduction: 858D SMD Hot Air Reflow Station Hack

I've got a small electronic lab, where I repair broken electronics and make some small hobby projects. Because there's more and more SMD stuff out there, it was time to get a proper SMD reflow station. I looked a bit around and found the 858D to be a very good station for its price. I also found an open source project launched by madworm (spitzenpfeil) in 2013 replacing the original 858D temperature controller by an ATmega micro. Due there’s no complete guide I decided to write one.

There are 4 different variants with different micros of the 858D out there sold under dozens of different brands.

The current model (April 2017) has got a MK1841D3 controller, and it’s the one I’m using. If you've got a different IC please check out the original thread on


1x - 858D Rework Station (of course), I got mine from Amazon for about 40€ ~ USD42

3x - MK1841D3 to ATMega PCB (by manianac, so all credits to him!), OSH Park, comes in package of 3, but you only need one

1x - ATMega328P VQFN Package

1x - LM358 or equivalent DFN8 Package

2x - 10KΩ resistor 0805 Package

2x - 1KΩ resistor 0805 Package

3x - 390Ω resistor 0805 Package

1x - 100kΩ resistor 0805 Package

1x - 1MΩ resistor 0805 Package

1x - 1Ω resistor 1206 Package

5x - 100nF capacitor 0603 Package

4x - 1µF capacitor 1206 Package

2x - 10K trimer 3364 Package

1x - LED Color of choice 0608 Package

1x 2x6 Header (ISP Programming)

1x IC socket adapter 20Pin

some Wire


1x Buzzer

2x additional heatsinks

1x HQ IC socket 20Pin

1x C14 Plug

Small neodymium magnets

Arduino "Hacked" Sticker


858D Rework Station (Not kidding)

Regular Soldering Iron / Station

Screwdrivers, tongs, tweezers


X-Actor Knife

Laboratory power supply with current limitation

Atmel Compatible ISP Programmer (STK500 or equivalent)


ESD mat and Wrist strap


ESD Brush

Solder Sucker

3D Printer

Isolation Transformer

Hot glue gun


Milling mashie or Jigsaw

Step 1: Assemble the PCB

If you’re working on Electrostatic sensitive devices you always need to bring you and your circuit to the same electrical potential to avoid damaging it. Before you start to take a part the station you need to assemble the PCB. Start by applying solder paste (or regular solder) to the pads on the upper side of the PCB and lay in place all SMD components, Stock plan for side 1:

R4= 1MΩ 0805 Package

R7= 1kΩ 0805 Package

R8= 1kΩ 0805 Package

R9= 10kΩ 0805 Package

C1= 100nF 0603 Package

C6= 100nF 0603 Package

C7= 100nF 0603 Package

C8= 100nF 0603 Package

C9= 1µF 1206 Package

VR1=10KΩ 3364 Package

VR2=10KΩ 3364 Package

D1= LED 0608 Package

U2= Atmega VQFN Package

Double-check the polarity of al components and reflow the PCB. Please note, on my pictures the LED is in the wrong direction! Repeat on the second side, Stock plan:

R1= 10KΩ 0805 Package

R2= 390Ω 0805 Package

R3= 390Ω 0805 Package

R5= 100KΩ 0805 Package

R6= 390Ω 0805 Package

C2= 1µF 1206 Package

C3= 100nF 0603 Package

C4= 1µF 1206 Package

C5= 1µF 1206 Package

U1= LM358 DFN8 Package

After cleaning away the Flux residues, solder on the ISP Header and the IC socket adapter, and make a solder bridge between the middle and the "GND" labeled pad.

Step 2: Testing and Programming

Next step is to test the PCB for shortcuts. The safest way to do that is by powering the circuit over a laboratory power supply setting the current limit to a few mA. If it passes without any shorts it’s time to program the micro. The latest (April 2017) version is 1.47 by raihei and can be downloaded here. It is based on madworm's latest "official" build, who is available on GitHub. Inside the downloaded .ZIP file there is a .ino file and a .h file who can be opened and compiled using ArduinoIDE or AtmelStudio (and VisualMicro Plugin), there are also pre compiled .Hex files who can be uploaded directly to the micro. Due it’s only possible to compile and not upload directly out of the ArduinoIDE im using AtmelStudio instead. If you want to use ArduinoIDE i'l show you how to use that later. But independently of what you are using, you have to modify some values. First two are inside the .h file. The two lines



Need to be commented out and instead the lines



Have to be commented in (or the values have to be changed). Second are the two out commended CPARAM lines who have to be copied and replace the two CPARAM lines inside the .ino File. Last change is TEMP_MULTIPLICATOR_DEFAULT in the .h file who sets the temperature multiplicator. This value depends on the type of the station. On the 230V model it should be around 21, on the 115V model around 23-24. This value have to be adjusted if the shown temperature does not match the measured one. They can also be chanced later directly on the station as the Fan Speed values. After changing those values its time to compile the code.

AtmelStudio: On AtmelStudio you can simply chose AtMega328 as micro, hit the Compile and Upload button and it should do the trick. In my case somehow it didn’t upload so I had to flash the hex file manually.

ArduinoIDE: On the ArduinoIDE compiling is a bit different as usual. Instead of simply hitting the Upload button you need to go to the Sketch tab and klick Export compiled Binary. After changing to the project folder you will find two hex files. One with bootloader and the other one without bootloader. The one without bootloader is the one we want. You can flash it using AtmelStudio, AVRdude or any other compatible software.

On both: After flashing the file you have to set the Fuses. You have to chance them to 0xDF HIGH, 0xE2 LOW and 0xFD EXTENDET. When the fuses are burned you can unplug the Programmer and the PCB.

Step 3: Disasembly

To the real Hack. Start by removing the four screws on the front, and the Front cover will come off. The internal of the station should look very similar to my one. After unplugging al wires, unscrewing the two screws on the PCB and the AIR knob on the front you will end whit the blank PCB. In the middle of the PCB there's the main MK1841D3 Controller IC in a DIP20 Package. It's the one were going to replace in this mod. Due it is socketed you could just replace it by the new board, but the original socket did not fit very well whit the DIP20 socket adapter, so I replaced it. On the PCB there are two more DIP8 IC, the one next to the MK1841D3 is a 2MB Serial EEPROM. It has to be removed too to make this mod work. The other one is just some sort of OPAmp, It has to stay. Just out of curiosity I put the EEPROM into my Universal Programmer and read it out. The Result is an almost empty binary file whit just "01 70" on Address 11 and 12. Probably the last set temperature. (Unfortunately I don't remember what the last set temperature was, but pretty Sure not 170°C, maybe 368°C?) Please be careful to not lift of the pads, because the copper does not stick very well on the PCB.

Step 4: Reassembling

After successfully replacing the IC socket and removing the EEPROM, you need to make one more modification, hack in the shunt resistor for the fan current. There's one track on the upper left corner of the solder side of the PCB who needs to be modified. It goes between C7 and the negative pin from the fan connector. After cutting the trace, scraping of the solder mask and soldering on the 1Ω resistor, you need to solder a wire to the negative fan pin, and the other side to the "FAN" labeled solder pad on the CPU PCB. Next optional step is to add the buzzer. To fit it to the PCB you need to bend the leads of the buzzer a bit and solder it to the PC4 connector. Plug back in all wires and proceed to the next step.

Step 5: Calibrate Fan Sensor

Now it's time power up the new controller for the first time and calibrate the fan sensor. Danger, you need to work on the mains powered PCB! So the safest way to do that is by powering the station over an isolation transformer. If you haven't got one you can also unplug the hot part of the control transformer from the main PCB, and wire it directly to mains power, to keep mains away from the PCB. Continue to solder a test wire to the positive pin of the LED, and connect it to an oscilloscope. Power on the station by holding down the UP button, and the station will start in FAN TEST mode. It will turn on the fan and display the raw ADC value on the display. Turn the fan knob to minimum and adjust the Vref trimmer until you have nice current pulses on the oscilloscope screen. Turn the FAN potentiometer to maximum and verify that there wavelength, but not the waveform changes. If the waveform changes, adjust the Vref trimmer, until you have the same pulses on min and on max. If it was successfully turn of the station and move the test lead from the positive LED pin to the left pin of the Gain potentiometer. Start the Fan-test-mode again and measure the voltage on the test lead. Adjust the Gain Trimmer until you get about 2,2V on MAX position. Now take a look at the display. The value should be around 900. Now install all of your nozzle one after the other to the hand piece and note the highest value on the display. Turn the FAN to minimum, and you should get a value around 200. Again try out all of your nozzles and note the smallest value. Turn off the station and turn it back on, this time keeping both buttons pressed. The station will start to setup mode. By pressing up and down you can increase/decrease the value, by pressing both you swap to the next menu point. Go to point "FSL" (FAN speed low) and set it to the lowest measured ADC Value (I set it to 150). Next point is "FSH"(FAN speed high). Set that one to the highest measured ADC Value (I set it to 950).

To the background: On the station there is no fan speed feedback, so if the FAN is blocked or there's a cable break the controller won’t recognize a fan fault and the heater may burns through. Because the fan has no tacho output, the best way to measure the fan speed is to add a shunt resistor and measure the frequency of the current pulses. Using an OPAmp and a high- and a low pass filter it is converted to a voltage who is fed in to the microcontroller. If the value goes under or over the set min/max levels the station won’t turn on the heater and give an error.

Because on my test the 5V regulator and the fan transistor got pretty hot, I decided to install small heatsinks to both of them. Turn off the station and reassemble the front panel.

Step 6: Optional: Chanche Plug and Improve Grounding

To the back panel. In my case the station had a to short power cord simply going out from the back panel. Because I didn’t liked that I decided to replace that by a C14 plug. If you want replace it too, start by removing unscrewing the back panel. The blue wire is joined together whit another wire by a to short piece of shrink tube. On the earth pin there’s a cable lug which is soldered and not crimped like it should, so if you don't replace the wire, at least remake it using crimping lugs. After removing the wire and unscrewing the fuse holder, it’s to make a hole for the new Plug. I used my milling machine to mill out the hole, but if you haven’t one you can cut it out using a jigsaw to. Reinstall and wire the fuse holder and the plug. The ground wire coming from the hand piece has a soldered cable lug as well, so it has to be redone to. I used flat cable lugs and screw terminal adapters to make it more easy to remove the frontpanel if I have to. Due there’s paint around the grounding / transformer mounting holes they do make a pretty bad connection to the case. The best way to fix it is by removing the paint around the holes using sanding paper. After reinstalling the back panel, measure the resistance between the case and the GND pin of the C14 Plug. It should be near 0Ω.

Step 7: Optional: Improve Handpiece

To the hand piece. After taking it a part I saw two things I didn't like. First: The connection between the heater element metal shell and the earth lead is made very poor. The wire is just wrapped around a metal bar spot welded to the metal shell. I tried to solder it together, but unfortunately the bar is made out of some sort of not-solderable metal, so I crimped it together instead. Second: On the wire outlet there’s no strain relief, so I put a cable tie around and tighten it up very well. This solution is definitely not the best one, but it is at least better than no strain relief. Reassemble the hand piece.

Step 8: Optional: Improve Cradle

Inside the cradle there are two small neodymium magnets, used to detect that the hand piece is inside the cradle. On my station I had some problems, because it did not recognize tool in cradle it in every tool position. I added some additional magnets to the cradle using hot glue, and the problems where gone. I also 3D printed out the nozzle holder by Sp0nge available on Thingiverse, and screw it to the cradle. The screws are a bit short, but if you’re not overtightening them they will do the trick.

Step 9: Finishing

There'se one final step left. Stick an Arduino "Hacked" sticker to the station and use it.

The Features of the new controller are:

More accurate temperature regulation

Station won’t start heating if hand piece is not inside the cradle during power up

Software calibration for temperature available (By pressing both buttons long)

Cold air mode (By pressing both buttons short)


Fully OpenSource (So you can ad/modify/remove features very easily)

Fan fault detection

Sleep mode (preset to 5 minutes, editable using parameter SLP)


Official EEVBlog thread

madworm (spitzenpfeil)'s Blog

madworm (spitzenpfeil)'s GitHub Page

Poorman's Electronic's Blog

Sp0nge's Nozzle Holder


amiir (author)2017-07-13

whats wrong with default temp controller ?

Gabse (author)amiir2017-07-23

nothing wrong with the original controller, but the new is quid more accurate (les
overshoots), and has some additional features including Cold air mode, and Fan
fault detection (all features are listed in step9)

SkualO_ (author)2017-05-24

Hi! Nice instructable, I like it. Recently I bought a YOUYUE 858D+ (I'm waiting for arrival) and now you make this and I am interested.

I have a few questions.

On Step 2, which tension you use for check the board? and what board you have for program the atmega?


Gabse (author)SkualO_2017-05-24

Hello, I’m glad you like it.
The test voltage is 5V. I'm using a Diamex AVR programmer, but you can use any ISP programmer (even Arduino as ISP)

About This Instructable




Bio: I am an 20 years old mechatronics and I’m living in the north of Italy. My interests are working on electronics, playing computer and ... More »
More by Gabse:858D SMD Hot Air Reflow Station HackAdjustable High Current Lab SMPS Out of a Standard ATX PSLaptoprecycling-Touchpad
Add instructable to: