Add kd_tau to oven PID parameters

This commit is contained in:
Mario Hüttel 2021-01-24 19:56:00 +01:00
parent 24651fa74d
commit 99d96fb426
6 changed files with 10 additions and 7 deletions

View File

@ -38,7 +38,8 @@ struct pid_controller {
volatile float derivate; volatile float derivate;
}; };
void pid_init(struct pid_controller *pid, float k_deriv, float k_int, float k_p, float output_sat_min, float output_sat_max, float integral_max, float sample_period); void pid_init(struct pid_controller *pid, float k_deriv, float k_int, float k_p,
float output_sat_min, float output_sat_max, float integral_max, float kd_tau, float sample_period);
void pid_zero(struct pid_controller *pid); void pid_zero(struct pid_controller *pid);

View File

@ -28,6 +28,7 @@ struct oven_pid_settings {
float kd; float kd;
float kp; float kp;
float ki; float ki;
float kd_tau;
float t_sample; float t_sample;
float max_integral; float max_integral;
}; };

View File

@ -113,7 +113,6 @@ void oven_pid_init(struct pid_controller *controller_to_copy)
safety_controller_report_timing(ERR_TIMING_PID); safety_controller_report_timing(ERR_TIMING_PID);
timestamp_last_run = systick_get_global_tick(); timestamp_last_run = systick_get_global_tick();
ssr_safety_en(true); ssr_safety_en(true);
} }
void oven_pid_set_target_temperature(float temp) void oven_pid_set_target_temperature(float temp)

View File

@ -21,10 +21,8 @@
#include <reflow-controller/pid-controller.h> #include <reflow-controller/pid-controller.h>
#include <string.h> #include <string.h>
const float kd_tau = 2.0f;
void pid_init(struct pid_controller *pid, float k_deriv, float k_int, float k_p, float output_sat_min, void pid_init(struct pid_controller *pid, float k_deriv, float k_int, float k_p, float output_sat_min,
float output_sat_max, float integral_max, float sample_period) float output_sat_max, float integral_max, float kd_tau, float sample_period)
{ {
if (!pid) if (!pid)
return; return;

View File

@ -170,6 +170,7 @@ enum settings_load_result sd_card_settings_load_pid_oven_parameters(struct oven_
enum config_parser_ret parse_result; enum config_parser_ret parse_result;
struct config_parser_entry entry; struct config_parser_entry entry;
bool kp_loaded = false, kd_loaded = false, ki_loaded = false, int_max_loaded = false, t_sample = false; bool kp_loaded = false, kd_loaded = false, ki_loaded = false, int_max_loaded = false, t_sample = false;
bool kd_tau_loaded = false;
if (!settings) { if (!settings) {
ret = SETT_LOAD_ERR; ret = SETT_LOAD_ERR;
@ -198,13 +199,16 @@ enum settings_load_result sd_card_settings_load_pid_oven_parameters(struct oven_
} else if (!strcmp(entry.name, "sample_period")) { } else if (!strcmp(entry.name, "sample_period")) {
t_sample = true; t_sample = true;
settings->t_sample = entry.value.float_val / 1000.0f; settings->t_sample = entry.value.float_val / 1000.0f;
} else if (!strcmp(entry.name, "kd_tau")) {
settings->kd_tau = entry.value.float_val;
kd_tau_loaded = true;
} }
} }
} while (!config_parser_ret_is_abort_condition(parse_result)); } while (!config_parser_ret_is_abort_condition(parse_result));
if (kp_loaded && kd_loaded && ki_loaded && t_sample && int_max_loaded) if (kp_loaded && kd_loaded && ki_loaded && t_sample && int_max_loaded && kd_tau_loaded)
ret = SETT_LOAD_SUCCESS; ret = SETT_LOAD_SUCCESS;
config_parser_close_file(p); config_parser_close_file(p);

View File

@ -389,7 +389,7 @@ static void gui_menu_constant_temperature_driver_setup(struct lcd_menu *menu, en
menu_lcd_output(menu, 1, "PID parameters"); menu_lcd_output(menu, 1, "PID parameters");
} else { } else {
pid_init(&pid_controller, pid_settings.kd, pid_settings.ki, pid_settings.kp, 0, 100, pid_init(&pid_controller, pid_settings.kd, pid_settings.ki, pid_settings.kp, 0, 100,
pid_settings.max_integral, pid_settings.t_sample); pid_settings.max_integral, pid_settings.kd_tau, pid_settings.t_sample);
oven_pid_init(&pid_controller); oven_pid_init(&pid_controller);
menu_entry_enter(menu, gui_menu_constant_temperature_driver, true); menu_entry_enter(menu, gui_menu_constant_temperature_driver, true);
} }