Open-Loop PID Autotuner ブロックを使用した PID コントローラーのリアルタイム調整
この例では、Open-Loop PID Autotuner ブロックを使用してシミュレーションとリアルタイムの両方でエンジン速度制御システムの PI コントローラーを調整する方法を説明します。
Open-Loop PID Autotuner ブロック
Open-Loop PID Autotuner ブロックを使用して、単ループ PID コントローラーをリアルタイムで調整することができます。プラントに摂動信号を挿入する開ループ実験を行い、目的の帯域幅近傍で推定したプラント周波数応答に基づく PID ゲインを計算します。
Open-Loop PID Autotuner ブロックは、リアルタイム アプリケーションにおける 2 つの一般的な PID 調整シナリオに対応します。
ブロックをハードウェアに展開し、Simulink® なしでスタンドアロンのリアルタイム アプリケーションで使用します。
ブロックをハードウェアに展開しますが、エクスターナル モードを使用して、リアルタイムの調整プロセスを Simulink で監視および管理します。エクスターナル モードでは、ホスト コンピューター上で実行される Simulink のブロック線図と、ハードウェアで実行される生成コードの間の通信が可能になります。
この例では 2 番目のシナリオに焦点を当てます。ここではエクスターナル モードを使用してエンジン速度制御システムをリアルタイムで調整するために Open-Loop PID Autotuner ブロックが使用されます。
エンジン速度モデル
Simulink モデルは、PID ブロック、Open-Loop PID Autotuner ブロック、およびエンジン モデルを含んでいます。
mdl = 'scdspeedctrlOnlinePIDTuning';
open_system(mdl)
PI コントローラーの初期ゲインは P = 0.01 と I = 0.01 で、"P" 入力端子と "I" 入力端子を使って PID ブロックに外部から提供されます。外部からの P ゲインと I ゲインを使用すると、Open-Loop PID Autotuner ブロックで新しいゲインが計算されてから、これらを変更することができます。
Open-Loop PID Autotuner ブロックは PID ブロックとエンジン モデルの間に挿入されます。開ループ実験の開始と終了には start/stop の信号が使用されます。実験を実行していないときは、Open-Loop PID Autotuner ブロックが 1 のゲインのブロックのように動作し、"u" 信号は "u+Δu" に直接渡されます。実験が終了すると、ブロックは PID ゲインを調整して "pid gains" 端子に出力します。
物理プラントでリアルタイムで Open-Loop PID Autotuner ブロックを使用する場合、考慮すべき重要な点がいくつかあります。
調整プロセス中に開ループ実験が実行されるため、プラントは漸近的に安定でなければなりません。プラントが単一の積分器をもつ場合でも、プラント DC ゲインを推定しないことを選択することでブロックを使用することはできます。ただし、どちらの場合でも調整プロセス中にプラントの動作を注意深く監視して、プラントが望ましくない操作条件に近づき過ぎた場合には素早く介入しなければなりません。
プラントの周波数応答をリアルタイムでより正確に推定できるように、調整プロセス中に発生する負荷外乱を最小限に抑える必要があります。ブロックは、プラント出力が挿入された摂動信号のみへの応答であり、負荷外乱によってこの出力が歪むものと仮定します。
PID ブロックの "トラッキング モード" (TR 入力端子) をオンにして、調整プロセス中に PID ブロックが実際のプラント入力 "u+Δu" に追従できるようにします。この機能は、調整プロセスの完了後にループが閉じて PID ブロックが制御を再開する際にバンプレス切り替えが提供されるよう、常に使用する必要があります。
Open-Loop PID Autotuner ブロックの構成
Open-Loop PID Autotuner ブロックをプラント モデルと PID ブロックに正しく接続した後、ブロック ダイアログを開いて調整と実験の設定を指定します。
[調整] タブには 2 つの主要な調整設定があります。
ターゲットの帯域幅: コントローラーの望ましい応答速度を指定します。この例では目的の立ち上がり時間が 1 秒なので、2 ラジアン/秒を選択します。
ターゲットの位相余裕: コントローラーの望ましいロバスト性を指定します。この例では、通常約 5% のオーバーシュートが得られる既定値の 60 度を選択します。
[実験] タブには 2 つの主要な実験設定があります。
正弦波振幅: 挿入される正弦波の振幅を指定します。この例では、4 つすべての正弦波に 0.1 を選択します。ノミナル プラント入力 9 に比べてごくわずかです。調整プロセス中に、プラントの出力は 1900 から 2100 rpm の間で変化します。これはノミナル プラント出力 2000 の約 +/- 5% です。目標は、非線形プラント動作の励起を防ぐためプラントを定格操作点近傍に保つことです。
ステップ振幅: 挿入されるステップ信号の振幅を指定します。この例では、0.1 を選択します。プラントが単一の積分器をもつ場合、DC ゲインは推定しないでください。この場合、[ステップ信号による DC ゲインの推定] パラメーターをオフにします。その結果、プラントにステップ信号は挿入されません。
ノーマル モードでの Open-Loop PID Autotuner ブロックのシミュレーション
Simulink で作成されたプラント モデルの場合、リアルタイム調整のためにブロックをエクスターナル モードで使用する前に、ノーマル モードでプラント モデルに対して Open-Loop PID Autotuner ブロックをシミュレートすることを推奨します。シミュレーションは、コードを生成する前に調節できるよう、信号接続とブロック設定の問題を特定するために役立ちます。
sim(mdl);
この例では、エンジン速度の基準信号が 2000 rpm から 3000 rpm まで変化した後、最初の 20 秒で 2000 rpm に戻ります。元のゲインである P = 0.01 と I = 0.01 は、過渡状態で強い振動の原因となるため再調整の必要があります。
20 秒後、プラントは定格操作点 2000 rpm で動作し、オンライン PID 調整が開始します。保守的なガイドラインではオンラインの周波数応答推定が収束するまでの秒数は 100/帯域幅であると示唆されているため、実験の持続時間は 50 秒になります。
PID 調整が 70 秒で終了すると、新しいゲイン P = 0.0026 および I = 0.0065 が "pid gains" 出力端子で直ちに利用可能になり、PID ブロックの外部的な P および I 端子に送られて元のゲインを上書きします。ループを閉じるときに過渡状態にほぼバンプは見られず、PID ブロックで制御が再開されます。
エンジン速度の基準信号は 2000 rpm から 3000 rpm まで変化した後、80 ~ 100 秒の間で再び 2000 rpm に戻ります。新しい PI ゲインにより閉ループ応答は大幅に改善されます。
エクスターナル モードでの Open-Loop PID Autotuner ブロックの使用
PI コントローラーを物理エンジンに対してエクスターナル モードで調整するには、Simulink モデルの Engine Model セクションを、rpm 測定値を "y" として提供し、アクチュエータにスロットル角度を "u" として送信するハードウェア インターフェイス ブロックに置き換えます。
例として、エクスターナル モードでの調整用に構成された Simulink ブロック線図を次に示します。ここでは、PI コントローラーは Arduino® DUE ボード上で動作し、シリアル ポートを介して物理エンジンと通信すると仮定しています。
次に、元のモデルをエクスターナル モードで機能させるために元の Simulink モデルに加えた変更を順番に示します。
Simulink を実行し、USB 接続を介して Arduino DUE ボードと通信するホスト コンピューターを準備します。
Simulink Support Package for Arduino Hardware ソフトウェアをインストールします。お使いのハードウェアが異なる場合、別のハードウェア サポート パッケージをインストールする必要があります。
[コンフィギュレーション パラメーター] ダイアログの [ソルバー] ペインで [固定ステップ] ソルバー タイプを選択します。[ハードウェア実行] ペインで [Arduino DUE] ハードウェア ボードを選択します。
元のモデルのエンジン モデル セクションを 2 つのシリアル インターフェイス ブロックに置き換えます。リアルタイムでは Arduino ボード上で動作する Open-Loop PID Autotuner ブロックが Serial Receive ブロックからのプラント出力を (センサーから) 収集し、実験信号を Serial Transmit ブロックを使用してエンジンに (アクチュエータへ) 送信します。
リアルタイム動作における柔軟性を高めるため、シミュレーション クロックに基づいて調整プロセスの開始と停止を行うのではなく、手動の "Tuning Switch" を反転させます。同様に、"Gain Switch" を反転させて PI ゲインを更新し、"Ref Switch" を反転させて基準信号を変更します。
Simulink モデル内で [エクスターナル モード] を選択してシミュレーション時間を "無限大" に設定します。
シミュレーションを実行します。まず、Simulink がモデル全体のコードを生成し、Arduino DUE ボードにダウンロードします。ボード上でプログラムの実行が開始された後、プラントの入力と出力をスコープからリアルタイムで監視することができます。プラントが 2000 rpm の定格操作点に達したら、3 つの手動スイッチを使用してコントローラーの調整、更新、および検証を行います。
エクスターナル モードにおけるメモリの削減とタスク オーバーランの回避
[ブロック] タブの [メモリを削減し、タスク オーバーランを回避してください (エクスターナル モードのみ)] オプションを使用すると、メモリ リソースが限られているハードウェアや、サンプル時間が非常に速いハードウェアに生成コードを展開しやすくなります。
ハードウェアのボードに搭載されているメモリが足りない場合、エクスターナル モードでの調整時にはこのオプションを使用してください。このオプションでは Simulink が周波数応答のオンライン推定機能のコードだけを生成します。PID 設計機能のためのコードは展開されないため、結果としてハードウェア上のメモリ使用量が削減されます。この場合、推定が完了した後、PID ゲインがホスト コンピューター上の Simulink で計算されてから自動調整器ブロックに送り返されます。
調整プロセスの終わりに行われる PID ゲインの計算では、周波数応答のオンライン推定よりもはるかに多くの計算負荷が要求されます。コントローラーのサンプル時間が非常に速い場合、一部のハードウェアでは実行サイクル内に計算を完了できないこともあります。したがって、ホスト コンピューターで PID ゲインの計算を行うことにより、計算能力の限られたハードウェア上でも速いサンプル時間で PID コントローラーを調整することが可能になります。
bdclose(mdl)