What are good strategies for tuning PID loops?

興味のある方のために、私の経験から少し話を広げてみたいと思います。

安定性

なぜ制御ループが不安定になるのかについて最初にお話ししましょう。 この議論では、線形システムを想定します。 非公式には、これは、制御信号が与えられた周波数の正弦波である場合、観察された出力は同じ周波数であり、制御システムの振幅を変更すると、出力は同じ比率で応答することを意味します。

制御経路を見ると、設定値、PIDコントローラー、システム (別名「プラント」)、そして、センサーがあります。 固定されたセットポイントとセンサーからの正弦波を想像してみてください (これは、センサーでの現実世界の外乱と同じで、フィードバックされます)。 不安定なシステムでは、フィードバックによって制御ループが誤差を減らすのではなく、増幅するようになり、時間が経つにつれて振幅が大きくなります。 このような現象が起こる理由は、遅延、またはこの特定の周波数では入力と出力の間の位相シフトによるものです。 ある周波数において、オープンループ(すなわちフィードバックなし)のシフトと出力の振幅を見ることができ、それらをすべてグラフに描くと、ボードプロットのようなものが得られます。 この開ループのグラフで、誤差が増幅され続けるような状況があれば、それは不安定なシステムであると言える。 遅延が波長の1/2以下であったり、ゲインが1倍以下であれば、システムは安定となる。

これらの手動メソッドの主な問題は、ブラインドで飛行していることであり、貧弱な制御システムを得ることがほぼ保証されています。

また、P、I、D の意味は、センサーが何を測定し、どんな制御をかけているかに関連していることを心に留めておいてください。 自作のコントローラーでよくある間違いは、実際にはそうでないのに、P を適用していると思い込んでしまうことです。 モーターコントローラは、位置ループの上に速度ループがあり、さらにその上にトルクループがあることがよくあります。 (カスケード)

さて、これは私たちにどのように役立つのでしょうか。

最初のポイントは、独自の PID コントローラーを構築する場合、開ループ応答を測定する方法も構築する必要があるということです。 コントローラへの入力で周波数スイープを行い、フィードバックを切り離した状態でセンサーの出力を測定します。 そうすれば、開ループのボード線図を描くことができ、システムが安定している理由や、さまざまな制御をトレードオフできるようになります。 また、閉ループ応答を測定することも有用で、ループが閉じている間に設定値の周波数掃引を行うことで、どのようなシステムでも測定することができます。

ボンネットの下で起こっていることをまったく理解せずに、単に制御を微調整しているだけでは、システムを最適化することはできません。 これらのシステムに関する直感を構築することは、それほど難しいことではありません。 例えば、比例ゲインは位相に影響を与えず、単純に全周波数にわたって開ループゲインを増加させます。 つまり、手動チューニングで比例ゲインを増加させるときにやっていることは、位相が-180になる周波数を見つけることなのです。

最高の閉ループ パフォーマンスを得るには、多くの場合、コントローラー ゲインだけでなく、システムを調整する必要があります。

最高の閉ループ性能を得るには、多くの場合、コントローラーの利得だけでなく、システムを微調整することが必要です。 これにより、制御パラメーターを増加させ、最高の開ループおよび閉ループ帯域幅を得ることができます。 モーター制御アプリケーションにおける私の経験では、比例ゲインは「仕事」の大部分を行うべきものであり、積分器は「残り」の部分を行うものです。 D項は全く必要ないと思います。

安全性が懸念される場合 (非常に強力なモーターまたはモーターが制御不能になることで破壊される可能性があるシステム)、システムを保護するために、チューニングを開始する前に何らかの制限を設ける必要があります (たとえば、電流制限、最大位置誤差)。 それから、パラメータの範囲について、ある種の感触を得る必要があります。 フィードバックが1回転あたり40カウントの場合と4000カウントの場合では、パラメータはあるシステムに対して100分の1になります。 私のアプローチとしては、まず制御性の悪い範囲を見つけ、そこからP、Iと段階的に上げていくことです(ただし、この場合も盲目的になります)。

閉ループを超える

閉ループは、システムから誤差を除去しようとします。 それは常に、多少制限されたパフォーマンスを持つことになります。 その方法の 1 つが、フィードフォワードと呼ばれる技術です。 フィードフォワードでは、コントローラーの周りを回って、システムに直接コマンドを送り込みます。 例えば、加速度フィードフォワードがその例です。 モータのトルク定数と負荷がわかっていれば、負荷のある加速度を得るためにどれくらいの電流を流せばいいのか、だいたいわかります。 指令入力の加速度を定数で割って、コントローラの駆動指令に加えるだけです。 基本的には、コントローラーがない場合にシステムを駆動するために必要なことを行っているわけで、これに近ければ近いほど、ループが取り出さなければならない誤差が少なくなり、システムの性能が向上します。 これは、実際のところ、大きな違いです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です