you should have received a copy of the gnu general public license along with smoothie. if not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef temperaturecontrol_h
-#define temperaturecontrol_h
+#ifndef TEMPERATURECONTROL_H
+#define TEMPERATURECONTROL_H
#include "Module.h"
#include "Pwm.h"
void on_module_loaded();
void on_main_loop(void* argument);
- void on_gcode_execute(void* argument);
void on_gcode_received(void* argument);
void on_second_tick(void* argument);
void on_get_public_data(void* argument);
float get_temperature();
+
friend class PID_Autotuner;
private:
void load_config();
uint32_t thermistor_read_tick(uint32_t dummy);
void pid_process(float);
+ void setPIDp(float p);
+ void setPIDi(float i);
+ void setPIDd(float d);
int pool_index;
float target_temperature;
+ float max_temp, min_temp;
float preset1;
float preset2;
TempSensor *sensor;
-
- // PID runtime
float i_max;
-
int o;
-
float last_reading;
-
float readings_per_second;
-
- uint16_t name_checksum;
-
Pwm heater_pin;
- struct {
- bool use_bangbang:1;
- bool waiting:1;
- bool min_temp_violated:1;
- bool link_to_tool:1;
- bool active:1;
- bool readonly:1;
- };
-
- uint16_t set_m_code;
- uint16_t set_and_wait_m_code;
- uint16_t get_m_code;
- struct pad_temperature public_data_return;
-
std::string designator;
- void setPIDp(float p);
- void setPIDi(float i);
- void setPIDd(float d);
float hysteresis;
float iTerm;
float i_factor;
float d_factor;
float PIDdt;
+
+ enum RUNAWAY_TYPE {NOT_HEATING, HEATING_UP, COOLING_DOWN, TARGET_TEMPERATURE_REACHED};
+
+ // pack these to save memory
+ struct {
+ uint16_t name_checksum;
+ uint16_t set_m_code:10;
+ uint16_t set_and_wait_m_code:10;
+ uint16_t get_m_code:10;
+ RUNAWAY_TYPE runaway_state:2;
+ // Temperature runaway config options
+ uint8_t runaway_range:6; // max 63
+ uint16_t runaway_heating_timeout:8; // 2040 secs
+ uint16_t runaway_cooling_timeout:8; // 2040 secs
+ uint16_t runaway_timer:8;
+ uint8_t tick:3;
+ bool use_bangbang:1;
+ bool waiting:1;
+ bool temp_violated:1;
+ bool link_to_tool:1;
+ bool active:1;
+ bool readonly:1;
+ bool windup:1;
+ bool sensor_settings:1;
+ };
};
#endif