Skip to content
Snippets Groups Projects
Commit 254a3548 authored by Orhan-Timo Altan's avatar Orhan-Timo Altan
Browse files

Angepasst an die Konvention der thk_libs

parent 8a975a02
No related branches found
No related tags found
No related merge requests found
# 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();
```
#include <pid_controller.h> #include <thk_pid_controller.h>
double prop_gain = 0.1; double prop_gain = 0.1;
double int_gain = 0.1; double int_gain = 0.1;
...@@ -8,7 +8,7 @@ double input_value = 0; ...@@ -8,7 +8,7 @@ double input_value = 0;
uint8_t step = 0; uint8_t step = 0;
uint8_t setpoint = 50; 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(){ void setup(){
Serial.begin(115200); Serial.begin(115200);
...@@ -17,11 +17,7 @@ void setup(){ ...@@ -17,11 +17,7 @@ void setup(){
void loop(){ void loop(){
step++; step++;
// if (input_value < 70)
// {
// pid.set_setpoint(100);
// }
input_value = pid.compute(input_value); input_value = pid.compute(input_value);
if(setpoint - input_value < 0.01) if(setpoint - input_value < 0.01)
......
#include <pid_controller.h> #include <thk_pid_controller.h>
PIDController::PIDController(double Kp, double Ki, double Kd, double setpoint) : Kp(Kp), Ki(Ki), Kd(Kd), setpoint(setpoint) {} thk_PIDController::thk_PIDController(double Kp, double Ki, double Kd, double setpoint) : Kp(Kp), Ki(Ki), Kd(Kd), setpoint(setpoint) {}
void PIDController::set_setpoint(double setpoint) void thk_PIDController::set_setpoint(double setpoint)
{ {
this->setpoint = setpoint; this->setpoint = setpoint;
} }
double PIDController::compute(double input_value) double thk_PIDController::compute(double input_value)
{ {
double error_value = setpoint - input_value; double error_value = setpoint - input_value;
...@@ -18,7 +18,7 @@ double PIDController::compute(double input_value) ...@@ -18,7 +18,7 @@ double PIDController::compute(double input_value)
return out_p + out_i + out_d; return out_p + out_i + out_d;
} }
void PIDController::reset() void thk_PIDController::reset()
{ {
out_i = 0; out_i = 0;
out_d = 0; out_d = 0;
......
...@@ -3,10 +3,10 @@ ...@@ -3,10 +3,10 @@
#include "Arduino.h" #include "Arduino.h"
class PIDController class thk_PIDController
{ {
public: 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); double compute(double input_value);
void set_setpoint(double setpoint); void set_setpoint(double setpoint);
void reset(); void reset();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment