mbedのPIDライブラリを改良したものです 主な変更 ・PIDゲインを独立に調整可能 ・実行中に入力値と出力値の範囲を変更する機能の削除 ・微分制御に不完全微分を追加 ・PIDゲインを設定する機能を追加 ・各種ゲッターを削除

Dependents:   Nucleo_MPU_9250_ test_master_kourobo2018 Nucleo_MPU_9250_

Revision:
0:eeb41e25a490
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PIDcontroller.h	Mon Feb 01 06:14:20 2016 +0000
@@ -0,0 +1,81 @@
+#ifndef PIDcontroller_H
+#define PIDcontroller_H
+
+ #include "mbed.h"
+ 
+ class PID {
+
+ public:
+
+    /**
+    * Kp 比例ゲイン
+    * Ki 積分ゲイン
+    * Kd 微分ゲイン
+    * tSample 制御周期
+    */
+    PID(float Kp, float Ki, float Kd, float tSample);
+
+    /**
+    * 入力値の範囲を設定
+    *
+    * InMin 入力の最小値 --> 0% 
+    * InMax 入力の最大値 --> 100%
+    */
+    void setInputLimits(float inMin, float inMax);
+
+    /**
+    * 出力値の範囲を設定
+    *
+    * InMin 出力の最小値 --> 0% 
+    * InMax 出力の最大値 --> 100%
+    */
+    void setOutputLimits(float outMin, float outMax);
+
+    void setSetPoint(float sp); //目標の設定
+ 
+    void setProcessValue(float pv); //現在値の設定
+    
+    void setGain(float Kp, float Ki, float Kd); //PIDゲインの設定
+
+    void setBias(float Bias); //フィードフォワード制御有効 バイアス値の設定
+
+    void setIncompleteDifferential(float u); //不完全微分(実用微分)有効,不完全微分係数の設定
+
+    float compute(void); //PIDの計算 戻り値はoutMinからoutMaxの範囲
+    float scaledParcent(float value);
+
+    float calcIncompleteDifferential(void);
+
+ private:
+    bool usingFeedForward; //フィードフォワード制御有効フラグ
+    bool usingIncompleteDifferential; //不完全微分有効フラグ
+
+    //PIDゲイン
+    float Kp_, Ki_, Kd_;
+ 
+    float setPoint_; //目標値
+
+    float     controllerOutput_; //出力値(0.0~1.0)
+    float prevControllerOutput_; //前回の出力値(0.0~1.0)
+
+    float  inMin_,  inMax_,  inSpan_; //入力の最小値,最大値,範囲
+    float outMin_, outMax_, outSpan_; //出力の最小値,最大値,範囲
+
+    float  accError_; //偏差の積分値
+
+    float     Error_; //現在の偏差
+    float prevError_; //前回の偏差
+    
+    float tSample_; //制御周期
+
+    float Bias_; //フィードフォワード制御バイアス値
+
+    float processVariable_; //入力値
+
+    float prevDiffOut; //前回の微分項の出力
+
+    float u_; //不完全微分係数
+
+ };
+
+ #endif /* PIDcontroller_H */