Libary for control.
PID_Cntrl.h@10:eb29810d831b, 2022-05-05 (annotated)
- 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?
User | Revision | Line number | New 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 |