chose PID library implement PID (weight is NOT determined)

Dependents:   optWingforHAPS_Eigen hexaTest_Eigen

Committer:
NaotoMorita
Date:
Thu Mar 17 01:29:36 2022 +0000
Revision:
6:dfd3e6512bd5
Parent:
4:462dd38db926
resetIntError()

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 6:dfd3e6512bd5 48
NaotoMorita 6:dfd3e6512bd5 49 void resetIntError();
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_; //偏差の積分値
porizou 0:eeb41e25a490 67
porizou 0:eeb41e25a490 68 float Error_; //現在の偏差
porizou 0:eeb41e25a490 69 float prevError_; //前回の偏差
porizou 0:eeb41e25a490 70
porizou 0:eeb41e25a490 71 float tSample_; //制御周期
porizou 0:eeb41e25a490 72
porizou 0:eeb41e25a490 73 float Bias_; //フィードフォワード制御バイアス値
porizou 0:eeb41e25a490 74
porizou 0:eeb41e25a490 75 float processVariable_; //入力値
porizou 0:eeb41e25a490 76
porizou 0:eeb41e25a490 77 float prevDiffOut; //前回の微分項の出力
porizou 0:eeb41e25a490 78
porizou 0:eeb41e25a490 79 float u_; //不完全微分係数
porizou 0:eeb41e25a490 80
porizou 0:eeb41e25a490 81 };
porizou 0:eeb41e25a490 82
porizou 0:eeb41e25a490 83 #endif /* PIDcontroller_H */