From 254a35486fa8d8b9195b885bb8e07f4cd6da2777 Mon Sep 17 00:00:00 2001 From: Orhan-Timo Altan <timo.altan@th-koeln.de> Date: Wed, 3 Aug 2022 20:46:15 +0200 Subject: [PATCH] Angepasst an die Konvention der thk_libs --- README.md | 48 ++++++++++++++++++++++- examples/{example.ino => pid_example.ino} | 10 ++--- pid_controller.cpp | 25 ------------ thk_pid_controller.cpp | 25 ++++++++++++ pid_controller.h => thk_pid_controller.h | 4 +- 5 files changed, 77 insertions(+), 35 deletions(-) rename examples/{example.ino => pid_example.ino} (78%) delete mode 100644 pid_controller.cpp create mode 100644 thk_pid_controller.cpp rename pid_controller.h => thk_pid_controller.h (75%) diff --git a/README.md b/README.md index ea61e82..b9a7a5e 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,49 @@ -# BITs PID Controller +# PID Controller + +Mit dieser Bibliothek kann ein PID Regler erzeugt werden, der mit Hilfe einer Führungsgröße und dem Ist-Wert die Regelgröße berechnet. + +## **Installation:** + +Um diese Klassen verwenden zu können, muss dieses Repository geklont und in das Library-Verzeichnis der Arduino-IDE kopiert werden.<br /> +<br /> + +## **Anwendung:** + +Zur Verwendung siehe zunächst das Beispiel `pid_example.ino`<br /> +<br /> + +**Einbinden der Bibliothek:** +```Arduino +#include <thk_pid_controller.h> +``` + +**Instanziieren:** +```Arduino +thk_PIDController pid_controller(proportional_gain, integrational_gain, differential_gain, setpoint); +``` + +- `proportional_gain`: Proportional Faktor +- `integrational_gain`: Integral Faktor +- `differential_gain`: Differential Faktor +- `setpoint`: Führungsgröße<br /> +<br /> + +### **Funktionen:** + +**Übergeben einer neuen Führungsgröße an den Regler:** +```Arduino +pid_controller.set_setpoint(setpoint); +``` + +**Berechnen der Regelgröße:** +```Arduino +controlled_variable = pid_controller.compute(input_value); +``` + +**Zurücksetzen von I- und D-Anteil:** +```Arduino +pid_controller.reset(); +``` + diff --git a/examples/example.ino b/examples/pid_example.ino similarity index 78% rename from examples/example.ino rename to examples/pid_example.ino index 575199f..c998ce5 100644 --- a/examples/example.ino +++ b/examples/pid_example.ino @@ -1,4 +1,4 @@ -#include <pid_controller.h> +#include <thk_pid_controller.h> double prop_gain = 0.1; double int_gain = 0.1; @@ -8,7 +8,7 @@ double input_value = 0; uint8_t step = 0; uint8_t setpoint = 50; -PIDController pid(prop_gain, int_gain, diff_gain, 0); +thk_PIDController pid(prop_gain, int_gain, diff_gain, 0); void setup(){ Serial.begin(115200); @@ -17,11 +17,7 @@ void setup(){ void loop(){ step++; - // if (input_value < 70) - // { - - // pid.set_setpoint(100); - // } + input_value = pid.compute(input_value); if(setpoint - input_value < 0.01) diff --git a/pid_controller.cpp b/pid_controller.cpp deleted file mode 100644 index 5334491..0000000 --- a/pid_controller.cpp +++ /dev/null @@ -1,25 +0,0 @@ -#include <pid_controller.h> - -PIDController::PIDController(double Kp, double Ki, double Kd, double setpoint) : Kp(Kp), Ki(Ki), Kd(Kd), setpoint(setpoint) {} - -void PIDController::set_setpoint(double setpoint) -{ - this->setpoint = setpoint; -} - -double PIDController::compute(double input_value) -{ - double error_value = setpoint - input_value; - - out_p = Kp * error_value; // P-Anteil - out_i += Ki * error_value; // I-Anteil - out_d -= Kd * error_value; // D-Anteil - - return out_p + out_i + out_d; -} - -void PIDController::reset() -{ - out_i = 0; - out_d = 0; -} \ No newline at end of file diff --git a/thk_pid_controller.cpp b/thk_pid_controller.cpp new file mode 100644 index 0000000..2e094ed --- /dev/null +++ b/thk_pid_controller.cpp @@ -0,0 +1,25 @@ +#include <thk_pid_controller.h> + +thk_PIDController::thk_PIDController(double Kp, double Ki, double Kd, double setpoint) : Kp(Kp), Ki(Ki), Kd(Kd), setpoint(setpoint) {} + +void thk_PIDController::set_setpoint(double setpoint) +{ + this->setpoint = setpoint; +} + +double thk_PIDController::compute(double input_value) +{ + double error_value = setpoint - input_value; + + out_p = Kp * error_value; // P-Anteil + out_i += Ki * error_value; // I-Anteil + out_d -= Kd * error_value; // D-Anteil + + return out_p + out_i + out_d; +} + +void thk_PIDController::reset() +{ + out_i = 0; + out_d = 0; +} \ No newline at end of file diff --git a/pid_controller.h b/thk_pid_controller.h similarity index 75% rename from pid_controller.h rename to thk_pid_controller.h index 1faf019..3392488 100644 --- a/pid_controller.h +++ b/thk_pid_controller.h @@ -3,10 +3,10 @@ #include "Arduino.h" -class PIDController +class thk_PIDController { public: - PIDController(double Kp, double Ki, double Kd, double setpoint); + thk_PIDController(double Kp, double Ki, double Kd, double setpoint); double compute(double input_value); void set_setpoint(double setpoint); void reset(); -- GitLab