From 9bb7a06b8351a5646da12e4225056b0c6e8241e3 Mon Sep 17 00:00:00 2001 From: Pascal <engelerp@phys.ethz.ch> Date: Tue, 13 Jun 2023 16:56:41 +0200 Subject: [PATCH] Added turn on/off functionality --- .../drivers/pid_controller/pid_controller.cpp | 15 +++++++++++++++ .../drivers/pid_controller/pid_controller.hpp | 5 +++++ 2 files changed, 20 insertions(+) diff --git a/firmware/drivers/pid_controller/pid_controller.cpp b/firmware/drivers/pid_controller/pid_controller.cpp index a5d77c5..a0132eb 100644 --- a/firmware/drivers/pid_controller/pid_controller.cpp +++ b/firmware/drivers/pid_controller/pid_controller.cpp @@ -23,6 +23,7 @@ std::vector<double> Pid_controller::pid_vec_ = {0., 0., 0.}; //current values of std::vector<double> Pid_controller::kpid_vec_ = {0., 0., 0.}; //coefficients Kp Ki Kd double Pid_controller::I_reset_ = 0.; //reset value of I double Pid_controller::I_reset_errsq_ = 0.5; //value of error*error above which the I-term is held in reset +bool Pid_controller::enabled_ = true; void Pid_controller::init(double setpoint, std::vector<double> kpid, double I_reset, double I_reset_errsq){ @@ -33,6 +34,11 @@ void Pid_controller::init(double setpoint, std::vector<double> kpid, double I_re } void Pid_controller::update_pid(double temperature){ + if(!enabled_){ //if we have been turned off, stay off + output_ = 0.09; + Ltc6992::set_level(output_); + return; + } //calculate error from setpoint double error = setpoint_ - temperature; //update P,I,D @@ -92,3 +98,12 @@ double Pid_controller::get_I_reset(){ double Pid_controller::get_setpoint(){ return setpoint_; } + +void Pid_controller::turn_off(){ + output_ = 0.09; + enabled_ = false; +} + +void Pid_controller::turn_on(){ + enabled_ = true; +} \ No newline at end of file diff --git a/firmware/drivers/pid_controller/pid_controller.hpp b/firmware/drivers/pid_controller/pid_controller.hpp index 4c5bd04..55e53e8 100644 --- a/firmware/drivers/pid_controller/pid_controller.hpp +++ b/firmware/drivers/pid_controller/pid_controller.hpp @@ -21,6 +21,9 @@ public: static double get_I_reset(); static double get_setpoint(); + static void turn_off(); + static void turn_on(); + private: static double setpoint_; //target temperature in °C static double output_; //output to LTC6992 @@ -28,6 +31,8 @@ private: static std::vector<double> kpid_vec_; //coefficients Kp Ki Kd static double I_reset_; //reset value of I static double I_reset_errsq_; //value of error*error above which the I-term is held in reset + + static bool enabled_; }; #endif -- GitLab