====== IpidSet() ====== ''IpidSet()''はPID係数、計算周期と出力範囲を設定します。 {{:ja-jp_commands:reference:ipidset.svg?900|IpidSet コマンドの動作フロー}} ''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 outMin''\\ ''float 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); } ===== 注意事項 ===== * PID出力は現場機器に直接影響する場合があるため、最初は低い出力範囲と小さなゲインでテストしてください。 * ''IpidRun()''は''sampleMs''周期に達するまでは直前の出力値を保持します。''loop()''で繰り返し呼び出しても構いません。 * 積分項は出力制限を基準に自動制限され、ワインドアップを低減します。追加の制限が必要な場合は''IpidItermLimit()''を使用します。 * 微分項は設定値変更による急激な跳ねを抑えるため、PV変化量を基準に計算します。 * ''IpidReset()''は積分項、直前のPV、直前の出力値を初期化します。 * 同じ''id''は1つの制御ループだけに使用します。 ===== 同じカテゴリの内蔵コマンド ===== * [[:ja-jp_commands:reference:ipidrun|IpidRun() 詳細説明を見る]] * [[:ja-jp_commands:reference:ipidreset|IpidReset() 詳細説明を見る]] * [[:ja-jp_commands:reference:ipidreverse|IpidReverse() 詳細説明を見る]] * [[:ja-jp_commands:reference:ipiditermlimit|IpidItermLimit() 詳細説明を見る]] * [[:ja-jp_commands:reference:ipidoutput|IpidOutput() 詳細説明を見る]] [[:ja-jp_commands:builtin|← 内蔵コマンド一覧]]