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.