For soldering electronic components I use a Tenma 21-10130 rework station, this is a rebadged Chinese model sold by Farnells under their own brand name it has a soldering iron and hot air station combined in the same box, for me it works well, does the job and is considerably cheaper than those from Hakko or Weller.

The only real problem are the controls, five small fiddly buttons on the front panel, something that appears to be common on all these ‘budget’ stations, while the temperature on the soldering iron only needs changing infrequently, the hot air temperature and flow need to be adjusted more regularly. I guess the manufacturers preference for buttons is to make the machine cheaper to produce.
Under The Cover
Removing the lid reveals the air pump, sundry tubes, a large control board and a fantastic selection of wires to discourage taking the whole thing properly to bits.

The onboard microcontroller is a PIC16F916, this is a 28 pin 8-bit 20MHz controller with 14Kb of program memory, 24 I/O pins and an integrated LCD driver.

Fortunately the connections for the front panel buttons can be just about reached with multimeter probes, and with the mains power disconnected, I was able to buzz out each switch and find where it went to on the PIC controller.
Button Connections | ||
26 | RB5 | Set Button |
25 | RB4 | Soldering Iron Power |
24 | RB3 | Hot Air Rework Power |
23 | RB2 | Down Button |
22 | RB1 | Up Button |
21 | RB0 | no connection |
20 | Vdd | 5 volts |
19 | Vss | Ground |
Breakout
To improve access to the microcontroller connections I built a breakout board to give me access to all the micro-controller pins via standard pin headers. On the side that plugs into the existing socket I mounted a load of 90 degree pin headers and on the other a standard DIP socket with the legs splayed out so I could surface mount it. The pin headers are little on the large side for plugging into a DIP socket so you need to check its fully engaged with the onboard socket when you push it in.



Rotary Controller

The rotary encoder I used is the SparkFun COM-10982 mainly because it is easy to panel mount, at this stage I have not used the builtin LED’s to add effects. This connects back to the controller board which has an ATtiny84 microcontroller to convert the encoder pulses into suitable button responses. There is also an opto-isolator for the button controls and a small DC-DC 3.3 volt power supply as I don’t know the power characteristics of the rework station. I took the 5v power for the controller from the same supply as for the PIC.

I programmed the controller so that pressing the encoder emulates the set button and cycles through the available settings; the temperatures for the iron and hot air as well as the air speed. Rotating the encoder adjusts whichever setting has been selected. In the code, the Soldering Iron Power button is shown (RW_IRN) as connected; it is not used, the LED flashes when the rotary encoder is turned, its a bit pointless as it can’t be seen once the cover is back on. I wrote this in the Arduino IDE.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
/* * ATtiny84 - Internal 8MHz * Vcc o 1 u 14 o GND * D10 PB0 o 2 13 o PA0 D0 - ROT_SW * D9 PB1 o 3 12 o PA1 D1 - ROT_A * PB3 o 4 11 o PA2 D2 - ROT_B * D8 PB2 o 5 10 o PA3 D3 - RW_SET * LED - D7 PA7 o 6 9 o PA4 D4 - RW_IRN * RW_UP - D6 PA6 o 7 7 o PA5 D5 - RW_DN */ #define ROT_A 1 #define ROT_B 2 #define ROT_SW 0 #define LED 7 #define RW_SET 3 #define RW_UP 6 #define RW_DN 5 const int buttonDelay = 14; boolean change=false; unsigned long curTime; unsigned long loopTime = 0; byte encSelect = 0; boolean prevRot = false; byte ledState = LOW; void controlPanel(byte pin) { digitalWrite(pin, HIGH); delay(buttonDelay); digitalWrite(pin, LOW); } void readEnc() { boolean encA = digitalRead(ROT_A); // Read encoder pins boolean encB = digitalRead(ROT_B); if((!encA) && (prevRot)) { if(encB) { encSelect = 1; // clockwise } else { encSelect = 2; // counter-clockwise } change=true; } prevRot = encA; } void readBtn() { boolean sw = digitalRead(ROT_SW); if (sw == false) { return; } while (digitalRead(ROT_SW) == HIGH) { delay(4); } encSelect = 3; change = true; } void setup() { delay(500); pinMode(LED, OUTPUT); pinMode(ROT_A, INPUT_PULLUP); pinMode(ROT_B, INPUT_PULLUP); pinMode(ROT_SW, INPUT); // Switches LOW pinMode(RW_SET, OUTPUT); pinMode(RW_UP, OUTPUT); pinMode(RW_DN, OUTPUT); digitalWrite(LED,LOW); digitalWrite(RW_SET,LOW); digitalWrite(RW_UP,LOW); digitalWrite(RW_DN,LOW); } void loop() { curTime = millis(); if(curTime >= (loopTime + 5) && change == false){ readBtn(); readEnc(); loopTime = curTime; } // when an encoder has been rotated if (change == true) { ledState = !(ledState); digitalWrite(LED, ledState); switch (encSelect) { case (1): controlPanel(RW_UP); break; case (2): controlPanel(RW_DN); break; case (3): controlPanel(RW_SET); break; } change = false; encSelect = 0; } } |
There is not much free space available on the front panel of the station, the encoder can only be mounted between the connection for the soldering iron and the mains switch. I have mounted the controller circuit board on the rear panel.

Limitations
One of the problems with this rotary encoder is when its turned too quickly it gets confused and can skip pulses or operate in reverse.
Also, the speed of change is limited, the PIC controller will only see so many pulses per second, I got this down to 14ms anything lower and it was unreliable, probably this is part of some code to detect button bounce, so a fairly long pause between each button press needs to be made.
Improvements
A few improvements could be made to the rework station that could mostly be implemented in the PIC software. Those that have occurred to me are; the control for the air speed only needs to go from one to eleven, slow, medium and fast, the speed currently goes between 20 and 100 and changing the speed can be rather slow. Some sort of velocity control on the rotary encoder so the faster its is turned the greater the amount of change in the temperature. An auto-off function for the iron, so when its back in the cradle it cools down and preserves the life of the soldering tip and, most importantly, a volume control for the annoying buzzer.
I have written more extensively about the main board hardware in this teardown.
Links and Sources
- Farnell UK: Tenma 21-10130 UK+EU – Rework Station, 500oC, 220 V
- Datasheet: PIC16F916
- Hobbytronics, UK Parts Supplier