Open Rework Controller (ORC)

PCB and PC Host software for controlling an infrared rework station

Similar projects worth following
This project was born out of the need for proper functionality of a cheap IR rework station I bought. The goal is to expand functionality with a drop-in compatible PCB, and add support for a computer host program in order to allow reflow curves to be followed. The hardware and software should be generic enough to allow use with other rework stations, and possibly ovens.

Primary features will include:
- ATMEGA Microcontroller running PID algorithms for temperature control.
- Support for standard Hitachi LCD for display and feedback
- 2-4 channels of PWM control for TRIACs, driven by the microcontroller
- Zero-crossing detector input into microcontroller, for proper TRIAC operation
- 2-4 channels of thermocouple temperature input, fed into the PID, and linked with the PWM output
- FT232 uplink to host computer
- Windows (possibly linux) host software for creation of temperature profiles
- Drop-in PCB compatible with Puhui T-870a IR Rework station

A while back, I purchased an IR rework station.  I'd had the need to reball some BGA devices, and selected the Puhui T870a IR rework station.

Really, words can't describe how bad this station is.  The thermocouples read different temperatures for the same area, one read room temperature at 46C!  It lacks any sort of ramp control, you merely set the target temperature and then it reaches it, slowly.

Wanting to make the most out of the cash I dropped on this sucker, I opened it up to find this:

The main show is run by an STM8 series microcontroller (little brother of the popular STM32).

Major components include:
Triacs for controlling the lamp and bed
Optoisolators for controlling the triacs
Opamp circuit for thermocouples
7-segment LED display
5V regulators
Zero-crossing detection circuit

The replacement system will include much of this, plus a method of computer linkup, in order to allow for ramp generation and reflow profiles.

The goal is to develop a complete drop-in replacement pcb with linkup software.
The new system will run on an ATMEGA324, programmed in C.

System Design:

The ATMEGA324 runs a PID algorithm, and accepts commands from PC Host software via USB.
Additionally, the microcontroller is periodically taking temperature measurements with the ADS1118 ADC and thermocouples.
This temperature data is fed into the PID algorithm, along with target temperatures from the command parser.  120VAC is fed into the zero-crossing detector circuit, which generates a pulse on every zero-crossing.  The output of that is fed into interrupts and used to trigger an internal timer.  The timer is used in conjunction with the output of the PID algorithm to determine the turn on time and on duration of the heat bed and IR lamp.  Additionally, a Hitachi-compatible character lcd will be attached for displaying back the current temperatures and setpoints to the user.  Future support for off-the-shelf soldering irons is planned.

  • 1 × ATMEGA324 Microcontroller
  • 2 × MOC3021 Optocoupler
  • 1 × 78L05 Linear Voltage Regulator
  • 1 × ADS1118 Dual, Differential, 16-bit SPI ADC, with on-chip temperature sensor
  • 2 × BT139 TRIAC

View all 7 components

  • One shots and Zero Crossing Detector

    netbeard09/30/2015 at 03:50 0 comments

    I've been testing the one shot library, and the zero crossing detector, everything seems to be working perfectly!

    The blue trace is the output of the zero crossing detector, the yellow is the one shot output from OC0B.

    The blue goes low when the AC input is near or at 0 volts. This allows for the detection of both rising and falling crossings, though the distinction does not matter for this project.
    The yellow trace goes low to activate the opto-isolator and triac. Because the triac will not de-energize until a zero crossing (0V potential across its terminals), in order to have variable control we must activate the triac some variable time after the zero crossing.
    Because the AVR is triggering on the falling edge of the zero crossing, we can have the opto disabled before the zero crossing rises, and not have to worry about the triac being activated early.

    However, because the PID will require a steady timebase, we'll need to test if the fluctuating 60hz AC is stable enough to drive the calculations... That would make all of this quite easy, just recalculate the PID value on every INT0!

    The perfboard prototype! 120VAC is hardwired into the zero crossing circuit. The transformer is a stand-in for the huge toroid in the T-870a, and provides 10vac to the power supply section. The triac in the T-870a is connected via the crimp connectors and orange wires.

    With this setup, I was able to both dim an incandescent lamp, and "dim" a fan, as tests. Everything worked flawlessly, though this was a simple test of the one shots and INT0. The real test will come when integrating the PID into the mix.

  • Pulling my hair out!

    netbeard09/23/2015 at 03:46 0 comments

    My struggles with this continue, and I have no idea what the cause is.

    After some googling, it seems that there are a handful of possibilities, most of which I have ruled out.

    My only lead is that I was occasionally able to get the program to function properly once, while plugging and unplugging the usbASP. I wonder if it is causing some sort of reset loop, or if it is a problem with Windows.

    If I am unable to resolve this, I fear I will have to change hardware, which is not something I wish to do.

    My trusty STM32's I use at work have never had issues like these.....

  • Not diggin' AVR so much right now

    netbeard09/22/2015 at 05:08 0 comments

    I've been trying to get all the code together, but I keep running into unusual issues with the AVR. The code is doing some unusual bootloop, which started when trying to push floats via printf. Unless I find the cause I'll have to write my own float to string function.

  • It's not dead yet!

    netbeard08/17/2015 at 16:05 0 comments

    Personal life got in the way, plus lack of interest. Now back in full force!

    Finished soldering up a perfboard copy of the hardware design, which is a good thing because I discovered a few things I needed to change, more on that in the next post.

    Brief update is, hardware is solid so far, finished up code for the ADS1118, ran a calibration curve on the thermocouples (they're k-type, much to my surprise!), Finished writing a library to allow the usage of the '328's timers as one shots, thanks to an excellent write-up here. Also have external interrupts working using INT0, connected to the zero-crossing detector.

    I migrated to eclipse, using the eclipse-avr plugin with gcc support, though unfortunately it doesn't support gdb directly, I'll have to look into that, but so far I haven't needed it.

    There's a new BitBucket link to the repo, it was easier to make a new one rather than trying to retool the old one, since eclipse is kinda nasty when it comes to work spaces.

    What still remains is integrating all of the individual code components, everything works in isolation so far.

    Expect another update with pictures and more details very soon!

  • Added a few AVR libraries

    netbeard08/19/2014 at 15:12 0 comments

    I've uploaded a few old libraries I wrote to the Bitbucket.

    Haven't had time to test them yet, but they seem to be alright.

    Feel free to take a look/ridicule if you'd like.

  • Remaining steps

    netbeard08/19/2014 at 15:01 0 comments

    Outlined below are the remaining steps to have a functional prototype:


    -AVR code for handling interrupts(from zero-crossing) and timers

    -AVR code for communication with ADS1118 (I have a previous library I wrote for it)

    -AVR code for PWM output to the optoisolators

    -AVR code for serial communication (Libraries exist)

    -AVR code for LCD interface (Libraries exist)


    -Connect LCD

    -Research off-the-shelf soldering irons

    -Test ADC spi interface

    -I feel like I should throw some buttons and LEDs in there somewhere for good measure :)

  • Triac circuit works! (with video!)

    netbeard08/19/2014 at 04:29 0 comments

    The triac/optocoupler circuit works!  It ought to, considering how simple it is, but still, it's exciting!


  • Schematic up on Bitbucket!

    netbeard08/19/2014 at 04:19 0 comments

    I've uploaded the initial schematic to my Bitbucket.
    This includes the updated Zero-crossing detector, basic atmega324 support circuitry, and the optocoupler/triac circuit.

    This is very much a WIP, but please, let me know if you find any issues.

  • Zero-crossing detector

    netbeard08/18/2014 at 06:36 0 comments

    After some research and a good bit of tinkering/testing, I've settled on a design for the zero-crossing detector.

    The design is based off of the one at
    with some minor changes to fit what I had on hand.

    It produces very good results:

    The purpose of the zero-crossing detector is to permit phase-based control of the AC powered lamp and heatbed.  By knowing when the mains voltage is at zero, the controller can switch the AC on/off and have a variable phase drive.  If, for example, power were to be switched on for a few ms, the heat from the lamp would be very different if power came on it the trough of the AC, versus the crest.

View all 9 project logs

Enjoy this project?



wiktor wrote 12/28/2015 at 23:11 point

honestly I was hoping - that I will find here linux software solution for popular bga rework machines like ir6000, any chances for compatibility?

  Are you sure? yes | no

kepa1962 wrote 02/10/2015 at 08:06 point

Scheme of management brightness lamps

  Are you sure? yes | no

kepa1962 wrote 02/10/2015 at 08:04 point

The Scheme

Principiadbnaya Puhui T870a

 there is ?

  Are you sure? yes | no

kepa1962 wrote 01/17/2015 at 17:36 point

Principiadbnaya scheme Puhui T870a there is?

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates