mbedのPIDライブラリを改良したものです 主な変更 ・PIDゲインを独立に調整可能 ・実行中に入力値と出力値の範囲を変更する機能の削除 ・微分制御に不完全微分を追加 ・PIDゲインを設定する機能を追加 ・各種ゲッターを削除
Dependents: Nucleo_MPU_9250_ test_master_kourobo2018 Nucleo_MPU_9250_
PIDcontroller.h@0:eeb41e25a490, 2016-02-01 (annotated)
- Committer:
- porizou
- Date:
- Mon Feb 01 06:14:20 2016 +0000
- Revision:
- 0:eeb41e25a490
add incompletedifferential
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
porizou | 0:eeb41e25a490 | 1 | #ifndef PIDcontroller_H |
porizou | 0:eeb41e25a490 | 2 | #define PIDcontroller_H |
porizou | 0:eeb41e25a490 | 3 | |
porizou | 0:eeb41e25a490 | 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); |
porizou | 0:eeb41e25a490 | 48 | |
porizou | 0:eeb41e25a490 | 49 | private: |
porizou | 0:eeb41e25a490 | 50 | bool usingFeedForward; //フィードフォワード制御有効フラグ |
porizou | 0:eeb41e25a490 | 51 | bool usingIncompleteDifferential; //不完全微分有効フラグ |
porizou | 0:eeb41e25a490 | 52 | |
porizou | 0:eeb41e25a490 | 53 | //PIDゲイン |
porizou | 0:eeb41e25a490 | 54 | float Kp_, Ki_, Kd_; |
porizou | 0:eeb41e25a490 | 55 | |
porizou | 0:eeb41e25a490 | 56 | float setPoint_; //目標値 |
porizou | 0:eeb41e25a490 | 57 | |
porizou | 0:eeb41e25a490 | 58 | float controllerOutput_; //出力値(0.0~1.0) |
porizou | 0:eeb41e25a490 | 59 | float prevControllerOutput_; //前回の出力値(0.0~1.0) |
porizou | 0:eeb41e25a490 | 60 | |
porizou | 0:eeb41e25a490 | 61 | float inMin_, inMax_, inSpan_; //入力の最小値,最大値,範囲 |
porizou | 0:eeb41e25a490 | 62 | float outMin_, outMax_, outSpan_; //出力の最小値,最大値,範囲 |
porizou | 0:eeb41e25a490 | 63 | |
porizou | 0:eeb41e25a490 | 64 | float accError_; //偏差の積分値 |
porizou | 0:eeb41e25a490 | 65 | |
porizou | 0:eeb41e25a490 | 66 | float Error_; //現在の偏差 |
porizou | 0:eeb41e25a490 | 67 | float prevError_; //前回の偏差 |
porizou | 0:eeb41e25a490 | 68 | |
porizou | 0:eeb41e25a490 | 69 | float tSample_; //制御周期 |
porizou | 0:eeb41e25a490 | 70 | |
porizou | 0:eeb41e25a490 | 71 | float Bias_; //フィードフォワード制御バイアス値 |
porizou | 0:eeb41e25a490 | 72 | |
porizou | 0:eeb41e25a490 | 73 | float processVariable_; //入力値 |
porizou | 0:eeb41e25a490 | 74 | |
porizou | 0:eeb41e25a490 | 75 | float prevDiffOut; //前回の微分項の出力 |
porizou | 0:eeb41e25a490 | 76 | |
porizou | 0:eeb41e25a490 | 77 | float u_; //不完全微分係数 |
porizou | 0:eeb41e25a490 | 78 | |
porizou | 0:eeb41e25a490 | 79 | }; |
porizou | 0:eeb41e25a490 | 80 | |
porizou | 0:eeb41e25a490 | 81 | #endif /* PIDcontroller_H */ |