From 338a8de119594c367cd104f3284e40d937cc6bdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20K=C3=B6gl?= Date: Tue, 2 Oct 2012 22:00:49 +0200 Subject: [PATCH] states adjusted --- README.html | 2 +- README.rst | 2 +- reflowctl/reflowctl.ino | 76 +++++++++++++++++++++++++++++++---------- 3 files changed, 60 insertions(+), 20 deletions(-) diff --git a/README.html b/README.html index c4b9320..8eaf35a 100644 --- a/README.html +++ b/README.html @@ -322,7 +322,7 @@ mkdir build cd build cmake .. make -make reflowctl-upload +make reflowctl-upload && ../serialmon.py diff --git a/README.rst b/README.rst index 0f19abb..54afd9d 100644 --- a/README.rst +++ b/README.rst @@ -13,4 +13,4 @@ Then you have to install cmake, for the serialmon.py script python and pyserial. cd build cmake .. make - make reflowctl-upload + make reflowctl-upload && ../serialmon.py diff --git a/reflowctl/reflowctl.ino b/reflowctl/reflowctl.ino index e77c9a4..c086c86 100644 --- a/reflowctl/reflowctl.ino +++ b/reflowctl/reflowctl.ino @@ -1,4 +1,20 @@ +#define START_STATE 0 +#define PREHEAT_STATE 1 +#define RAMP_UP_STATE 2 +#define TAL_FIRST_STATE 3 +#define PEAK_STATE 4 +#define TAL_SECOND_STATE 5 +#define RAMPDOWN_STATE 6 +#define END_STATE 7 +#define ERROR_STATE 8 + +// error conditions +#define E_RAMPUP 1 // oven heats up too fast +#define E_RAMPDOWN_TOO_FAST 2 // oven cools down too fast +#define E_RAMPDOWN_TOO_SLOW 3 // oven cools down too slow +#define E_TIME_MAX 4 // reflow process does take too long + unsigned int time = 0; // profile seconds unsigned int temperatur = 25; // actual oven temp unsigned int last_temperatur = 25; @@ -12,28 +28,18 @@ unsigned int tal = 217; // 217°C unsigned int tal_duration = 100; // 60-150s unsigned int peak_duration = 30; // 20-40s unsigned int rampdown_max = 6; // 6°C/s max +unsigned int rampdown_min = 2; // 2°C/s max unsigned int time_max = 480; // 8*60s max -#define START_STATE 0 -#define PREHEAT_STATE 1 -#define TAL_STATE 2 -#define MAX_STATE 3 -#define RAMPDOWN_STATE 4 -#define END_STATE 5 -#define ERROR_STATE 6 - -byte state = START_STATE; - unsigned int Ts_min_time = 0; unsigned int Ts_max_time = 0; unsigned int Tl_time = 0; +unsigned int Tl_time_end = 0; unsigned int Tp_time = 0; unsigned int Tl_end_time = 0; - -#define RAMPUP_TOO_FAST 1 -#define RAMPDOWN_TOO_FAST 2 unsigned int error_condition = 0; +byte state = START_STATE; void setup() { pinMode(13, OUTPUT); @@ -47,12 +53,40 @@ void get_temp() { boolean check_rampup_rate() { if (temperatur - last_temperatur > rampup_rate) { - error_condition = RAMPUP_TOO_FAST; + error_condition = E_RAMPUP; return false; } return true; } +boolean check_rampdown_rate() { + unsigned int dt = temperatur - last_temperatur; + if (dt > rampdown_max) { + error_condition = E_RAMPDOWN_TOO_FAST; + return false; + } + + if (dt < rampdown_min) { + error_condition = E_RAMPDOWN_TOO_SLOW; + return false; + } + return true; +} + +boolean time_max_check() { + if (time > time_max) { + error_condition = E_TIME_MAX; + return false; + } +} + +boolean check_tal_duration() { + if (time > time_max) { + error_condition = E_TIME_MAX; + return false; + } +} + void loop() { time = millis() / 1000; get_temp(); @@ -62,32 +96,38 @@ void loop() { Serial.print(" "); Serial.println(last_temperatur); - delay(1000); - switch (state) { case START_STATE: // going from room temp to preheat, nothing to check here if (!check_rampup_rate()) goto error; if (temperatur > Ts_min) { + Serial.println("Changed state to PREHEAT_STATE"); + Ts_min_time = time; state++; } case PREHEAT_STATE: if (temperatur > Ts_max) { Serial.println("Changed state to PREHEAT_STATE"); + Ts_max_time = time; state++; } break; - case TAL_STATE: + case TAL_FIRST_STATE: break; - case MAX_STATE: + case PEAK_STATE: + break; + case TAL_SECOND_STATE: break; case RAMPDOWN_STATE: break; + case END_STATE: default: break; } + delay(1000); + return; error: