コントローラーゲインの調整は難しい場合があります。適切なソリューションに収束する安定したシステムを得るために、どのような一般的な戦略がうまく機能しますか?
コントローラーゲインの調整は難しい場合があります。適切なソリューションに収束する安定したシステムを得るために、どのような一般的な戦略がうまく機能しますか?
回答:
ギアリングがほとんどまたはまったくない小型の低トルクモーターの場合、良好なベースライン調整を得るために使用できる手順の1つは、外乱に対する応答を調べることです。
PIDを調整するには、次の手順を使用します。
使用する妨害は、コントローラが接続されているメカニズムによって異なります。通常、セットポイントから手で機構を動かして放すだけで十分です。振動がますます大きくなる場合、Pゲインを下げる必要があります。
Dゲインの設定が高すぎると、システムはチャタリングを開始します(Pゲイン振動よりも高い周波数で振動します)。これが発生した場合、停止するまでDゲインを下げます。
このテクニックには名前があると思います。見つけたらここに置きます。
私が大学で教えられたハウプトメックの答えに似た実験方法:
ツィーグラー-ニコルス法を使用すると、振動周期の正確な数を取得することができれば、より正確です。通常、指定された「クラシックPID」番号を使用して振動が発生するため、常に最適とは限りません。
立ち上がり時間、オーバーシュート、整定時間、定常状態誤差、および安定性に対する各項の影響に関する一般的な規則については、IEEE Control SystemsのLi、Ang、およびChongによる「PID Control System Analysis and Design」の表1を参照してくださいマガジン。
Embedded.comは私の記事を再び動かしましたが、今はここにあります。これは、PIDループの記述方法(浮動小数点以外での実行方法の設定は読者の演習として残されています)とそれを調整する方法の両方を示しています。
最良の方法は、あなたの能力に大きく依存します。あなたが経験豊富な制御システムの手であると仮定して、最良のチューニングを得る方法は、通常、プラントの応答を測定することです( "plant" == "あなたが制御しているもの")。測定では、プラントのモデルを抽出し、それに合わせて設計するか、単に測定に直接設計します。
特定の困難なプラントでは、満足のいく測定を行うことができないことがわかります。その場合は、モデルのみを使用する必要があります。これらはまれですが、動作させると満足のいくものになります。
Sebastian Thrunは、「ロボット車のプログラミング方法」クラスでPIDを調整するための簡単なアルゴリズムを紹介しました。それは「ひねり」と呼ばれます、彼はそれをここで説明します。
Twiddleは極小値を見つける傾向があります。つまり、大丈夫ですが、状況には最適ではない3つの定数のセットを思いつくことができます。PID定数の調整の問題は、特定のパラメーターを見つけて実用性を最大化する(この場合、PIDアルゴリズムのエラーを最小化する)より一般的な検索問題のサブセットです。山登り、シミュレーテッドアニーリング、遺伝的アルゴリズムなど、この問題に対する他の一般的な解決策を調べることができます。これにより、より最適な解決策が見つかる可能性があります。
他の2つの答えとは対照的に、PIDを手動で調整する良い方法はKdを無視することです。したがって、0から開始してターゲットに到達するまでKpを増やし、その後Kiを増やして定常状態エラーを取り除きます。
Kdはノイズへの反応が悪いため問題を混乱させ、アナログ入力にフィルターを追加し始めてから、コントロールの速度を落とし、全体の動作を難しくすることに加えて、それが何をするのかを質問します...
私を混乱させてしまうもう1つのことは、PID方程式が標準形式であるか、独立(ウィキペディアでは並列)形式であるかということです。Kiの効果は、フォームがあなたが思っているものに対して間違った方法である場合、逆になります。両方のタイプは自動化で使用され、時にはそれらを切り替えるオプションがあります。
システムモデリング
もちろん、他の回答で述べたように実験的なチューニングを行うこともできますが、制御したいものに対して合理的な動的モデルを定義でき、そのパラメーターを特定できる場合は、適切に基づいてコントローラーを設計できるはずです- オーバーシュート、立ち上がり時間、整定時間、定常状態エラーなどの定義済み基準。
MATLABには、これらの基準の組み合わせに合わせて最適化するようにコントローラーを調整できるツールもあります。これにより、さらに使いやすくなります。
コントローラーを知る
PIDコントローラーの各パラメーターが何をするかを学ぶことも非常に役立ちます。すべての実験アルゴリズムは、何らかの形でこの種の知識に基づいています。指示に従うだけでなく、自分でその感覚を得ることができる場合は、コントローラーを手動で調整する方が簡単な場合があります。
実世界の問題
コントローラーを調整するときに、とりわけ、ワインドアップ、不適切なサンプリングレート、飽和のいずれかが発生する可能性があります。
結論
最終的には、システムが実際にどのように機能し、どのように実験できるかについての知識を得るために、システムで実際に何ができるかにかかっています。最良の方法は、実際にPIDコントローラーと制御理論、IMOについて実際に学習することですが、私は偏見があります:)
興味のある人のために、私の経験から少し拡大してみます。問題は、やや近づきにくい(時には役に立たない)制御理論がたくさんあり、不正確なことが多いシステムに関する仮定を立てる経験則があることだと思います。
安定
まず、制御ループが不安定になる理由について説明しましょう。この議論では、線形システムを想定します。非公式には、これは、制御信号が特定の周波数の正弦波である場合、観測される出力は同じ周波数であり、制御システムの振幅を変更すると、出力は同じ比率で応答することを意味します。この仮定は、多くの実世界のシステムにとって適切な近似であり、別々の周波数を個別に確認できます。
制御パスを見ると、セットポイント、PIDコントローラー、システム(別名「プラント」)、そしてセンサーがあります。固定の設定点とセンサーからの正弦波を想像してください(これは、センサーでフィードバックされる実際の外乱に等しい)。不安定なシステムでは、フィードバックによって制御ループがエラーを減少させるのではなく増幅し、時間の経過とともに振幅が増加します。これが発生する理由は、遅延が原因であるか、この特定の周波数では入力と出力の間の位相シフトが原因です。与えられた周波数に対して、そのオープンループ(つまり、フィードバックなし)シフトと出力の振幅を見ることができ、グラフ上にそれらをすべて描画すると、ボード線図のようなものが得られます。。このオープンループグラフでエラーが増幅し続ける状況がある場合、システムが不安定になります。遅延が波長の1/2未満、またはゲインがx1未満の場合、システムは安定します。実際には、その時点からいくらかのマージン(ゲインマージンと位相マージン)が必要です。これが、多くの手動/ヒューリスティック手法でこの「後退」を見る理由です。
これらの手動による方法の主な問題は、あなたが盲目で飛んでいるということです。そして、あなたは貧弱な制御システムを得ることがほとんど保証されているということです。
また、P、I、およびDの意味は、センサーが測定しているものと、適用しているコントロールに関連していることに留意してください。自作コントローラーのよくある間違いは、実際にはそうではないのにPを適用していると考えることです。多くの場合、モーターコントローラーには位置ループがあり、トルクループ上で実行される速度ループ上で実行されます。(カスケード)
わかりましたが、これはどのように役立ちますか?
最初に指摘したいのは、独自のPIDコントローラーを構築する場合は、開ループ応答を測定する方法も構築する必要があるということです。コントローラーへの入力で周波数スイープを行い、フィードバックを切断した状態でセンサーの出力を測定します。次に、開ループボード線図を描画して、システムが安定している理由を確認し、さまざまなコントロールをトレードオフできます。閉ループ応答を測定することも有用であり、ループが閉じている間に設定点の周波数掃引を行うことにより、任意のシステムでそれを行うことができます。これらはどちらもそれほど難しくはなく、多くの理論的知識を必要としません。
内部で何が行われているかを理解せずにコントロールを微調整するだけでは、システムを最適化することはできません。これらのシステムに関する直感を構築するのはそれほど難しくありません。たとえば、比例ゲインは位相に影響を与えませんが、すべての周波数で開ループゲインを増加させるだけです。そのため、これらすべての手動チューニング方法で比例ゲインを増やしているときに行うことは、位相が-180になる周波数を見つけることです。これを参照して、さまざまなコントロールが周波数応答に与える影響についてさらに理解してください。
非常に多くの場合、最高のクローズドループパフォーマンスを得るには、コントローラーのゲインだけでなく、システムの調整が必要です。あなたが望むのは、システムを可能な限り「堅く」することです。これにより、制御パラメータを増やして、最適な開ループ帯域幅と閉ループ帯域幅を取得できます。モーター制御アプリケーションでの私の経験では、比例ゲインは「作業」のほとんどを行い、積分器は「残り」を行うべきです。Dタームはまったく必要ないと思います。ローパスフィルターとノッチフィルターを使用すると、機械的な共振がある場合に非常に役立ちますが、ボード線図なしでそれらを設定するのは非常に困難です(閉ループで観測される発振周波数は、開ループの発振周波数とは異なる場合があります)。
安全性が懸念される場合(非常に強力なモーターまたはモーターが制御不能になるとシステムが破壊される可能性があります)、システムを保護するためにチューニングを開始する前にいくつかの制限(電流制限、最大位置エラーなど)を設定する必要があります。次に、パラメーターの範囲について何らかの感覚を得る必要があります。フィードバックに1回転あたり40カウントまたは1回転あたり4000カウントがある場合、特定のシステムでパラメーターは100倍になります。私のアプローチは、まずコントロール性の悪い範囲を見つけてから、Pから始めて、そこからランプアップすることです(ただし、やはりブラインドで飛んでいます)。バックオフすると、この安定マージンが作成されます。
閉ループを超えて
クローズドループは、システムからエラーを除去しようとします。パフォーマンスは常に多少制限されます。あなたがしたいことは、閉ループコントローラが見るエラーを最小限にすることであり、それを行う1つの方法は、フィードフォワードと呼ばれる技術を使用することです。フィードフォワードでは、コントローラーを回って、システムに直接コマンドを送信します。その例として、加速フィードフォワードがあります。モーターのトルクが一定であり、負荷がわかっている場合、負荷の特定の加速度を得るために駆動する必要がある電流の量をほとんど知ることができます。コマンド入力の加速度を取得し、定数で乗算し、それをコントローラーの駆動コマンドに追加するだけです。基本的には、コントローラーがなければシステムを駆動するのに必要なことを実行しており、ループを近づけるほどエラーが少なくなり、システムのパフォーマンスが向上します。それは実際に大きな違いを生みます。
Ziegler-Nicholsは簡単な手動方法です。より堅牢な方法も存在します-これらは通常、数学的なソリューション(分析、反復最適化など)に依存しています
さらに、自動化されたいくつかの手法については、「自己調整PID」をグーグルで検索します。私のお気に入りは、ニューラルネットワークをPIDチューニングに適用することです。
0.01sec
)時間で)20secs
3
2000
Ziegler–Nicholsと呼ばれるより速いアプローチがあります: