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 EEVblog.com
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
1x BC547B or equivalent Transistor
1x 10KΩ 0.25W wired resistor
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
Laboratory power supply with current limitation
Atmel Compatible ISP Programmer (STK500 or equivalent)
ESD mat and Wrist strap
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. I made my one version based on 1.47 by raihei which can be downloaded from my GitHub Page. It is based on madworm's latest "official" build, who is also 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
#define FAN_SPEED_MIN_DEFAULT 120UL
#define FAN_SPEED_MAX_DEFAULT 320UL
Need to be commented out and instead the lines
// #define FAN_SPEED_MIN_DEFAULT 450UL
// #define FAN_SPEED_MAX_DEFAULT 800UL
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. This does NOT enable the Standard Current sense mode, because that uses pin A2 Instaed of A5, which is connented wrong on this Board! 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: Update: Maximum FAN Speed MOD
I have been using the station now since about a year, and was always quite happy with it. I only had one problem: the station does need quite long to cool down specially if you are soldering very small components using the small nozzle and a low airflow. So I played a bit around and found a way to make the fan speed switchable via software. The mod uses a transistor to short out the fan speed potentiometer. Best way to perform this hack is to solder the10K resistor to the Base pin, add a wire, and cover all leads using shrink tube. Next, short down the pins a bit and solder them through the hole to the existing components. To protect the transistor from moving, glue it down using some hot glue. Last is to connect the transistor base to the MOSI pin of the ATmega. I customized the software to switch this pin when the hand piece is put into the cradle until the tool is cooled down. Also the fan test uses this mode to get a stable reference. The Software is based on RaiHei's V1.47 and is available on My GitHub Page
Step 7: 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 8: 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 9: 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 10: 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)
Fast cool down mode
Fully OpenSource (So you can ad/modify/remove features very easily)
Fan fault detection
Sleep mode (preset to 10 minutes, editable using parameter SLP)