Help me with my Reflow Toster Oven Project

Chat about pick and place machines, reflow ovens, assembly techniques and other SMT tips & trix

Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.
Hamradio2008
 
Posts: 110
Joined: Sun Oct 10, 2010 4:37 pm

Help me with my Reflow Toster Oven Project

Post by Hamradio2008 »

Help me with reflow toaster oven project.
IMG_0001.jpg
IMG_0001.jpg (43.05 KiB) Viewed 6671 times
IMG_0001_1.jpg
IMG_0001_1.jpg (42.22 KiB) Viewed 6671 times
IMG_0002_1.jpg
IMG_0002_1.jpg (44.57 KiB) Viewed 6671 times
With both elements and the convection fan on continuously the oven temp will reach 205 deg C in about 4.5 minutes. So I am pretty sure that the it will get hot enough and fast enough. (top temperature is about 260 deg C with the convection fan running).

My first test was just to sequence thru the controls to verify the wiring. I hope to add a thermocouple and use PID control but I am just getting started.

Watch part 2 of YOUTUBE to see the toaster oven wiring dissected...
http://www.youtube.com/watch?v=kyphQ1WUIsk

Suggestions and any help greatly appreciated. I have tested the wiring to sequence thru the controls with this code, also you can see testing in progress on YOUTUBE...

Code: Select all

/*
  REFLOW TOASTER OVEN PROJECT 
  Toaster Oven = Delonghi Convection Toaster Oven Model ____
  Microcontroller Arduino UNO

  + */
/*Toaster  Oven control box with Arduino Un0
  Outputs 13 thru 11 opto isolated with 4N35 driving Relay FTR-H1CA012V 
  Normally Open Contacts switch oven cmomponents.
  Uoper Heating Element on Pin 13
  Lower Heating Element on Pin 12
  Convection Fan on pin 11
    + */
/*
  FOR TESTING PURPOSES
  Cycles Reflow Toaster control outputs 13 thru 11, repeatedly.

  Steady State Temperature achieved is 195 deg C
  
  + */


void setup() {                
  // initialize the digital pin as an output.
  // Pin 13 has an LED connected on most Arduino boards:
  pinMode(13, OUTPUT); 
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);   
}

void loop() {
  digitalWrite(13, HIGH);   // set the Upper Heating Element ON
  delay(15000);              // wait for a 1.5 sec
  digitalWrite(13, LOW);    // set the Upper Heating Element OFF
  delay(300);              // wait for a 0.3 sec
  digitalWrite(12, HIGH);   // set the Lower Heating Element ON
  delay(15000);              // wait for a 1.5 sec
  digitalWrite(12, LOW);    // set the Lower Heating Element OFF
  delay(300);              // wait for a 0.3 sec
  digitalWrite(11, HIGH);   // set the Convection Fan ON
  delay(5000);              // wait for a 1.5 sec
  digitalWrite(11, LOW);    // set the Convection Fan OFF
  delay(300);              // wait for a 0.3 sec
}
Watch part 3 of YOUTUBE to see this testing in progress...
http://www.youtube.com/watch?v=oo-6pZfI-Es

Hamradio2008
 
Posts: 110
Joined: Sun Oct 10, 2010 4:37 pm

Re: Help me with my Reflow Toster Oven Project

Post by Hamradio2008 »

This plot show the oven simply full "ON" both elements and convection fan with the optimum Kester 256 solder paste profile super imposed. The oven certainly achieves the peak temp but is heating up a slight bit slower. I am hoping that the oven profile can be modeled into the kester profile by programming the Arduino controller. To heat it up slightly faster the fan could be cycled off momentarily for example, also the oven in not insulated so this could also contribute to the slight lag. Additionally I am thinking that a minute longer soak time probably would not be harmful. Any comments, recommendations or experience with this please advise. Thanks :)
oven.temp.profile.1c.JPG
oven.temp.profile.1c.JPG (24.13 KiB) Viewed 6642 times

Hamradio2008
 
Posts: 110
Joined: Sun Oct 10, 2010 4:37 pm

Re: Help me with my Reflow Toster Oven Project

Post by Hamradio2008 »

I've added the adafruit MAX6675 thermocouple amplifier to the oven control box. Any good code for running it with a PID loop to control the heating element relays?
TC.added.to.control.box..jpg.jpg
TC.added.to.control.box..jpg.jpg (207.45 KiB) Viewed 6632 times

User avatar
adafruit_support_bill
 
Posts: 88088
Joined: Sat Feb 07, 2009 10:11 am

Re: Help me with my Reflow Toster Oven Project

Post by adafruit_support_bill »

You might have better luck posting this on the SMT forum. There are a few reflow toaster threads over there already:
http://forums.adafruit.com/viewforum.php?f=42

adafruit
 
Posts: 12151
Joined: Thu Apr 06, 2006 4:21 pm

Re: Help me with my Reflow Toster Oven Project

Post by adafruit »

we have a completely unfinished code base you can start with
http://github.com/adafruit/Reflowduino
its -completely- unfinished and -completely- unsupported. we'll have a tutorial in the future but not ETA on finishing it so you're a bit on your own :/

also check out br3tt's PID library

Hamradio2008
 
Posts: 110
Joined: Sun Oct 10, 2010 4:37 pm

Re: Help me with my Reflow Toster Oven Project

Post by Hamradio2008 »

I ran an initial set of code and logged the Thermocouple Temps every second.

Shown is the Adafruit type K thermocouple location in the oven...
Data.Logging.Thermocouple.In.Oven.jpg
Data.Logging.Thermocouple.In.Oven.jpg (138.57 KiB) Viewed 6604 times
Shown are results.
It appears that my first crack at the code is yielding pretty decent preheat, soak and reflow profile,,,
Preheat is from 0 to 90 seconds, ramp up to about 150 deg C
Soak is from 90 seconds to 180 seconds ramp from 150 deg C to 180 deg C
Reflow is from 180 seconds to 235 seconds ramp from 180 deg C to 222 deg C then hold at peak for about 10 seconds
Cooling is from 245 seconds on...
- Shown is temp logger results recorded every second and Plotted deg C vs. Seconds...
Temp.Logger.Reflow.Toster.Oven.Test.1b.jpg
Temp.Logger.Reflow.Toster.Oven.Test.1b.jpg (60.25 KiB) Viewed 6604 times
Any recommendations or comments please advise.

adafruit
 
Posts: 12151
Joined: Thu Apr 06, 2006 4:21 pm

Re: Help me with my Reflow Toster Oven Project

Post by adafruit »

looks good. you should run it :)

Hamradio2008
 
Posts: 110
Joined: Sun Oct 10, 2010 4:37 pm

Re: Help me with my Reflow Toster Oven Project

Post by Hamradio2008 »

Its close to the optimum.
IMG_Kester2560001.jpg
IMG_Kester2560001.jpg (41.87 KiB) Viewed 6601 times

Hamradio2008
 
Posts: 110
Joined: Sun Oct 10, 2010 4:37 pm

Re: Help me with my Reflow Toster Oven Project

Post by Hamradio2008 »

I have not actually run an SMD board thru the oven yet the preliminary test results on Oct 26 (Test.1b) look pretty good. At this point I feel using a PID loop is way over complicating the control, PID-is actually for analog control, Derivitive-action is for fast processes like pressure control not needed for slower processes like temperature control were ther is thermal capacitance.

Below is the ongoing thoughts for the Control PLAN that is a work in progress.

10/26/10-
1) Sequence to be initiated by momentary pushbutton1, and stopped but second momentary pushbutton2 at any time during sequence.
2) Divide reflow profile into 5 second intervals and control each element simple on/off for that interval. This first rather simple version of code will be based on just timing and some empirical testing to approximate the Kester temperature profile.
3) Ask the thermocouple to log the temperature into the computer for profile plotting.
4) use the thermocouple for proportional plus diced up integral action -- action and feedback as follows: "if below setpoint element on, if above setpoint element off, if statements incorporated into each 5 second interval and thereby in effect the diced up intervals acting as an integral component as well, deadband would also be required.

10/27/10-
Add Total of 7 I/O for operator interface.
1) add push buttons as follows: START CYCLE, STOP CYCLE at any point,
2) add indicators as follows: LED for preheat cycle, LED for soak cycle, LED for Reflow Cycle, LED for cooling cycle, Buzzer to open oven door (aids in rapid cooling) upon competion of reflow cycle.

Not all features of the Control PLAN have yet been incorporated into the code. The posted code below was used for the test run (Test.1b) plotted above in the orange background chart. I recognize that this code has some brute force aspects to it but it is served useful for the first test run Test.1b (above).

Code: Select all

/*
  REFLOW TOASTER OVEN PROJECT 
  Toaster Oven = Delonghi Convection Toaster Oven Model ____
  Microcontroller Arduino UNO
  Adafruit MAX6675 Thermocouple amplifier board w/type K Thermocouple
  + */
/*Toaster  Oven control box with Arduino UN0
  Outputs 13 thru 11 opto isolated with 4N35 driving Relay FTR-H1CA012V 
  Normally Open Contacts switch oven components.
  Upper Heating Element on Pin 13
  Lower Heating Element on Pin 12
  Convection Fan on pin 11
    + */
/*
  FOR TESTING PURPOSES
  Reflow Toaster control outputs 13 thru 11, are cycled in individual 15 or 30 
  second increments that are manually setup based on empirical and 
  graphical judgement to approximate the Kester reflow curve.
  
  + */

/*
    |  Approximate Kester 256 Reflow Profile
    |
250-|
    |
    |
    |                                     + +
    |                                   +     +
200-|                                  +       +  
    |                                 +         +
    |                               +            +
    |                        +                    +
    |                  +                           +
150-|---PREHEAT----|------SOAK-------|REFLOW|-----COOL-
    |             +                                 +
    |            +
    |           +
    |          +
100-|         +
    |        +
    |      +
    |     +
    |   +
050-|  +
    |+
    +
    |
    |
000--------------------------------------------------------
    |         |          |          |          |          |   
    0        1:00       2:00       3:00       4:00       5:00
 + */

void setup() {                
  // initialize the digital pin as an output.
  // Pin 13 has an LED connected on most Arduino boards:
  pinMode(13, OUTPUT); 
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);

}
void loop() {
  //***********************************************************   
  delay(15000);              // Stablize
  //***********************************************************  
  // interval 1 TIME 0:00 to 0:30
  digitalWrite(13, HIGH);   // set the Upper Heating Element
  digitalWrite(12, HIGH);   // set the Lower Heating Element
  digitalWrite(11, LOW);    // set the Convection Fan
  delay(30000);              // wait for a 30 sec
  //***********************************************************  
  // interval 2 TIME 0:30 to 1:00
  digitalWrite(13, HIGH);   // set the Upper Heating Element
  digitalWrite(12, HIGH);   // set the Lower Heating Element
  digitalWrite(11, HIGH);    // set the Convection Fan
  delay(30000);              // wait for a 30 sec
  //***********************************************************  
  // interval 3 TIME 1:00 to 1:15
  digitalWrite(13, HIGH);   // set the Upper Heating Element
  digitalWrite(12, HIGH);   // set the Lower Heating Element
  digitalWrite(11, LOW);    // set the Convection Fan
  delay(15000);              // wait for a 15 sec
  //***********************************************************  
  // interval 4 TIME 1:15 to 1:30
  digitalWrite(13, HIGH);   // set the Upper Heating Element
  digitalWrite(12, HIGH);   // set the Lower Heating Element
  digitalWrite(11, HIGH);    // set the Convection Fan
  delay(15000);              // wait for a 15 sec
  //***********************************************************  
  // interval 5 TIME 1:30 to 1:45
  digitalWrite(13, HIGH);   // set the Upper Heating Element
  digitalWrite(12, HIGH);   // set the Lower Heating Element
  digitalWrite(11, LOW);    // set the Convection Fan
  delay(15000);              // wait for a 15 sec
  //***********************************************************  
  // interval 6 TIME 1:45 to 2:00
  digitalWrite(13, LOW);   // set the Upper Heating Element
  digitalWrite(12, HIGH);   // set the Lower Heating Element
  digitalWrite(11, HIGH);    // set the Convection Fan
  delay(15000);              // wait for a 15 sec
  //***********************************************************  
  // interval 7 TIME 2:00 to 2:15
  digitalWrite(13, HIGH);   // set the Upper Heating Element
  digitalWrite(12, HIGH);   // set the Lower Heating Element
  digitalWrite(11, HIGH);    // set the Convection Fan
  delay(15000);              // wait for a 15 sec
  //***********************************************************  
  // interval 8 TIME 2:15 to 2:30
  digitalWrite(13, LOW);   // set the Upper Heating Element
  digitalWrite(12, HIGH);   // set the Lower Heating Element
  digitalWrite(11, HIGH);    // set the Convection Fan
  delay(15000);              // wait for a 15 sec
  //***********************************************************  
  // interval 9 TIME 2:30 to 2:45
  digitalWrite(13, HIGH);   // set the Upper Heating Element
  digitalWrite(12, LOW);   // set the Lower Heating Element
  digitalWrite(11, HIGH);    // set the Convection Fan
  delay(15000);              // wait for a 15 sec
  //***********************************************************  
  // interval 10 TIME 2:45 to 3:00
  digitalWrite(13, HIGH);   // set the Upper Heating Element
  digitalWrite(12, HIGH);   // set the Lower Heating Element
  digitalWrite(11, HIGH);    // set the Convection Fan
  delay(15000);              // wait for a 15 sec
  //***********************************************************  
  // interval 11 TIME 3:00 to 3:15
  digitalWrite(13, HIGH);   // set the Upper Heating Element
  digitalWrite(12, LOW);   // set the Lower Heating Element
  digitalWrite(11, HIGH);    // set the Convection Fan
  delay(15000);              // wait for a 15 sec
  //***********************************************************  
  // interval 12 TIME 3:15 to 3:30
  digitalWrite(13, LOW);   // set the Upper Heating Element
  digitalWrite(12, HIGH);   // set the Lower Heating Element
  digitalWrite(11, HIGH);    // set the Convection Fan
  delay(15000);              // wait for a 15 sec
  //***********************************************************  
  // interval 13 TIME 3:30 to 3:45
  digitalWrite(13, HIGH);   // set the Upper Heating Element
  digitalWrite(12, HIGH);   // set the Lower Heating Element
  digitalWrite(11, HIGH);    // set the Convection Fan
  delay(15000);              // wait for a 15 sec
  //***********************************************************  
  // interval 14 TIME 3:45 to 4:15
  digitalWrite(13, HIGH);   // set the Upper Heating Element
  digitalWrite(12, HIGH);   // set the Lower Heating Element
  digitalWrite(15, LOW);    // set the Convection Fan
  delay(30000);              // wait for a 30 sec
  //***********************************************************  
  // interval 16 TIME 4:15 to 4:45
  digitalWrite(13, HIGH);   // set the Upper Heating Element
  digitalWrite(12, HIGH);   // set the Lower Heating Element
  digitalWrite(11, HIGH);    // set the Convection Fan
  delay(30000);              // wait for a 30 sec
  //***********************************************************  
  // interval 17 TIME 4:45 to 5:00
  digitalWrite(13, LOW);   // set the Upper Heating Element
  digitalWrite(12, LOW);   // set the Lower Heating Element
  digitalWrite(11, HIGH);    // set the Convection Fan
  delay(15000);              // wait for a 15 sec
  //***********************************************************  
  // interval 18 TIME 5:00 to 5:15
  digitalWrite(13, LOW);   // set the Upper Heating Element
  digitalWrite(12, LOW);   // set the Lower Heating Element
  digitalWrite(11, HIGH);    // set the Convection Fan
  delay(15000);              // wait for a 15 sec
  //***********************************************************  
  // interval 19 TIME 5:15 to 5:30
  digitalWrite(13, LOW);   // set the Upper Heating Element
  digitalWrite(12, LOW);   // set the Lower Heating Element
  digitalWrite(11, HIGH);    // set the Convection Fan
  delay(15000);              // wait for a 15 sec
  //***********************************************************  
  // interval 20 TIME 5:30 to 5:45
  digitalWrite(13, LOW);   // set the Upper Heating Element
  digitalWrite(12, LOW);   // set the Lower Heating Element
  digitalWrite(11, HIGH);    // set the Convection Fan
  delay(15000);              // wait for a 15 sec
  //***********************************************************  
  // interval 21 TIME 5:45 to 6:00
  digitalWrite(13, LOW);   // set the Upper Heating Element
  digitalWrite(12, LOW);   // set the Lower Heating Element
  digitalWrite(11, HIGH);    // set the Convection Fan
  delay(15000);              // wait for a 15 sec
  //***********************************************************  
  // interval 22 TIME 6:00 to 6:15
  digitalWrite(13, LOW);   // set the Upper Heating Element
  digitalWrite(12, LOW);   // set the Lower Heating Element
  digitalWrite(11, HIGH);    // set the Convection Fan
  delay(15000);              // wait for a 15 sec
  //***********************************************************  
  // interval 23 TIME 6:15 to 6:30
  digitalWrite(13, LOW);   // set the Upper Heating Element
  digitalWrite(12, LOW);   // set the Lower Heating Element
  digitalWrite(11, HIGH);    // set the Convection Fan
  delay(15000);              // wait for a 15 sec
  //***********************************************************  
  // interval 24 TIME 6:30 to 6:45
  digitalWrite(13, LOW);   // set the Upper Heating Element
  digitalWrite(12, LOW);   // set the Lower Heating Element
  digitalWrite(11, HIGH);    // set the Convection Fan
  delay(15000);              // wait for a 15 sec
  //***********************************************************  
  // interval 25 TIME 6:45 to 7:00
  digitalWrite(13, LOW);   // set the Upper Heating Element
  digitalWrite(12, LOW);   // set the Lower Heating Element
  digitalWrite(11, HIGH);    // set the Convection Fan
  delay(15000);              // wait for a 15 sec
  //***********************************************************  
  // interval 26 TIME 7:00 to 7:15
  digitalWrite(13, LOW);   // set the Upper Heating Element
  digitalWrite(12, LOW);   // set the Lower Heating Element
  digitalWrite(11, HIGH);    // set the Convection Fan
  delay(15000);              // wait for a 15 sec
  //***********************************************************  
  // interval 27 TIME 7:15 to 7:30
  digitalWrite(13, LOW);   // set the Upper Heating Element
  digitalWrite(12, LOW);   // set the Lower Heating Element
  digitalWrite(11, HIGH);    // set the Convection Fan
  delay(15000);              // wait for a 15 sec
  //***********************************************************  
  // interval 28 TIME 7:30 to 7:45
  digitalWrite(13, LOW);   // set the Upper Heating Element
  digitalWrite(12, LOW);   // set the Lower Heating Element
  digitalWrite(11, HIGH);    // set the Convection Fan
  delay(15000);              // wait for a 15 sec
  //***********************************************************  
  // interval 29 TIME 7:45 to 8:00
  digitalWrite(13, LOW);   // set the Upper Heating Element
  digitalWrite(12, LOW);   // set the Lower Heating Element
  digitalWrite(11, HIGH);    // set the Convection Fan
  delay(15000);              // wait for a 15 sec
  //***********************************************************  
  // interval 30 TIME 8:00 to 10:00
  // COOL DOWN CYCLE
  digitalWrite(13, LOW);   // set the Upper Heating Element
  digitalWrite(12, LOW);   // set the Lower Heating Element
  digitalWrite(11, HIGH);    // set the Convection Fan
  delay(120000);              // wait for a 2 min
}

Any recommendations, advice, comments please advise or help.

adafruit
 
Posts: 12151
Joined: Thu Apr 06, 2006 4:21 pm

Re: Help me with my Reflow Toster Oven Project

Post by adafruit »

PID is 'overkilly' but its a good idea to have even the most basic feedback - check that the temp you think it is - in case you want to run the oven twice in a row - the starting temp will be wrong then.

Hamradio2008
 
Posts: 110
Joined: Sun Oct 10, 2010 4:37 pm

Re: Help me with my Reflow Toster Oven Project

Post by Hamradio2008 »

adafruit wrote:PID is 'overkilly' but its a good idea to have even the most basic feedback - check that the temp you think it is - in case you want to run the oven twice in a row - the starting temp will be wrong then.
Yes, I wasn't really thinking about running the oven twice in a row (ie. in some kind of production mode). I'll be working on incorporating some kind of basic feedback with incremental setpoints modeled around a chopped up reflow curve. I'm thinking that chopping the reflow curve up into increments in effect provides some kind of integral action. If the thermal properties of the oven are a slow the integral action only has to be faster than the thermal capacitance.

Proportional action code for an on/off controller should be a rather simple sketch. So in effct I would have a basic Proportiona plus Integral action. Differential is probably not needed its for fast processes like pressure control.

Thanks for the constructive input.

User avatar
adafruit_support_bill
 
Posts: 88088
Joined: Sat Feb 07, 2009 10:11 am

Re: Help me with my Reflow Toster Oven Project

Post by adafruit_support_bill »

For PID control of heating elements, TPO (Time Proportional Output) is commonly used. This is basically the same concept as PWM, except that the period is much longer. The analog output of the PID controls the duty-cycle of the TPO.

Hamradio2008
 
Posts: 110
Joined: Sun Oct 10, 2010 4:37 pm

Re: Help me with my Reflow Toster Oven Project

Post by Hamradio2008 »

A closeup of my first reflow using the Arduino Toster Oven. The board is a NORCAL FCC-2.
NORCAL.FCC2.Reflow.Closeup.1b.jpg
NORCAL.FCC2.Reflow.Closeup.1b.jpg (180.77 KiB) Viewed 6524 times
I am wondering what is the best way to apply the solder paste? Should I expect the components to self-align to some extent (see C4)?

adafruit
 
Posts: 12151
Joined: Thu Apr 06, 2006 4:21 pm

Re: Help me with my Reflow Toster Oven Project

Post by adafruit »

are those 1206? heavier parts may be tougher. we have a tutorial on getting laser cut stencils, or you can apply by hand with a syringe (search the blog, cant recall the urls)

Hamradio2008
 
Posts: 110
Joined: Sun Oct 10, 2010 4:37 pm

Re: Help me with my Reflow Toster Oven Project

Post by Hamradio2008 »

adafruit wrote:are those 1206? heavier parts may be tougher. we have a tutorial on getting laser cut stencils, or you can apply by hand with a syringe (search the blog, cant recall the urls)
They are 1206. I saw some videos on you tube and they had closeups of the reflow process with the SMDs wiggling into position by themselves. Wow it would be nice if I could get an SOIC-16 to do that! I really dont want to have to go to the extent of a laser cut stencel especially since I am just learning. I used a manual syringe. May try making a stencel with an xacto knife. Thanks for the input and any other comments or advice are received with appreciation.
Last edited by Hamradio2008 on Fri Oct 29, 2010 6:24 pm, edited 1 time in total.

Locked
Please be positive and constructive with your questions and comments.

Return to “SMT (Surface Mount Tech)”