X-Git-Url: https://git.hcoop.net/clinton/Smoothieware.git/blobdiff_plain/4f4794856595bf3dc137a5e25b80feb0770dc874..3bfb2639acaee9896a0479cfc7a44ca6f31386f7:/src/modules/tools/temperaturecontrol/TemperatureControl.h
diff --git a/src/modules/tools/temperaturecontrol/TemperatureControl.h b/src/modules/tools/temperaturecontrol/TemperatureControl.h
dissimilarity index 66%
index f7d8d626..aa5ef4a2 100644
--- a/src/modules/tools/temperaturecontrol/TemperatureControl.h
+++ b/src/modules/tools/temperaturecontrol/TemperatureControl.h
@@ -1,119 +1,95 @@
-/*
- this file is part of smoothie (http://smoothieware.org/). the motion control part is heavily based on grbl (https://github.com/simen/grbl).
- 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.
- 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.
- you should have received a copy of the gnu general public license along with smoothie. if not, see .
-*/
-
-#ifndef temperaturecontrol_h
-#define temperaturecontrol_h
-
-#include "libs/Pin.h"
-#include "Pwm.h"
-#include
-
-#include "RingBuffer.h"
-
-#define UNDEFINED -1
-
-#define thermistor_checksum CHECKSUM("thermistor")
-#define r0_checksum CHECKSUM("r0")
-#define readings_per_second_checksum CHECKSUM("readings_per_second")
-#define max_pwm_checksum CHECKSUM("max_pwm")
-#define t0_checksum CHECKSUM("t0")
-#define beta_checksum CHECKSUM("beta")
-#define vadc_checksum CHECKSUM("vadc")
-#define vcc_checksum CHECKSUM("vcc")
-#define r1_checksum CHECKSUM("r1")
-#define r2_checksum CHECKSUM("r2")
-#define temperature_control_checksum CHECKSUM("temperature_control")
-#define thermistor_pin_checksum CHECKSUM("thermistor_pin")
-#define heater_pin_checksum CHECKSUM("heater_pin")
-
-#define get_m_code_checksum CHECKSUM("get_m_code")
-#define set_m_code_checksum CHECKSUM("set_m_code")
-#define set_and_wait_m_code_checksum CHECKSUM("set_and_wait_m_code")
-
-#define designator_checksum CHECKSUM("designator")
-
-#define p_factor_checksum CHECKSUM("p_factor")
-#define i_factor_checksum CHECKSUM("i_factor")
-#define d_factor_checksum CHECKSUM("d_factor")
-
-#define i_max_checksum CHECKSUM("i_max")
-
-#define QUEUE_LEN 8
-
-class TemperatureControlPool;
-
-class TemperatureControl : public Module {
- public:
- TemperatureControl();
- TemperatureControl(uint16_t name);
-
- void on_module_loaded();
- void on_main_loop(void* argument);
- void on_gcode_execute(void* argument);
- void on_gcode_received(void* argument);
- void on_config_reload(void* argument);
- void on_second_tick(void* argument);
-
- void set_desired_temperature(double desired_temperature);
- double get_temperature();
- double adc_value_to_temperature(int adc_value);
- uint32_t thermistor_read_tick(uint32_t dummy);
- int new_thermistor_reading();
-
- void pid_process(double);
-
- double target_temperature;
-
- // Thermistor computation settings
- double r0;
- double t0;
- int r1;
- int r2;
- double beta;
- double j;
- double k;
-
- int max_pwm;
-
- // PID settings
- double p_factor;
- double i_factor;
- double d_factor;
-
- // PID runtime
- double i_max;
-
- double p, i, d;
- int o;
-
- double last_reading;
-
- double acceleration_factor;
- double readings_per_second;
-
- RingBuffer queue; // Queue of readings
- uint16_t median_buffer[QUEUE_LEN];
- int running_total;
-
- uint16_t name_checksum;
-
- Pin thermistor_pin;
- Pwm heater_pin;
-
- bool waiting;
-
- uint16_t set_m_code;
- uint16_t set_and_wait_m_code;
- uint16_t get_m_code;
-
- string designator;
-
- TemperatureControlPool *pool;
- int pool_index;
-};
-
-#endif
+/*
+ this file is part of smoothie (http://smoothieware.org/). the motion control part is heavily based on grbl (https://github.com/simen/grbl).
+ 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.
+ 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.
+ you should have received a copy of the gnu general public license along with smoothie. if not, see .
+*/
+
+#ifndef TEMPERATURECONTROL_H
+#define TEMPERATURECONTROL_H
+
+#include "Module.h"
+#include "Pwm.h"
+#include "TempSensor.h"
+#include "TemperatureControlPublicAccess.h"
+
+class TemperatureControl : public Module {
+
+ public:
+ TemperatureControl(uint16_t name, int index);
+ ~TemperatureControl();
+
+ void on_module_loaded();
+ void on_main_loop(void* argument);
+ void on_gcode_received(void* argument);
+ void on_second_tick(void* argument);
+ void on_get_public_data(void* argument);
+ void on_set_public_data(void* argument);
+ void on_halt(void* argument);
+
+ void set_desired_temperature(float desired_temperature);
+
+ float get_temperature();
+
+ friend class PID_Autotuner;
+
+ private:
+ void load_config();
+ uint32_t thermistor_read_tick(uint32_t dummy);
+ void pid_process(float);
+
+ 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;
+
+ uint16_t set_m_code;
+ uint16_t set_and_wait_m_code;
+ uint16_t get_m_code;
+
+ std::string designator;
+
+ void setPIDp(float p);
+ void setPIDi(float i);
+ void setPIDd(float d);
+
+ float hysteresis;
+ float iTerm;
+ float lastInput;
+ // PID settings
+ float p_factor;
+ float i_factor;
+ float d_factor;
+ float PIDdt;
+
+ struct {
+ 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