chose PID library implement PID (weight is NOT determined)

Dependents:   optWingforHAPS_Eigen hexaTest_Eigen

Committer:
NaotoMorita
Date:
Thu Aug 26 04:26:47 2021 +0000
Revision:
2:a05ba9d3be55
Parent:
1:5f8577f03edb
Child:
4:462dd38db926
restrect I gain

Who changed what in which revision?

UserRevisionLine numberNew contents of line
porizou 0:eeb41e25a490 1 #ifndef PIDcontroller_H
porizou 0:eeb41e25a490 2 #define PIDcontroller_H
porizou 0:eeb41e25a490 3
naker 1:5f8577f03edb 4 #include "mbed.h"
porizou 0:eeb41e25a490 5
porizou 0:eeb41e25a490 6 class PID {
porizou 0:eeb41e25a490 7
porizou 0:eeb41e25a490 8 public:
porizou 0:eeb41e25a490 9
porizou 0:eeb41e25a490 10 /**
porizou 0:eeb41e25a490 11 * Kp 比例ゲイン
porizou 0:eeb41e25a490 12 * Ki 積分ゲイン
porizou 0:eeb41e25a490 13 * Kd 微分ゲイン
porizou 0:eeb41e25a490 14 * tSample 制御周期
porizou 0:eeb41e25a490 15 */
porizou 0:eeb41e25a490 16 PID(float Kp, float Ki, float Kd, float tSample);
porizou 0:eeb41e25a490 17
porizou 0:eeb41e25a490 18 /**
porizou 0:eeb41e25a490 19 * 入力値の範囲を設定
porizou 0:eeb41e25a490 20 *
porizou 0:eeb41e25a490 21 * InMin 入力の最小値 --> 0%
porizou 0:eeb41e25a490 22 * InMax 入力の最大値 --> 100%
porizou 0:eeb41e25a490 23 */
porizou 0:eeb41e25a490 24 void setInputLimits(float inMin, float inMax);
porizou 0:eeb41e25a490 25
porizou 0:eeb41e25a490 26 /**
porizou 0:eeb41e25a490 27 * 出力値の範囲を設定
porizou 0:eeb41e25a490 28 *
porizou 0:eeb41e25a490 29 * InMin 出力の最小値 --> 0%
porizou 0:eeb41e25a490 30 * InMax 出力の最大値 --> 100%
porizou 0:eeb41e25a490 31 */
porizou 0:eeb41e25a490 32 void setOutputLimits(float outMin, float outMax);
porizou 0:eeb41e25a490 33
porizou 0:eeb41e25a490 34 void setSetPoint(float sp); //目標の設定
porizou 0:eeb41e25a490 35
porizou 0:eeb41e25a490 36 void setProcessValue(float pv); //現在値の設定
porizou 0:eeb41e25a490 37
porizou 0:eeb41e25a490 38 void setGain(float Kp, float Ki, float Kd); //PIDゲインの設定
porizou 0:eeb41e25a490 39
porizou 0:eeb41e25a490 40 void setBias(float Bias); //フィードフォワード制御有効 バイアス値の設定
porizou 0:eeb41e25a490 41
porizou 0:eeb41e25a490 42 void setIncompleteDifferential(float u); //不完全微分(実用微分)有効,不完全微分係数の設定
porizou 0:eeb41e25a490 43
porizou 0:eeb41e25a490 44 float compute(void); //PIDの計算 戻り値はoutMinからoutMaxの範囲
porizou 0:eeb41e25a490 45 float scaledParcent(float value);
porizou 0:eeb41e25a490 46
porizou 0:eeb41e25a490 47 float calcIncompleteDifferential(void);
NaotoMorita 2:a05ba9d3be55 48
NaotoMorita 2:a05ba9d3be55 49 void setAccErrorMax(float maxVal); //積分項の積分最大値(0~)
porizou 0:eeb41e25a490 50
porizou 0:eeb41e25a490 51 private:
porizou 0:eeb41e25a490 52 bool usingFeedForward; //フィードフォワード制御有効フラグ
porizou 0:eeb41e25a490 53 bool usingIncompleteDifferential; //不完全微分有効フラグ
porizou 0:eeb41e25a490 54
porizou 0:eeb41e25a490 55 //PIDゲイン
porizou 0:eeb41e25a490 56 float Kp_, Ki_, Kd_;
porizou 0:eeb41e25a490 57
porizou 0:eeb41e25a490 58 float setPoint_; //目標値
porizou 0:eeb41e25a490 59
porizou 0:eeb41e25a490 60 float controllerOutput_; //出力値(0.0~1.0)
porizou 0:eeb41e25a490 61 float prevControllerOutput_; //前回の出力値(0.0~1.0)
porizou 0:eeb41e25a490 62
porizou 0:eeb41e25a490 63 float inMin_, inMax_, inSpan_; //入力の最小値,最大値,範囲
porizou 0:eeb41e25a490 64 float outMin_, outMax_, outSpan_; //出力の最小値,最大値,範囲
porizou 0:eeb41e25a490 65
porizou 0:eeb41e25a490 66 float accError_; //偏差の積分値
NaotoMorita 2:a05ba9d3be55 67 float accErrorMax_;
porizou 0:eeb41e25a490 68
porizou 0:eeb41e25a490 69 float Error_; //現在の偏差
porizou 0:eeb41e25a490 70 float prevError_; //前回の偏差
porizou 0:eeb41e25a490 71
porizou 0:eeb41e25a490 72 float tSample_; //制御周期
porizou 0:eeb41e25a490 73
porizou 0:eeb41e25a490 74 float Bias_; //フィードフォワード制御バイアス値
porizou 0:eeb41e25a490 75
porizou 0:eeb41e25a490 76 float processVariable_; //入力値
porizou 0:eeb41e25a490 77
porizou 0:eeb41e25a490 78 float prevDiffOut; //前回の微分項の出力
porizou 0:eeb41e25a490 79
porizou 0:eeb41e25a490 80 float u_; //不完全微分係数
porizou 0:eeb41e25a490 81
porizou 0:eeb41e25a490 82 };
porizou 0:eeb41e25a490 83
porizou 0:eeb41e25a490 84 #endif /* PIDcontroller_H */