| コマンド | 引数 | 戻り値 | 動作 |
|---|---|---|---|
IpidItermLimit(id, iMin, iMax) | uint8_t id — PIDループ番号。0 ~ 255を使用可能float iMinfloat iMax | void | PID積分項の最小値と最大値を制限します。 |
MPINO-16A8R8TのA0アナログ入力を0~1023の生値として読み、PID計算に使用します。計算結果はシリアルモニタに表示するだけで、出力端子は駆動しません。接続するセンサに合わせてA0の電圧・電流設定を確認してください。
const uint8_t PID_ID = 0; void setup() { Serial.begin(115200); IpidSet(PID_ID, 2.0F, 0.4F, 0.1F, 100, 0.0F, 1023.0F); // PID係数、計算周期、出力範囲を設定します。 IpidItermLimit(PID_ID, -100.0F, 100.0F); // 積分項を-100~100に制限します。 } void loop() { const float currentValue = analogRead(A0); // A0のADC生値を読み出します。 const float result = IpidRun(PID_ID, currentValue, 512.0F); // A0の生値と目標値512からPID出力を計算します。 Serial.println(result); delay(100); }
IpidRun()はsampleMs周期に達するまでは直前の出力値を保持します。loop()で繰り返し呼び出しても構いません。IpidItermLimit()を使用します。IpidReset()は積分項、直前のPV、直前の出力値を初期化します。idは1つの制御ループだけに使用します。