diff --git a/README.md b/README.md index ea61e822e9dd54c0f8d6adf4f2bb8bf4be8d78b2..b9a7a5ef95766f603c63676b8817b049ee822519 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 575199f8488179ebc0f0cef668f459389ada2c49..c998ce5e0cfd3e1f19124a60988c9f923716e1e8 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 5334491928bbd24c64eccc933dea48cc098bf995..0000000000000000000000000000000000000000 --- 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 0000000000000000000000000000000000000000..2e094edf162c17aba82566380fd06dc07f03dc1e --- /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 1faf019a62e6bdd3ee0a5d0ebbd9595c6e0ea027..33924886235c21d2cd1c1d815d19b7b5f591798b 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();