Toaster Oven Reflow Technique

From RepRapWiki
Jump to: navigation, search

Crystal Clear action run.png
Toaster Oven Reflow

Release status: working

Smt-ga.jpg
Description reflow solder surface mount printed circuits
License GPL
Author Adrianbowyer
Based-on (nothing)
Categories none
CAD Models none
External Link none


Smt-ga.jpg

See also HotplateReflowTechnique.

Contents

Introduction

Sb-smt.jpg

This page describes how to reflow solder surface mount printed circuits using a cheap toaster oven. It owes a great deal to Nophead's Cooking with Hydraraptor blog post.

The picture shows Sally Bowyer (Director, RepRapPro Ltd) preparing components for soldering in the oven. For more instructions on this see the video at the bottom of this page.

Safety

This uses mains electricity, which will kill you if you touch it. So don't.

It makes things hot (solder melting temperatures), which will burn you if you touch them. So don't.

Solder contains lead. Lead is bad for you. Don't use the oven you use for this for food.


Equipment

Toaster-oven.jpg

The toaster oven we use is this 900W one from Argos in the UK. It costs £25.

Just about any toaster oven will do, as long as its power rating is not too high. The solid-state relay (see below) can switch 5A; power = volts x amps; do the mathematics...

Try to get one with quartz halogen heaters though - these respond very fast to being switched on and off, which is good.


Arduino.jpg

You will also need an Arduino to control it. Just about any Arduino will do; we use the Arduino Diecimila, because we happened to have a few lying about.

Finally, you need a solid-state relay so the Arduino can turn the oven on and off, and a temperature sensor that will do up to 250oC.

We use this solid-state relay from Farnell, and a K-type thermocouple plus thermocouple amplifier (see below). Alternatively you could use the same types of thermistors that RepRap uses for its extruders as temperature sensors - the temperatures are about the same.


Control

Thermocouple 1.0 schematic.png

This is the circuit diagram of the thermocouple amplifier. IC1 is an AD595. It needs a Type K thermocouple.

MakerBot sell a kit for the amplifier here.

The thermocouple connects to pins 1 and 14. You can't solder thermocouple wire, so have a screw connector for those pins.

If you get silly temperatures reported by the firmware (see below) or the warning LED lights, then the thermocouple wires are the wrong way round. Swap them.

JP1 connects to the Arduino:

  • JP1 pin 1 -> Arduino +5v.
  • JP1 pin 2 -> Arduino A0.
  • JP1 pin 3 -> Arduino Ground.

If you get noise problems on the temperature signal, solder a 100uF capacitor between Vcc and ground. Take care to get the capacitor polarity right.


Ss-relay.jpg

The solid-state relay has four connections. Two go in series with the mains live wire. The other two turn the mains current on and off.

The neatest thing to do with the solid-state relay is to mount it inside a mains plug patress box. You will then have a general-purpose device that will allow you to control any mains load (up to 5A) with the Arduino. Run the control wires out of the side of the box and connect them to the Arduino: + goes to the Arduino LED (D13 on an Arduino Diecimila), the other control connection goes to the Arduino ground.

Note that there is no electrical connection inside the solid-state relay between the control circuit and the mains circuit. The device is optically coupled, so there is no danger that you will get mains flowing through your Arduino (as long as you wire things up right...).



Ss-relay-etc.jpg

The picture shows the control system, which is all screwed down to a small wood plank.

On the left is the electric socket. This is open so you can see the solid-state relay mounted inside.

Run a mains cable with a plug on the end into the electric socket to power the oven.

Put the relay's switched side in series with the cable's live wire on the way to the live terminal of the socket; run the neutral and earth straight through to their socket terminals. Insulate any exposed live connections carefully with heat-shrink. Run two wires from the control pins to the Arduino as described above. Colour code them so you can remember which one is + when the electric socket is put back together.

In the middle is the Arduino, and on the right is the thermocouple amplifier.


Firmware

Here is the Arduino control program. This has an inbuilt temperature vs. time profile that it follows. The basic rules are:

  1. heat up to 150oC - this is the flux activation temperature
  2. heat up more slowly to 183oC - this is the solder's melting point
  3. heat up faster to 215oC - this is the reflow temperature
  4. cool

The timings are not too critical, but you don't want the components to stay at the highest temperature for too long. The highest temperature is set to 215oC, but you will find that this overshoots a bit to 220oC, which is the actual temperature you want.

/*

  Toaster Oven SMT soldering control
  
  Adrian Bowyer
  
  2 November 2011
  
  Licence: GPL
  
*/

const int heatPin =  13;     // the number of the LED pin.  This also controls the heater
int heatState = LOW;         // heatState used to set the LED and heater
long previousMillis = 0;     // will store last time LED/heater was updated
const long interval = 1000;  // interval at which to sample temperature (milliseconds)
const int tempPin = 0;       // Analogue pin for temperature reading
long time = 0;               // Time since start in seconds
bool done=false;             // Flag to indicate that the process has finished

// The temperature/time profile as {secs, temp}
// This profile is linearly interpolated to get the required temperature at any time.
// PLEN is the number of entries
#define PLEN 6
long profile[PLEN][2] = { {0, 15}, {120, 150}, {220, 183}, {280, 215}, {320, 183}, {350, 0} };

// Linearly interpolate the profile for the current time in secs, t

int target(long t)
{
  if(t <= profile[0][0])
   return profile[0][1];
  if(t >= profile[PLEN-1][0])
  {
   done = true; // We are off the end of the time curve
   return profile[PLEN-1][1];
  }
  for(int i = 1; i < PLEN-1; i++)
  {
     if(t <= profile[i][0])
       return (int)(profile[i-1][1] + ((t - profile[i-1][0])*(profile[i][1] - profile[i-1][1]))/
         (profile[i][0] - profile[i-1][0]));
  }
  return 0;
}

// Measure the actual temperature from the thermocouple

int temperature()
{
 return ( 5.0 * analogRead(tempPin) * 100.0) / 1024.0;
}

// Get the show on the road

void setup() {

  pinMode(heatPin, OUTPUT); 
  pinMode(tempPin, INPUT);  
  Serial.begin(9600);
  Serial.println("\n\n\nTime, target, temp"); 
  done = false;
}

// Go round and round

void loop()
{
  int t;
  unsigned long currentMillis = millis();
 
  if(currentMillis - previousMillis > interval) 
  {
    previousMillis = currentMillis; // set next time 
    
    // Get the actual temperature
    
    t = temperature();
    
    // One second has passed
    
    time++;   
    
    // Find the target temperature
    
    int tg = target(time);
    
    // Simple bang-bang temperature control
    
    if (t < tg)
    {
      heatState = HIGH;
    } else
    {
      heatState = LOW;
    }

    // Turn the heater on or off (and the LED)
    digitalWrite(heatPin, heatState);
    
    // Keep the user amused
    if(done)
    {
      Serial.print((char)0x07);  // Bell to wake the user up...
      Serial.print((char)0x07);
      Serial.print("FINISHED ");
    }
    Serial.print(time);
    Serial.print(", ");
    Serial.print(tg);
    Serial.print(", ");
    Serial.println(t);
  }
}



Upload the firmware above into the Arduino.

Operation

Plug the controller into a mains socket that is, for the moment, switched off.

Plug the oven into the controller.

Connect the Arduino to a computer via a USB cable. You can use the terminal emulator in the Arduino development environment to monitor what is going on, or you can use stand-alone programs like Miniterm (Linux) and Hyperterminal (Windows).

Tape the thermocouple to a part of the PCB where it won't interfere with the components using Kapton tape.

Place the PCB on the shelf in the middle of the oven.

Close the oven door on the thermocouple lead, taking care that there is slack thermocouple lead in the oven so the PCB doesn't move when you do this.

Hold the reset button on the Arduino down, then turn on the mains power.

Let the reset button go.

The device should cycle through its range of temperatures and solder your board.

The oven won't cool as fast as the control curve demands, so open the door when the temperature is on its way down and the target temperature drops below 200oC.

Don't move the PCB until its temperature gets down to around 150oC. If you move it while the solder is still molten the components may shift.

You will find that the temperature lags behind the profile at the start (up to around 100oC), especially for large PCBs. This doesn't matter; it's the higher temperatures that are important, and the oven and controller will follow those quite faithfully.

You may want to use a bit of scrap board the very first time you try it, as a test.

If you are doing lots of boards, you can just press the reset button after you put each one in the oven. When each board is finished the controller will keep the oven switched off until you next press reset.

Video