自己調整PIDのようなコントローラーを実装する方法


15

次の特性を持つシステムの温度を制御するためのマイクロコントローラープログラムを作成しようとしています。

  • 出力は、固定サイクル周波数(1時間あたり2〜10)でのみオンまたはオフにできます。
  • プラントの応答が遅い(測定可能な温度変化には10分以上かかる)。
  • 植物は、環境条件に基づいて温度を失います。
  • セットポイントは、ユーザーの需要に基づいて大きなステップで変化する可能性があります。

エラーを最小限に抑え、入力として提供されるサイクルレートを遵守することを目的としたコントローラーを作成しています。

これはPIコントローラーで簡単に実行でき、出力はデューティサイクルに変換されます。問題は、プログラムが正しいKp、Ki定数を自動調整して選択し、さまざまな環境条件と加熱能力の変化に適応する必要があることです。したがって、事前にPIコントローラーを調整することはあまり有用ではありません。

実際のPIまたはPIDの使用は必須ではありません。ファジィロジックが役立つ場合は使用できます。また、チップ上にシステム応答と熱損失(線形近似)をモデル化する機械学習アルゴリズムがあり、測定されたステップ応答に関する情報を提示します。その情報をどうするか分からないだけです。

いくつかの投稿は、モデリングデータを使用してPIをオンラインで調整できることを示唆しているほか、ファジィ論理を使用してPIを調整できることを示唆するラボビューマニュアルも示しています。

私の質問は、この種のシナリオ(PID、fuzzy-pid、コンボリューションなど)に最適なアプローチは何か、実際にソフトウェア/プラクティスにどのように実装するかです。

私はEEではないので、どんな入力でも大歓迎です。


1
シンボリックアルゴリズムを使用して、関心のあるRobotics SEでPIDコントローラーを自動的に調整することについての回答を書きました。
embedded.kyle

@ embedded.kyle素晴らしい、私はシンプレックス/グレイテストアセントを理解しています。彼がx1、x2で何をしていたかわかりますか?それらをPID定数に関連付けるのに問題があります。
マンドマンド

1
しばらく経ちましたが、x1 = P、x2 = I、x3 = Dのようなものを使用したと思います。重心であるx0は、安定性の測定が最も重要です。私のアプリケーションであるモーター制御では、2つのループがありました。一方のx0は速度で、もう一方のx0は電流でした。詳細はこちらをご覧ください。
embedded.kyle

@ embedded.kyleあなたのコメントを答えに変えてもいいですか?必要に応じて追加情報を追加します。-thx
マンドマンド

報奨金?ああ少年!完了しました。
embedded.kyle

回答:


7

私はPIDを時代遅れと呼ぶまでは行きません。しかし、確かに改善の余地があります。PID制御ループを自動調整する1つの方法は、山登りシンプレックスアルゴリズムの形式であるNelder-Meadメソッドを使用することです。時間の経過とともに移動するターゲットパラメータで収束および再収束できるという利点があります。

ネルダーミード法による山登り

この論文から:

たとえば、PIDパラメータチューニングの場合{K P、K I、K D }、シンプレックスは四面体です。Nelder–Meadは、シンプレックスとして配置された各テストポイントで測定された目的関数の動作を外挿することにより、シンプレックスの新しいテスト位置を生成します。次に、アルゴリズムは、これらのテストポイントの1つを新しいテストポイントに置き換えることを選択するため、テクニックが進歩します。

私の特定のアプリケーションは、モーター制御用でした。PID電流制御ループとPI速度制御ループの2つのループがありました。頂点をそれぞれP、I、およびDに設定し、ループの出力に関する統計を実行しました。次に、生成された電流または速度制御ターゲットがいくつかの標準偏差内に収まるまで、反射、膨張、収縮、および縮小を繰り返し実行しました。

私たちの製品では、VPはモーターがどのように「鳴る」かを非常に心配していました。そして、判明したように、現在のターゲットが数学的に最適な値よりも少し跳ね返ったときのほうが「聞こえる」。したがって、ユーザーのモーター音の認識も考慮されるように、モーターの実行中にアルゴリズムをシークさせるという点で、調整は「ライブ」で行われました。気に入ったパラメーターを見つけた後、それらはハードコードされており、変更されていません。

「自動チューニングの一部がユーザーに受け入れられない場合でも、システムを振動させる」と述べているので、これはおそらく理想的ではありません。私たちのシステムは、それが自動調整されている間、最も確かに振動し、他の恐ろしいことをします。

ただし、PIDコントローラーの2つのコピーを実行できます。「ライブ」であり、実際にプロセスを制御するもの。そして、「ライブ」コントローラーと同じ入力を供給しながら、常に自動調整されていた秒。自動調整されたコントローラーの出力が「より良い」またはより安定した場合、係数を「ライブ」コントローラーにスワップできます。コントローラーは、目的のパフォーマンスが達成されるまでプロセスの修正を実行します。これにより、自動チューニング中にユーザーが知覚できる振動を防ぐことができます。ただし、入力が大幅に変化し、PIDコントローラーが最適でなくなった場合、自動調整は新しい係数が利用可能になったときに交換できます。


NMメソッドでは、目的関数(つまりユーザーの実世界)でワイルドポイントを実行する必要があります。ただし、センサー測定に基づいて、マイクロコントローラー自体に粗いモデル(空間状態?)を構築できると考えています。次に、最適化された「シャドー」PIコントローラーを実行します。PIを既知の設定に調整し、センサーの読み取り値とシステムの応答に基づいてKpとKiをスケーリングすることができる可能性があるため、これが過剰に行われるかどうかはわかりません。いずれにせよ、よくやった。
マンドマンド

@MandoMandoありがとうございます!そして、「シャドウ」PIコントローラーという用語が本当に好きです。
embedded.kyle

3

PIDコントローラーは、制御されるシステムの動作が、制御刺激、制御刺激の積分、およびその最初の積分の積分であると合理的に近似できる状況で役立ちます。一部の温度制御システムは、刺激によって均一に加熱される物体があり、その物体が温度差に比例した速度で他の物体に均一に熱を伝達する場合、そのような基準を満たす場合があります。たとえば、空気が単一の均一な温度であると見なされるのに十分な空気循環がある場合、最初のオブジェクトは発熱体であり、2番目のオブジェクトは部屋を循環する空気です。それよりも複雑な熱モデルの場合(たとえば、固体媒体内の温度勾配を伴う可能性があるもの)、

ヒーターがオンのときにコントローラーを使用して、出力がすぐにオフになった場合に調整対象のデバイスがどれだけ熱くなるかを継続的に推定し、ヒーターはその後許容されるとすぐにオンになりました。また、ヒーターをさらに1秒、2秒、3秒オンのままにしておくと、これらの値がどのようになるかを推定します。次に、ヒーターがオフになったら、同様の計算を実行しますが、オン/オフ、ホット/コールドなどの役割を交換して、いつオンに戻るかを決定します。システムの熱的挙動によっては、「最小/最大」先読み戦略を使用して、1つまたは2つ先を見る必要がある場合があります。


1

制御の状態(オンまたはオフ)を1時間に2〜10回変更できることは、デューティサイクル制御に役立ちません。PIループの出力は、誤差の関数として大きさが変化する制御信号になります。制御の「周波数」は、(現実的に)バイナリ入力(オフまたはオン)のみを受け入れることができます。許容できるデューティサイクルは、数分の1ヘルツです。

物事を単純化し、ヒステリシス制御を使用したい場合があります。

  • 温度が下限を超えるとシステムがオンになります
  • 温度が上限を超えるとシステムはオフになります
  • 制御出力の跳ね返りを防ぐために、上限と下限の間に十分な距離があります

PI出力は、60%で、オンタイムに変換するという考え方です。サイクルの60%-> 0.6 x 30分-> 30分のサイクルで18分オン、12分オフ。提案するバングバングコントローラーは、必要なサイクルレート(たとえば、1時間にn回以下のスイッチオン)を維持し、同時に低いエラーを維持することを保証しません。オフタイム中の損失のバランスを取るために、システムが一定期間一時的にオーバーシュートすることが必要になる場合があります。
マンドマンド

1

典型的な(確かに単純化する方法ですが)ゲインスケジューリングと呼ばれます。これは、システムが変更する観測可能な変数(または複数の変数)(スケジューリングパラメーター)がある場合の非線形制御への古典的なアプローチです。あなたのシステムでは、その変数はおそらく温度です。アイデアは、スケジューリングパラメーター(温度)のさまざまな値でコントローラーゲインのリストを作成し、スケジューリングパラメーターが変更されると、コントローラーでそれらのゲイン(PI、PID、状態フィードバックなど)を使用することです。これが本当に単純に聞こえるのは、それが理由です。ただし、動作し、非常に複雑なシステムで使用されます。

おしゃれにしたい場合は、機械学習アルゴリズムを実装してゲインマトリックスを生成できます。これは、あなたが説明しているように見える進化と学習のコントローラーになります。ただし、システムを完全に特徴付けることができれば、やり過ぎになる可能性があります。

編集:申し訳ありませんが、私は少し誤解しています。温度を制御しようとしているので、あなたが言った「環境条件」がスケジューリングパラメータになります。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.