Libary for control.

Dependencies:   FastPWM

Dependents:   RT2_Cuboid

Committer:
pmic
Date:
Thu May 05 09:18:40 2022 +0000
Revision:
10:eb29810d831b
Parent:
8:3a2131231969
Adjusted AvgFilter (damn...)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pmic 4:1cbd6af9836c 1 #ifndef PID_CNTRL_H_
pmic 4:1cbd6af9836c 2 #define PID_CNTRL_H_
pmic 4:1cbd6af9836c 3
pmic 8:3a2131231969 4 #include <math.h>
pmic 6:e93f67d98616 5 #define pi 3.14159265358979323846
pmic 6:e93f67d98616 6
pmic 4:1cbd6af9836c 7 class PID_Cntrl
pmic 4:1cbd6af9836c 8 {
pmic 6:e93f67d98616 9
pmic 4:1cbd6af9836c 10 public:
pmic 4:1cbd6af9836c 11
pmic 4:1cbd6af9836c 12 PID_Cntrl(float I, float Ts, float uMin, float uMax);
pmic 4:1cbd6af9836c 13 PID_Cntrl(float P, float I, float Ts, float uMin, float uMax);
pmic 4:1cbd6af9836c 14 PID_Cntrl(float P, float I, float D, float Ts, float uMin, float uMax);
pmic 4:1cbd6af9836c 15 PID_Cntrl(float P, float I, float D, float tau_f, float Ts, float uMin, float uMax);
pmic 4:1cbd6af9836c 16 PID_Cntrl(float P, float I, float D, float tau_f, float tau_ro, float Ts, float uMin, float uMax);
pmic 6:e93f67d98616 17
pmic 4:1cbd6af9836c 18 PID_Cntrl() {};
pmic 4:1cbd6af9836c 19
pmic 4:1cbd6af9836c 20 float operator()(float e)
pmic 4:1cbd6af9836c 21 {
pmic 4:1cbd6af9836c 22 return update(e);
pmic 4:1cbd6af9836c 23 }
pmic 4:1cbd6af9836c 24 float operator()(float e, float y)
pmic 4:1cbd6af9836c 25 {
pmic 4:1cbd6af9836c 26 return update(e, y);
pmic 4:1cbd6af9836c 27 }
pmic 4:1cbd6af9836c 28
pmic 4:1cbd6af9836c 29 virtual ~PID_Cntrl();
pmic 4:1cbd6af9836c 30
pmic 6:e93f67d98616 31 void reset();
pmic 4:1cbd6af9836c 32 void reset(float initValue);
pmic 6:e93f67d98616 33
pmic 6:e93f67d98616 34 void setup(float I, float Ts, float uMin, float uMax);
pmic 6:e93f67d98616 35 void setup(float P, float I, float Ts, float uMin, float uMax);
pmic 6:e93f67d98616 36 void setup(float P, float I, float D, float Ts, float uMin, float uMax);
pmic 6:e93f67d98616 37 void setup(float P, float I, float D, float tau_f, float Ts, float uMin, float uMax);
pmic 6:e93f67d98616 38 void setup(float P, float I, float D, float tau_f, float tau_ro, float Ts, float uMin, float uMax);
pmic 6:e93f67d98616 39
pmic 4:1cbd6af9836c 40 void setCoeff_P(float P);
pmic 4:1cbd6af9836c 41 void setCoeff_I(float D);
pmic 4:1cbd6af9836c 42 void setCoeff_D(float D);
pmic 6:e93f67d98616 43
pmic 4:1cbd6af9836c 44 void scale_PIDT2_param(float scale);
pmic 6:e93f67d98616 45
pmic 4:1cbd6af9836c 46 float update(float e);
pmic 4:1cbd6af9836c 47 float update(float e, float y);
pmic 6:e93f67d98616 48
pmic 4:1cbd6af9836c 49 bool update_param(int cntrlr_param, float value);
pmic 6:e93f67d98616 50
pmic 4:1cbd6af9836c 51 void set_limits(float uMin, float uMax);
pmic 6:e93f67d98616 52
pmic 6:e93f67d98616 53 float prewarp(float T, float Ts);
pmic 6:e93f67d98616 54
pmic 4:1cbd6af9836c 55 float get_ulimit();
pmic 4:1cbd6af9836c 56 float get_P_gain();
pmic 4:1cbd6af9836c 57 float get_bd();
pmic 4:1cbd6af9836c 58 float get_ad();
pmic 4:1cbd6af9836c 59
pmic 4:1cbd6af9836c 60 private:
pmic 4:1cbd6af9836c 61
pmic 4:1cbd6af9836c 62 float IPart, Dpart, d_old, u_old, uf;
pmic 4:1cbd6af9836c 63 float P, I, D, tau_f, tau_ro, Ts, uMin, uMax;
pmic 4:1cbd6af9836c 64 float bi, bd, ad, bf, af;
pmic 4:1cbd6af9836c 65 float P_init, I_init, D_init;
pmic 4:1cbd6af9836c 66
pmic 6:e93f67d98616 67 void setCoefficients(float P, float I, float D, float tau_f, float tau_ro, float Ts);
pmic 6:e93f67d98616 68
pmic 4:1cbd6af9836c 69 void updateCoeff_I(float I, float Ts);
pmic 4:1cbd6af9836c 70 void updateCoeff_D(float D, float Ts, float tau_f);
pmic 4:1cbd6af9836c 71 void updateCoeff_RO(float Ts, float tau_ro);
pmic 6:e93f67d98616 72
pmic 4:1cbd6af9836c 73 float saturate(float u, float uMin, float uMax);
pmic 4:1cbd6af9836c 74
pmic 4:1cbd6af9836c 75 };
pmic 4:1cbd6af9836c 76
pmic 4:1cbd6af9836c 77 #endif