Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of Smoothie by
modules/tools/temperaturecontrol/TemperatureControl.h@2:1df0b61d3b5a, 2014-02-28 (annotated)
- Committer:
- Michael J. Spencer
- Date:
- Fri Feb 28 18:52:52 2014 -0800
- Revision:
- 2:1df0b61d3b5a
- Parent:
- 0:31e91bb0ef3c
Update to latest Smoothie.
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Michael J. Spencer |
2:1df0b61d3b5a | 1 | /* |
| scachat | 0:31e91bb0ef3c | 2 | this file is part of smoothie (http://smoothieware.org/). the motion control part is heavily based on grbl (https://github.com/simen/grbl). |
| scachat | 0:31e91bb0ef3c | 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. |
| scachat | 0:31e91bb0ef3c | 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. |
| Michael J. Spencer |
2:1df0b61d3b5a | 5 | you should have received a copy of the gnu general public license along with smoothie. if not, see <http://www.gnu.org/licenses/>. |
| scachat | 0:31e91bb0ef3c | 6 | */ |
| scachat | 0:31e91bb0ef3c | 7 | |
| scachat | 0:31e91bb0ef3c | 8 | #ifndef temperaturecontrol_h |
| scachat | 0:31e91bb0ef3c | 9 | #define temperaturecontrol_h |
| scachat | 0:31e91bb0ef3c | 10 | |
| scachat | 0:31e91bb0ef3c | 11 | #include "libs/Pin.h" |
| Michael J. Spencer |
2:1df0b61d3b5a | 12 | #include "Pwm.h" |
| scachat | 0:31e91bb0ef3c | 13 | #include <math.h> |
| scachat | 0:31e91bb0ef3c | 14 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 15 | #include "RingBuffer.h" |
| scachat | 0:31e91bb0ef3c | 16 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 17 | #define QUEUE_LEN 8 |
| Michael J. Spencer |
2:1df0b61d3b5a | 18 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 19 | class TemperatureControlPool; |
| scachat | 0:31e91bb0ef3c | 20 | |
| scachat | 0:31e91bb0ef3c | 21 | class TemperatureControl : public Module { |
| Michael J. Spencer |
2:1df0b61d3b5a | 22 | |
| scachat | 0:31e91bb0ef3c | 23 | public: |
| scachat | 0:31e91bb0ef3c | 24 | TemperatureControl(uint16_t name); |
| Michael J. Spencer |
2:1df0b61d3b5a | 25 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 26 | void on_module_loaded(); |
| Michael J. Spencer |
2:1df0b61d3b5a | 27 | void on_main_loop(void* argument); |
| Michael J. Spencer |
2:1df0b61d3b5a | 28 | void on_gcode_execute(void* argument); |
| Michael J. Spencer |
2:1df0b61d3b5a | 29 | void on_gcode_received(void* argument); |
| Michael J. Spencer |
2:1df0b61d3b5a | 30 | void on_config_reload(void* argument); |
| Michael J. Spencer |
2:1df0b61d3b5a | 31 | void on_second_tick(void* argument); |
| Michael J. Spencer |
2:1df0b61d3b5a | 32 | void on_get_public_data(void* argument); |
| Michael J. Spencer |
2:1df0b61d3b5a | 33 | void on_set_public_data(void* argument); |
| Michael J. Spencer |
2:1df0b61d3b5a | 34 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 35 | void set_desired_temperature(float desired_temperature); |
| Michael J. Spencer |
2:1df0b61d3b5a | 36 | float get_temperature(); |
| Michael J. Spencer |
2:1df0b61d3b5a | 37 | float adc_value_to_temperature(int adc_value); |
| scachat | 0:31e91bb0ef3c | 38 | uint32_t thermistor_read_tick(uint32_t dummy); |
| Michael J. Spencer |
2:1df0b61d3b5a | 39 | int new_thermistor_reading(); |
| Michael J. Spencer |
2:1df0b61d3b5a | 40 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 41 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 42 | int pool_index; |
| Michael J. Spencer |
2:1df0b61d3b5a | 43 | TemperatureControlPool *pool; |
| Michael J. Spencer |
2:1df0b61d3b5a | 44 | friend class PID_Autotuner; |
| Michael J. Spencer |
2:1df0b61d3b5a | 45 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 46 | private: |
| Michael J. Spencer |
2:1df0b61d3b5a | 47 | void pid_process(float); |
| Michael J. Spencer |
2:1df0b61d3b5a | 48 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 49 | float target_temperature; |
| Michael J. Spencer |
2:1df0b61d3b5a | 50 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 51 | float preset1; |
| Michael J. Spencer |
2:1df0b61d3b5a | 52 | float preset2; |
| scachat | 0:31e91bb0ef3c | 53 | |
| scachat | 0:31e91bb0ef3c | 54 | // Thermistor computation settings |
| Michael J. Spencer |
2:1df0b61d3b5a | 55 | float r0; |
| Michael J. Spencer |
2:1df0b61d3b5a | 56 | float t0; |
| Michael J. Spencer |
2:1df0b61d3b5a | 57 | int r1; |
| Michael J. Spencer |
2:1df0b61d3b5a | 58 | int r2; |
| Michael J. Spencer |
2:1df0b61d3b5a | 59 | float beta; |
| Michael J. Spencer |
2:1df0b61d3b5a | 60 | float j; |
| Michael J. Spencer |
2:1df0b61d3b5a | 61 | float k; |
| Michael J. Spencer |
2:1df0b61d3b5a | 62 | |
| scachat | 0:31e91bb0ef3c | 63 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 64 | // PID runtime |
| Michael J. Spencer |
2:1df0b61d3b5a | 65 | float i_max; |
| Michael J. Spencer |
2:1df0b61d3b5a | 66 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 67 | int o; |
| Michael J. Spencer |
2:1df0b61d3b5a | 68 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 69 | float last_reading; |
| Michael J. Spencer |
2:1df0b61d3b5a | 70 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 71 | float acceleration_factor; |
| Michael J. Spencer |
2:1df0b61d3b5a | 72 | float readings_per_second; |
| Michael J. Spencer |
2:1df0b61d3b5a | 73 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 74 | RingBuffer<uint16_t,QUEUE_LEN> queue; // Queue of readings |
| Michael J. Spencer |
2:1df0b61d3b5a | 75 | uint16_t median_buffer[QUEUE_LEN]; |
| Michael J. Spencer |
2:1df0b61d3b5a | 76 | int running_total; |
| scachat | 0:31e91bb0ef3c | 77 | |
| scachat | 0:31e91bb0ef3c | 78 | uint16_t name_checksum; |
| scachat | 0:31e91bb0ef3c | 79 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 80 | Pin thermistor_pin; |
| Michael J. Spencer |
2:1df0b61d3b5a | 81 | Pwm heater_pin; |
| Michael J. Spencer |
2:1df0b61d3b5a | 82 | |
| scachat | 0:31e91bb0ef3c | 83 | bool waiting; |
| Michael J. Spencer |
2:1df0b61d3b5a | 84 | bool min_temp_violated; |
| scachat | 0:31e91bb0ef3c | 85 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 86 | uint16_t set_m_code; |
| Michael J. Spencer |
2:1df0b61d3b5a | 87 | uint16_t set_and_wait_m_code; |
| Michael J. Spencer |
2:1df0b61d3b5a | 88 | uint16_t get_m_code; |
| Michael J. Spencer |
2:1df0b61d3b5a | 89 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 90 | string designator; |
| Michael J. Spencer |
2:1df0b61d3b5a | 91 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 92 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 93 | void setPIDp(float p); |
| Michael J. Spencer |
2:1df0b61d3b5a | 94 | void setPIDi(float i); |
| Michael J. Spencer |
2:1df0b61d3b5a | 95 | void setPIDd(float d); |
| Michael J. Spencer |
2:1df0b61d3b5a | 96 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 97 | float iTerm; |
| Michael J. Spencer |
2:1df0b61d3b5a | 98 | float lastInput; |
| Michael J. Spencer |
2:1df0b61d3b5a | 99 | // PID settings |
| Michael J. Spencer |
2:1df0b61d3b5a | 100 | float p_factor; |
| Michael J. Spencer |
2:1df0b61d3b5a | 101 | float i_factor; |
| Michael J. Spencer |
2:1df0b61d3b5a | 102 | float d_factor; |
| Michael J. Spencer |
2:1df0b61d3b5a | 103 | float PIDdt; |
| scachat | 0:31e91bb0ef3c | 104 | }; |
| scachat | 0:31e91bb0ef3c | 105 | |
| scachat | 0:31e91bb0ef3c | 106 | #endif |
