前書き
最初に、システムのインパルス応答と呼ばれるこのことを正確に理解し、それが何を意味するかを考慮する必要があります。これは、視覚化するために少し考えを要する抽象的な概念です。私は厳密な数学に入るつもりはありません。私のポイントは、この事が何であるか直観を与えようとすることです。
制御問題の例
温度センサーが取り付けられた大きな太い電力抵抗器があると想像してください。すべてが周囲温度で始まります。電源を入れると、センサーの温度が最終的に上昇して安定することがわかりますが、正確な方程式を予測するのは非常に困難です。システムの時定数は約1分ですが、「時定数」は完全に適用できるわけではありませんが、温度が単極のシステムのように指数関数的に上昇しないため、時定数は1つです。 。温度を正確に制御し、適切な電力レベルでスイッチを入れて待機した場合よりも、温度を新しいレベルに変更し、着実に大幅に速く維持したいとします。
基本的に、制御システムに問題があります。開ループ応答は合理的に再現可能であり、それを十分にモデル化する式がどこかにありますが、問題はその式を導き出すにはあまりにも多くの不明な点があることです。
PID制御
これを解決する古典的な方法の1つは、PIDコントローラーを使用することです。アナログ電子機器でこれを行う必要があった更新世に戻ると、人々は賢くなり、手元のアナログ機能とうまく機能するスキームを思いつきました。そのスキームは、比例、積分、および微分の「PID」と呼ばれていました。
Pターム
エラーの測定を開始します。これは、測定されたシステム応答(この場合、センサーによって報告される温度)から制御入力(望ましい温度設定)を引いたものです。通常、これらは電圧信号として利用できるように配置できます。そのため、エラーを見つけるのはアナログの違いにすぎず、これは十分簡単です。これは簡単だと思うかもしれません。あなたがしなければならないのは、誤差が大きいほど高い電力で抵抗を駆動することです。それは、寒すぎると自動的に暑くなり、暑すぎると寒くなります。それはうまくいきます。この方式では、ゼロ以外の制御出力(抵抗を駆動する電力)を発生させるためにいくらかの誤差が必要であることに注意してください。実際、それは、必要な電力が大きいほど、エラーが大きくなることを意味します。これが、高電力を得るための唯一の方法だからです。これで、高出力でもエラーが許容できるようにゲインを上げるだけでいいと言うかもしれません。結局のところ、これは、多くの回路でオペアンプがどのように使用されるかの基本です。あなたは正しいですが、現実の世界では通常、それで逃げることはできません。これはいくつかの単純な制御システムで機能する場合がありますが、応答にあらゆる種類の微妙なしわがあり、ゲインが高すぎる場合に振動する何かになることがあります。言い換えると、システムは不安定になります。しかし、反応にあらゆる種類の微妙なしわがあり、かなりの時間がかかる場合は、ゲインが高すぎるときに振動する何かになります。言い換えると、システムは不安定になります。しかし、反応にあらゆる種類の微妙なしわがあり、かなりの時間がかかる場合は、ゲインが高すぎるときに振動する何かになります。言い換えると、システムは不安定になります。
上記で説明したのは、PIDのP(proprotional)部分です。出力をエラー信号に比例させることができるように、エラーの時間微分と積分に比例する項を追加することもできます。これらのP、I、およびD信号はそれぞれ、制御出力信号を生成するために合計される前に、独自の個別のゲインを持っています。
私は用語
Iという用語は、エラーが時間とともにゼロになることを可能にします。正のエラーがある限り、I項は累積し続け、最終的には全体的なエラーがなくなるポイントまで制御出力を上げます。この例では、温度が一貫して低い場合、出力温度が最終的に低くなくなるまで、抵抗器への電力が絶えず増加します。高いP項よりもさらに速く不安定になる可能性があることを願っています。AI用語自体は簡単にオーバーシュートを引き起こし、簡単に振動になります。
Dターム
D用語は時々省略されます。D項の基本的な使用法は、PおよびI項がより積極的になるように、少し安定性を追加することです。Dの用語は基本的に、すでに正しい方向に向かっているのであれば、私が今そこに着いているように見えるので、ガスに少しレイオフします。
PIDの調整
PID制御の基本は非常に単純ですが、P、I、およびDの用語を適切に取得することはそうではありません。これは通常、多くの実験と微調整で行われます。最終的な目的は、出力が可能な限り迅速に応答するシステム全体を取得することですが、過度のオーバーシュートやリンギングはなく、もちろん安定している必要があります(独自に発振を開始しない)。PID制御、方程式に小さなしわを追加する方法、特にそれらを「調整」する方法について書かれた多くの本がありました。チューニングとは、最適なP、I、およびDゲインを分割することです。
PID制御システムは機能しますが、それらを適切に機能させるには、確かに多くの伝承とトリックがあります。ただし、PID制御は制御システムの唯一の正しい答えではありません。そもそもPIDが選ばれた理由を人々は忘れてしまったようです。これは、ある種の普遍的な最適制御スキームというよりも、アナログエレクトロニクスの制約に関係しているのです。残念ながら、今日ではあまりにも多くのエンジニアが「制御システム」とPIDを同一視していますが、これは小さな考えのニージャーク反応にすぎません。これにより、今日の世界ではPID制御が間違っているわけではありませんが、制御の問題を攻撃する多くの方法の1つにすぎません。
PIDを超えて
今日、温度の例のようなもののための閉ループ制御システムは、マイクロコントローラで行われます。これらは、単にエラー値の導関数と積分を取るだけでなく、もっと多くのことができます。プロセッサでは、除算、平方根、最近の値の履歴の保持などを行うことができます。PID以外の多くの制御スキームが可能です。
インパルス応答
そのため、アナログエレクトロニクスの制限を忘れて戻って、最初の原則に戻るシステムをどのように制御できるかを考えてください。制御出力の小さな部分ごとに、システムが何をするかを知っていたらどうでしょう。連続制御出力は、多数の小さな断片の合計になります。各ピースの結果が何であるかを知っているので、制御出力の以前の履歴の結果が何であるかを知ることができます。ここで、制御出力の「小さな部分」がデジタル制御にうまく適合することに注意してください。制御出力がどうあるべきかを計算し、それを設定し、戻って入力を再度測定し、それらから新しい制御出力を計算して再度設定する、などです。制御アルゴリズムをループで実行しています。そして、入力を測定し、ループの繰り返しごとに新たに制御出力を設定します。入力は離散時間で「サンプリング」され、出力も同様に固定間隔で新しい値に設定されます。これを十分に速く行うことができる限り、これが継続的なプロセスで発生していると考えることができます。通常、落ち着くまでに数分かかる抵抗加熱の場合、確かに毎秒数回は、システムが本質的に意味のある方法で応答するよりもはるかに速いので、たとえば4 Hzでの出力の更新はシステムに連続して見えます。これは、40〜50 kHzの範囲で個別に出力値を実際に変更するデジタル録音された音楽とまったく同じで、耳が聞こえないほど速く、オリジナルのように連続して聞こえます。これは継続的なプロセスで起こると考えることができます。通常、落ち着くまでに数分かかる抵抗加熱の場合、確かに毎秒数回は、システムが本質的に意味のある方法で応答するよりもはるかに速いので、たとえば4 Hzでの出力の更新はシステムに連続して見えます。これは、40〜50 kHzの範囲で個別に出力値を実際に変更するデジタル録音された音楽とまったく同じで、耳が聞こえないほど速く、オリジナルのように連続して聞こえます。これは継続的なプロセスで起こると考えることができます。通常、安定するのに数分かかる抵抗加熱の場合、確かに毎秒数回は、システムが本質的に意味のある方法で応答するよりもはるかに速いので、4 Hzでの出力の更新はシステムにとって連続しているように見えます。これは、デジタル録音された音楽が実際に出力値を40〜50 kHzの範囲で個別のステップで変更し、耳が聞こえないほど速く、元のように連続して聞こえるのとまったく同じです。確かに、1秒あたり数回は、システムが本質的に意味のある方法で応答するよりもはるかに高速であるため、4 Hzでの出力の更新はシステムにとって連続しているように見えます。これは、デジタル録音された音楽が実際に出力値を40〜50 kHzの範囲で個別のステップで変更し、耳が聞こえないほど速く、元のように連続して聞こえるのとまったく同じです。確かに、1秒あたり数回は、システムが本質的に意味のある方法で応答するよりもはるかに高速であるため、4 Hzでの出力の更新はシステムにとって連続しているように見えます。これは、デジタル録音された音楽が実際に出力値を40〜50 kHzの範囲で個別のステップで変更し、耳が聞こえないほど速く、元のように連続して聞こえるのとまったく同じです。
それで、1つの制御出力サンプルが原因でシステムが時間の経過とともに何をするかを知るこの魔法の方法があれば、何ができるでしょうか?実際の制御応答は単なるサンプルのシーケンスであるため、すべてのサンプルからの応答を合計し、結果のシステム応答がどうなるかを知ることができます。つまり、任意の制御応答波形に対するシステム応答を予測できます。
それはクールですが、システムの応答を予測するだけでは問題を解決できません。ただし、ここにahaの瞬間があります。これを逆にして、必要なシステム応答を得るために必要な制御出力を見つけることができます。これは、制御問題を正確に解決していることに注意してください。ただし、単一の任意の制御出力サンプルに対するシステム応答を何らかの方法で知ることができる場合のみです。
だから、あなたはおそらく、それを簡単に考えて、それを単に大きなパルスを与えて、それが何をするか見てください。はい、それは理論的には機能しますが、実際には通常は機能しません。これは、1つのコントロールサンプルが、たとえ大きいものであっても、全体的なスキームが非常に小さいため、システムが測定可能な応答をほとんど持っていないためです。また、コントロールサンプルのシーケンスがシステムに対して連続的であると感じるように、各コントロールサンプルは物事のスキームにおいて小さくなければならないことを忘れないでください。したがって、このアイデアが機能しないわけではありませんが、実際にはシステムの応答は非常に小さいため、測定ノイズに埋もれています。抵抗器の例では、100 msで100 Wの抵抗器を押しても、測定するのに十分な温度変化は生じません。
ステップ応答
しかし、まだ方法があります。単一の制御サンプルをシステムに入れると、個々のサンプルへの応答が直接得られますが、制御応答の既知の制御されたシーケンスをシステムに入れて、それらへの応答を測定することで推測できます。通常、これは制御ステップを入れることで行われます私たちが本当に望んでいるのは、小さなブリップへの応答ですが、単一のステップへの応答は、まさにその積分です。抵抗器の例では、すべてが0 Wで定常状態であることを確認してから、突然電源を入れて抵抗器に10 Wを投入できます。これにより、最終的に出力で適切に測定可能な温度変化が生じます。適切なスケーリングを使用したその導関数は、直接測定することはできませんでしたが、個々のコントロールサンプルに対する応答を示しています。
要約すると、ステップ制御入力を未知のシステムに入力し、結果の出力を測定できます。それはステップ応答と呼ばれます。次に、その時間微分を取得します。これは、インパルス応答と呼ばれます。1つの制御入力サンプルから生じるシステム出力は、単にその制御サンプルの強度に適切にスケーリングされたインパルス応答です。制御サンプルの全履歴に対するシステム応答は、各制御入力に対して時間内で加算、スケーリング、およびスキューされたインパルス応答全体です。最後の操作はたくさん出てきて、畳み込みという特別な名前があります。
畳み込み制御
したがって、システム出力の任意のセットについて、その出力を引き起こす制御入力のシーケンスを思い付くことができると想像できるはずです。しかし、落とし穴があります。システムから望むもので攻撃的になりすぎると、それを達成するための制御入力には、高い値と低い値が必要になります。基本的に、システムの応答が速くなるほど、両方向の制御値を大きくする必要があります。抵抗器の例では、すぐに新しい温度に到達するように数学的に言うことができますが、達成するには無限の制御信号が必要になります。温度の新しい値への変化が遅いほど、抵抗にダンプできる最大電力が低くなります。別のしわは、抵抗器への電力も時々下げる必要があるということです。あなたはできる'
これに対処する1つの方法は、内部で使用する前に、制御システムがユーザー制御入力をローパスフィルター処理することです。図ユーザーはユーザーがやりたいことをします。入力をすばやく叩きます。内部的には、ローパスフィルターを使用して、それを平滑化し、抵抗に入れることができる最大電力と最小電力を考慮して、実現できる最速まで減速します。
実世界の例
以下は、実世界のデータを使用した部分的な例です。これは実際の製品に組み込まれたシステムからのもので、特に数十個のヒーターを制御してさまざまな化学物質リザーバーを特定の温度に維持する必要があります。この場合、顧客はPID制御を行うことを選択しましたが(それは彼らが快適に感じたものです)、システム自体はまだ存在し、測定することができます。以下は、ヒーターの1つをステップ入力で駆動した場合の生データです。ループの繰り返し時間は500ミリ秒でした。これは、システムが2時間後もこのスケールグラフにまだはっきりと収まっていることを考えると、明らかに非常に短い時間です。
この場合、ヒーターはサイズが約0.35のステップ(「Out」値)で駆動されたことがわかります。長い間、完全な1.0ステップを入力すると、温度が高すぎます。初期オフセットを削除し、結果をスケーリングして小さな入力ステップを考慮してユニットステップ応答を推測できます。
これから、インパルス応答を取得するために連続するステップ応答値を差し引くだけだと思います。これは理論上は正しいですが、実際にはシステムは500ミリ秒でほとんど変化しないため、実際には測定ノイズと量子化ノイズがほとんど発生します。
値の小さなスケールにも注意してください。インパルス応答は10 6でスケーリングされて表示されます。
個々の読み取り値または数個の読み取り値の間の明らかに大きな変動は単なるノイズであるため、これをローパスフィルター処理して高周波(ランダムノイズ)を取り除くことができます。1つの試みを次に示します。
それは良いことであり、本当に意味のあるデータがありますが、それでもノイズが多すぎることを示しています。以下は、生のインパルスデータのローパスフィルタリングで得られる、より有用な結果です。
これは実際に作業できるものです。残りのノイズは信号全体に比べて小さいため、邪魔にならないようにしてください。信号はまだほとんど残っているようです。これを確認する1つの方法は、240のピークが、前のプロットをすばやく視覚的に確認し、眼球をフィルター処理した結果であることに気付くことです。
それでは、このインパルス応答が実際に何を意味するのかを考えてください。まず、1M倍表示されることに注意してください。したがって、ピークは実際にはフルスケールの0.000240です。これは、理論的には、システムが500 msのタイムスロットの1つのみに対して単一のフルスケールパルスで駆動された場合、これは結果として生じる温度がそのままにされることを意味します。直感的に理にかなっているように、500 msの期間からの寄与は非常にわずかです。これはまた、インパルス応答の直接測定が機能しない理由です。フルスケールの0.000240(4000分の1)がノイズレベルを下回っているからです。
これで、制御入力信号のシステム応答を簡単に計算できます。500ミリ秒の制御出力サンプルごとに、その制御サンプルのサイズでスケーリングされたこれらのインパルス応答のいずれかを追加します。最終システム出力信号に対するそのインパルス応答の寄与の0時間は、その制御サンプルの時点です。したがって、システム出力信号は、互いに500ミリ秒オフセットされたこれらのインパルス応答の連続であり、それぞれがその時点のコントロールサンプルレベルにスケーリングされます。
システム応答は、制御入力とこのインパルス応答の畳み込みであり、すべての制御サンプル、この例では500 msごとに計算されます。これから制御システムを作成するには、目的のシステム出力をもたらす制御入力を決定するために逆方向に作業します。
このインパルス応答は、古典的なPIDコントローラーを実行する場合でも、非常に便利です。PIDコントローラーの調整には、多くの実験が必要です。実際のシステムでは、各反復に1〜2時間かかり、反復チューニングが非常に遅くなります。インパルス応答を使用すると、コンピューター上のシステム応答を数秒でシミュレートできます。これで、新しいPID値を変更できる限り早く試すことができ、実際のシステムが応答を示すまで1〜2時間待つ必要はありません。もちろん、実際のシステムで最終値を常にチェックする必要がありますが、ほとんどの作業はほんの少しの時間でシミュレーションで行うことができます。これは、質問で引用した文章の中で、「これをシミュレーションベースとして使用して、旧式のPIDコントロールのパラメーターを見つけることができます」という意味です。