2012-11-24 9 views
11

PIDコントローラの不可欠な部分を理解していません。私は分かりませんPIDコントローラの一体部分

previous_error = 0 
integral = 0 
start: 
    error = setpoint - measured_value 
    integral = integral + error*dt 
    derivative = (error - previous_error)/dt 
    output = Kp*error + Ki*integral + Kd*derivative 
    previous_error = error 
    wait(dt) 
    goto start 

Integralが最初にゼロに設定されていると仮定しましょう。そして、そのループの中で、時間の経過と共にエラーを統合しています。測定値または設定値を(正の)変化させると、エラーは正になり、積分は時間の経過とともに(最初から)「食べる」ことになります。しかし、私が理解していないことは、エラーがゼロまで安定すると、積分部分はまだいくつかの値(時間の経過とともに積分されたエラー)を持ち、コントローラの出力値に寄与しますが、そうではありません。

誰かが私にそれを説明できますか?

+0

興味のある方は、この正確なアルゴリズムを実装してループ速度を制御してください。 http://stackoverflow.com/questions/38377820/throttling-await-for-inbound-messages – Jim

答えて

1

このように見てみましょう。エラー自体がゼロに安定するだけでは不十分です。 の整数がゼロになる必要があります。これは、測定値の平均値が設定値と一致することを意味します。

悪い例は、いくつかのKi、Kp、Kdでゼロから100%の値に達することです。

x = 0,60,80,90,98,99,100,100,100。

xの値は?平均値は80.777です。 100にも近くない。

+1

私はまだそれを取得しません。あなたはもっとそれを説明できますか? – user561838

+0

しかし、測定値が設定値をオーバーシュートする場合にのみ、積分値はゼロになります(負の誤差が必要なため)。あなたの例では、測定値が100(=設定値)になるときに(Kiが1でdtも1)、コントローラの出力はまだゼロではない(私はそれが振動すると思います)。 しかし、PI(D)コントローラがうまく調整されていれば、オーバーシュートはありません。私はまだそれを取得しません:( – user561838

+2

私は反対しなければなりません。一方、P/Dのプロパティは、宛先に到達しないプロパティがあります。 )= I(n)*α+(1-α)*誤差は、現在の瞬間に重点を置く初期の誤差をゆっくりと忘れる。 –

1

制御したいシステムとセンサーの品質によっては、コントローラーとシステム/プラントの間に何らかの外乱が常に存在します。このような外乱が存在する場合、コントローラの積分部分はゼロにはなりませんが、代わりにそれに対抗します。これは、システムの出力が基準(すなわち、積分値が外乱と反対である)に等しくなるまで積分が変化し続けるという事実によって引き起こされる。

は、例えばthis pageが制御偶然にを記述する参照:システムと入力が積分ははるかに低い最終エラーが発生したこの、いくつかのケースではより多くのオーバーシュートに反対しようとする特定の文字を、持っているときsteady state errorが可能です。

また、センサーの精度/ノイズは、積分の値の精度に制限を課す可能性があり、ゼロ付近で振動する可能性があります。

1

定常状態の誤差にはI項が必要です。 Wikipediaのサンプルグラフを見てください。

http://en.wikipedia.org/wiki/File:Change_with_Ki.png

あなたは、I項のゲインを変更することから、グラフの変化を見ることができます。明らかに、Ki = 2は、積極的なワインドアップのために高くなります。これは、その激しいオーバーシュートを引き起こします。 Ki = .5は大丈夫ですが、できるだけ早く安定した値に到達したい場合は、Kiを少し増やす必要があります。 Ki = 1を見ると、少しオーバーシュートしますが、Ki = 0.5よりも速く安定します。そのようなトレードオフが価値があるかどうかを判断する必要があります。

9

定常状態の出力を考えてください... measured_valueを設定値にし、誤差をゼロにし、測定値にプロセスを安定させるために必要な値を出力します。 (場合によってはゼロになることもありますが、出力が必ずしもゼロである必要はありません。たとえば、部屋に72フィートの温度を維持するためにヒーターを6.5に設定する必要があります)。

エラーがゼロの場合、比例誤差項は出力に何も寄与しません。

プロセスが定常状態にある場合、error-previous_errorはゼロであり、微分項は何も寄与しません。

出力が定常状態でプロセスを保持する適切な設定である場合、積分項は出力値を提供する唯一の項でなければなりません。測定時間に観測時間を掛けた測定単位で測定された誤りの適切な記憶を蓄積し、これはKi項によって出力単位に変換することができ、これはoutputUnits /(error * measurementTime)の単位である。

恒温槽の例として、部屋の電気ヒーターのつまみの出力が0-11単位で、1分ごとに72Fの設定点に対して部屋の温度Fを測定している場合、積分はあなたが記録しているdegreesFtooCold *分を合計し、Kiの項は観測された誤差の合計をダイヤル上の単位に変換します。

定常状態で積分値が非ゼロであることは完全に良好であり、期待されます。

1

ここでの説明の一部は、一体部分がオーバーシュートすると、比例部分がそれに対抗し始めるということです。したがって、2番目のオーバーシュートは小さく、3番目のオーバーシュートは小さくなります。しかし、上述したように、通常はエラーがゼロでないプロセスノイズがあり、コントローラーは決して一定の出力に達しませんが、出力の変動は非常に小さくなければなりません。

0

PID制御のミスをIntergralの用語に関して永続化するため、PID定義に疑問を持つ理由があります。 間違いは次のように説明することができます。 1)エラーがゼロであっても、Intergralという用語は出力アクションを引き起こします。 2)Intergralは、もはや関連性のない以前のエラーに基づいています。 コントローラが入力と出力を比較し、負のフィードバックを使用して誤差をゼロにすると、比例制御で誤差が0になることがあります。

正しいPIDの用語: D term:加算ジャンクションで結合される定常INPUTに変更(微分)を追加します。

I項:加算ジャンクションで結合される定常状態OUTPUTの負(負帰還)に対する変更(微分)を追加します。

横切っ組み合わせた場合の統合(前後)出力負帰還

分化であるが、非常に高いゲームと負極性(反転)と加算ジャンクションに接続されています。

P term:所望の入力を所望のINPUTで割ったもの、またはOUTPUTによって供給された信号の合計を、INPUTによって加算接合部に供給された 信号で割った比です。

D term、Differentiationは入力に対する出力レスポンスを高速化し、出力が正しい値に早く近づくようにします。

インテグレーションは、正しい/望ましい値に近づくにつれて出力応答を遅くします。

関連する問題