increase runaway_heating_timeout to a max of 511 seconds
[clinton/Smoothieware.git] / src / modules / tools / temperaturecontrol / TemperatureControl.h
1 /*
2 this file is part of smoothie (http://smoothieware.org/). the motion control part is heavily based on grbl (https://github.com/simen/grbl).
3 smoothie is free software: you can redistribute it and/or modify it under the terms of the gnu general public license as published by the free software foundation, either version 3 of the license, or (at your option) any later version.
4 smoothie is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. see the gnu general public license for more details.
5 you should have received a copy of the gnu general public license along with smoothie. if not, see <http://www.gnu.org/licenses/>.
6 */
7
8 #ifndef TEMPERATURECONTROL_H
9 #define TEMPERATURECONTROL_H
10
11 #include "Module.h"
12 #include "Pwm.h"
13 #include "TempSensor.h"
14 #include "TemperatureControlPublicAccess.h"
15
16 class TemperatureControl : public Module {
17
18 public:
19 TemperatureControl(uint16_t name, int index);
20 ~TemperatureControl();
21
22 void on_module_loaded();
23 void on_main_loop(void* argument);
24 void on_gcode_received(void* argument);
25 void on_second_tick(void* argument);
26 void on_get_public_data(void* argument);
27 void on_set_public_data(void* argument);
28 void on_halt(void* argument);
29
30 void set_desired_temperature(float desired_temperature);
31
32 float get_temperature();
33
34 enum RUNAWAY_TYPE {NOT_HEATING, WAITING_FOR_TEMP_TO_BE_REACHED, TARGET_TEMPERATURE_REACHED};
35
36 friend class PID_Autotuner;
37
38 private:
39 void load_config();
40 uint32_t thermistor_read_tick(uint32_t dummy);
41 void pid_process(float);
42
43 int pool_index;
44
45 float target_temperature;
46 float max_temp, min_temp;
47
48 float preset1;
49 float preset2;
50
51 TempSensor *sensor;
52
53 // PID runtime
54 float i_max;
55
56 int o;
57
58 float last_reading;
59
60 float readings_per_second;
61
62 uint16_t name_checksum;
63
64 Pwm heater_pin;
65
66 uint16_t set_m_code;
67 uint16_t set_and_wait_m_code;
68 uint16_t get_m_code;
69
70 std::string designator;
71
72 void setPIDp(float p);
73 void setPIDi(float i);
74 void setPIDd(float d);
75
76 float hysteresis;
77 float iTerm;
78 float lastInput;
79 // PID settings
80 float p_factor;
81 float i_factor;
82 float d_factor;
83 float PIDdt;
84
85 // Temperature runaway values
86 RUNAWAY_TYPE runaway_state;
87
88
89 struct {
90 // Temperature runaway config options
91 uint8_t runaway_range:6; // max 63
92 uint16_t runaway_heating_timeout:9; // max 511
93 uint16_t runaway_heating_timer:9;
94 bool use_bangbang:1;
95 bool waiting:1;
96 bool temp_violated:1;
97 bool link_to_tool:1;
98 bool active:1;
99 bool readonly:1;
100 bool windup:1;
101 bool sensor_settings:1;
102 };
103 };
104
105 #endif