IpidSet()はPID係数、計算周期と出力範囲を設定します。
bool IpidSet(uint8_t id, float kp, float ki, float kd, unsigned long sampleMs, float outMin, float outMax)
| コマンド | 引数 | 戻り値 | 動作 |
|---|---|---|---|
IpidSet(id, kp, ki, kd, sampleMs, outMin, outMax) | uint8_t id — PIDループ番号。0 ~ 255を使用可能float kp — 比例ゲイン。負の入力は0として処理float ki — 積分ゲイン。秒単位の積分を基準float kd — 微分ゲイン。秒単位の微分を基準unsigned long sampleMs — PID計算周期。ms単位。0は使用不可float outMinfloat outMax | bool | PID係数、計算周期と出力範囲を設定します。 |
void setup() { IpidSet(2, 4.0, 0.2, 0.0, 100, 0, 255); // PID係数、計算周期、出力範囲を設定します。 IpidReverse(2, true); // PIDの正動作または逆動作を選択します。 } void loop() { float pv = ntcRead(4) / 10.0; // NTC 3950 10kΩセンサの温度を0.1℃単位の整数で返します。 float sv = 25.0; int output = (int)IpidRun(2, pv, sv); // 現在値と設定値からPID出力を計算します。 analogWrite(11, output); }
IpidRun()はsampleMs周期に達するまでは直前の出力値を保持します。loop()で繰り返し呼び出しても構いません。IpidItermLimit()を使用します。IpidReset()は積分項、直前のPV、直前の出力値を初期化します。idは1つの制御ループだけに使用します。