ユーザ用ツール

サイト用ツール


ja-jp_commands:reference:ipidreset

IpidReset()

IpidReset()はPIDの積分値と内部状態を初期化します。

IpidReset コマンドの動作フロー

void IpidReset(uint8_t id)

コマンド

コマンド 引数 戻り値 動作
IpidReset(id) uint8_t id — PIDループ番号。0 ~ 255を使用可能 void PIDの積分値と内部状態を初期化します。

使用例

MPINO-16A8R8TのA0をPIDの現在値として読みます。D22入力がLOWからHIGHに変わると、PIDの内部状態を一度初期化します。計算結果はシリアルモニタにのみ表示します。A0の設定とD22の配線は製品仕様で確認してください。

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係数、計算周期、出力範囲を設定します。
}
 
void loop() {
  static bool wasHigh = false;
  const bool isHigh = digitalRead(22) == HIGH;
  if (isHigh && !wasHigh) IpidReset(PID_ID);  // D22の立ち上がりでPID内部状態を初期化します。
  wasHigh = isHigh;
  const float currentValue = analogRead(A0);  // A0のADC生値を読み出します。
  const float result = IpidRun(PID_ID, currentValue, 512.0F);  // A0の生値と目標値512からPID出力を計算します。
  Serial.println(result);
  delay(100);
}

注意事項

  • PID出力は現場機器に直接影響する場合があるため、最初は低い出力範囲と小さなゲインでテストしてください。
  • IpidRun()sampleMs周期に達するまでは直前の出力値を保持します。loop()で繰り返し呼び出しても構いません。
  • 積分項は出力制限を基準に自動制限され、ワインドアップを低減します。追加の制限が必要な場合はIpidItermLimit()を使用します。
  • 微分項は設定値変更による急激な跳ねを抑えるため、PV変化量を基準に計算します。
  • IpidReset()は積分項、直前のPV、直前の出力値を初期化します。
  • 同じidは1つの制御ループだけに使用します。

同じカテゴリの内蔵コマンド

ja-jp_commands/reference/ipidreset.txt · 最終更新: by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki