新オーバーロードの栄光の章
インクリメンタル PID の P と I の理解の応用
インクリメンタル PID が次のようになった場合、それをうまく使用するにはどうすればよいでしょうか?
一言で言えば、どのくらいの大きさの P が必要かは、次の式に従って決定されます - PWM 制限値 == 増加領域 * P 係数 + モーターをオンにするときの初期 PWM。
実際、私たちが制御するほとんどのモーターは、初期 PWM = 現在の車輪の速度という状況にあります。結局のところ、初期 PWM ≠ 現在の車輪の速度という状況は、特殊な状況 (最初のターンオン) でのみ発生します。マイクロコントローラーが PID を計算し、しばらくしてからモーターをオンにします)、通常の状態では、モーターのさまざまな頻繁な速度変化が PWM = 車輪速度で発生します。つまり、車輪速度が 200 から 300 に変化します。これは、ドメインが 100 増加し、初期 PWM が 200 である状況です。このとき、最適な P 係数は 8×100+200=999 の式に基づき、P は 8 になるはずです。ホイールは 0 から 100 まで回転し、10×100+0=999 となり、最も完全な P は 10 になります。私の発言を証明するために、下の図を見てください (緑の線が設定値 100、ピンクの線がエンコーダによって測定された実際の値です)。
- P: 10、I: 0.15、増分ドメイン: 100の場合、図は次のようになります。
初期 PWM = ホイールの初速 = 0 (初期 PWM は 0、ホイールの初速は 0)。
- P:10、I:0.15、ドメイン増加:100
初期 PWM = ホイールの初速度 = 200。
今回はホイールが200から回転を開始し、緑の線が200から300に変化する設定値、ピンクの線が実際の速度で、追従状況は以下のようになります。式によると、現在は 10×100+200=1200>999 と限界があり、上記の図よりも応答性が実際に低いことがわかります。では、P を 8 に変更するとどうなるでしょうか? 結局、8×100+200=1000となり、限界値の999に近くなります。
- P: 8、I: 0.15、ドメイン増加: 100
初期 PWM = ホイールの初速度 = 200。今回もホイールは初期PWMで200から回転し始めますが、今回は上の写真よりも応答性が高く、唯一の違いはPが8であることです。
インクリメンタルPIDのPとIを理解する理由
この時点で、実際にインクリメンタル PID を使用できるようになり、インクリメンタル PID パラメータの調整はさらに印象的であり、メカニズム (形而上学的な問題は制限によって引き起こされる) も理解できました。
しかし、インクリメンタルPIDのPとIではなぜこのような状況になるのでしょうか?
この仕組みの理由は何でしょうか? 仕組みの背後には、
もっと大きな「ボス」がいるのだろうか?
研究が足りない気がする、脳細胞を全部犠牲にして、さらに深い深淵(前頭葉の脳細胞、頭頂葉の脳細胞、小脳の脳細胞…)に落ちて、背伸びをしてみようあなたの右手であなたを引っ張ってくださいあなたの人生に貢献してください)!!!
制限値によってこの問題が発生するのはなぜですか? ? ?
————あまり多くはありません bb————上の図: 純粋な P 制御のチャート (純粋な P とは、I パラメーターと D パラメーターが常に 0 で、P パラメーターのみを与えることを意味します)
P | 図(初期PWMは0) | 説明する |
---|---|---|
0.01 | 設定値は 200 (図の緑色の線) で、実際の値は常に 0 です。 | 車輪が回らない |
0.05 | 車輪が回らない | |
0.1 | Pが小さすぎてホイールが回転しない | |
0.5 | ついにホイールが回転します。設定値は 200、ホイールは 20 の速度で回転します。 | |
1 | ホイールは80の速度で回転しており、Pの増加により制御がますます強くなります。 | |
3 | 車輪速度が140に達します | |
4 | 160 | |
5 | まだ160 | |
7 | 実際には110まで下がりました | |
10 | 今回の速度はわずか 80 ですが、100% 確信できます。P が非常に大きい場合、速度は低下します。ピーク値は P=1 と同じ 80 ですが、明らかな違いは調整時間が短くなる点です。 | |
15 | 上の緑の線が設定値で、ピンクの線が設定値です。これは後で追加した写真なので、回転速度は60です。今回はホイールの音が非常にうるさいです | |
20 | 回転速度は50くらいですが、それ以上に揺れているので、これを定振幅発振と呼ぶべきでしょうか。それとも静的な差が大きすぎるのでしょうか? | |
30 | Pが30になると、これは幽霊画で、ホイールが正逆回転するので、肉眼ではホイールが固着して全く回転していないのが見えます。 |
見えますか?信じられないかもしれませんが、P が非常に小さい (0.1) と非常に大きい (10) と応答性はどんどん低くなり、P が 4 ~ 5 のときが最も応答性が高くなります。つまり、P は実際には 2 次関数であるということですが、これを信じられますか? しかし、それは本当です。
次に、純粋な I によって制御されるチャートという別の実験を行います。
私 | 画像(初期PWMあり/なしで同じ) | 説明する |
---|---|---|
0.01 | オーバーシュートは非常に深刻で、設定値は 200、ピーク値は 850 に達する可能性があり、最終定常状態の最終値は 150、静的差は 50 に達します。 | |
0.05 | 今回のピーク値は 680 です。オーバーシュートが軽減されているようで、最終的な定常値は 200 です。今回は静的な差が解消されています。 | |
0.1 | ピーク値は 550 で、静的な差はまだ非常に小さいですが、調整時間はますます長くなっています。 | |
0.3 | ピーク値は450ですが、0.01の時は1回しか発振しませんでしたが、今は安定するまで何度も発振するようになり、オーバーシュートも減り、調整時間が長くなりました。 | |
0.5 | オーバーシュートは減少し、調整時間は増加しています | |
1 | 定振幅発振は安定しなくなりました。 | |
3 | 同じ振幅で発振しますが、発振ピーク値は減少し、発振周波数は増加しています。 |
確かにIパラメータは私たちが知っているものと同じで、Iを大きくすると静的な差が小さくなり、制御強度がIが大きくなるにつれて増加する、と本に書かれているとおりです。I が増加すると、オーバーシュートが減少し、調整時間が増加します。これは適切な線形関数の関係です。
気づいたかな?私の純粋な P ダイアグラムのダイアグラムは、括弧内で意図的に説明されています。初期 PWM は 0 です。P*増加量=限界値のとき、曲線のピーク値は最高値となり、このときのPは5となり、結局、5×200=999となります。初期 PWM を使用しない上記の純粋な P 制御は、P が非常に小さい場合にはホイールを回転させません。そのため、初期 PWM 状態による純粋な P 制御の曲線は、P が非常に小さい場合に大きなオーバーシュートを持つと仮定しました。
————あまりない bb————上の写真: 純粋な P コントロールのチャート 2
P | 図(当初600) | 説明する |
---|---|---|
0.01 | 設定値は 200 (緑色の線) です。信じられますか?今回はP0.01、モーターは回転できますが、オーバーシュートが発生しています。 | |
0.05 | 上のグラフのピーク値とほぼ同じです | |
0.1 | ピーク値は低くなり、今回は 700 未満ですが、上の 2 つの写真は 700 を超えています。 | |
0.3 | ピークは再び低くなり、600 未満になります | |
0.5 | ピークは再び低くなり、500 未満になります | |
1 | ピークは再び低くなり、400 未満になります | |
3 |
本当に!PWM は問題全体の根本的な核心であり、これらすべての奇妙で奇妙な現象の開始者です。
PWM がこの問題を引き起こすのはなぜですか? 興味がありませんか?
私は、インクリメンタル PID 式を廃止する必要があると考えています。ここで、戻って増分 PI の式を詳しく見てみましょう。
motor.speed_last_error_R = motor.speed_current_error_R; //更新每次的差值
motor.speed_current_error_R = (int16)(motor.speed_set_R-motor.speed_R); //速度当前差值
motor.speed_duty_output_R = motor.speed_duty_output_R+(int16)(motor.speed_P*(motor.speed_current_error_R-motor.speed_last_error_R)+motor.speed_I*motor.speed_current_error_R);
(累積したもの)+(P係数×偏差差分+I係数×電流偏差) この2つで構成されます。
ここで、P=0.1、I=0.02、初期 PWM=999 の曲線が次のようにゴーストのように見える理由を見てみましょう。
才能がなければあだ名は「ヒューマンMCU」!!!
さて、マイクロコントローラーがこのコードを実行する最初の瞬間、
-
K=1 の場合、
変数名を定義します。motor.speed_last_error_R
コードでは初期値を割り当てていないため、motor.speed_last_error_R
C 言語ではmotor.speed_last_error_R
変数の初期値はデフォルトで 0 に設定されます
。ホイールは最初は回転しないため、初期値はホイール速度は 0;
設定値を与える: 200;
初期 PWM が 999 の場合、motor.speed_duty_output_R
変数の初期値は 999;
マイクロコントローラーがこのコードを初めて実行するとき、
motor.speed_last_error_R
=0、
motor.speed_current_error_R
=200-0=200、
motor.speed_duty_output_R
=999+0.1×(200-0)+0.02×200=999+20+4、>999、振幅が制限されているため、motor.speed_duty_output_R
=999となります。 -
K=2
マイコンの二次モーメント
motor.speed_last_error_R
=200、
motor.speed_current_error_R
=200-999=-799、
motor.speed_duty_output_R
=999+0.1×(-799-200)+0.02×(-799)=999-99.9-15.98=883.12 -
K=3
マイクロコントローラーの 3 次モーメント
motor.speed_last_error_R
=-799、
motor.speed_current_error_R
=200-883.12=-683.12、
motor.speed_duty_output_R
=883.12+0.1×(-683.12+799)+0.02×(-683.12)=883.12+11.588-13.6624=881.0456 -
...
カウント 8 が動いています。現在の計算傾向によれば、予期せぬことが何も起こらなければ、車輪の速度は最終的には設定速度 200 に収束するはずで、これは確かに曲線と一致しており、実際の状況と一致しています。車輪の始め 激しく回転し、その後車輪速度は 200 で安定します。すべては理にかなっています!
ここで、初期 PWM を 0、初期ホイール速度を 0、増分範囲を 200 に設定します。
まだ十分な脳細胞を持っている友人は、初期 PWM が 0 の場合に、マイクロコントローラーの最初の瞬間、2 番目の瞬間、3 番目の瞬間の PWM を個人的に計算できます。ここでは、私はすでに豚の脳に過負荷をかけているので、カウントしません。簡単に言ってください。1 回:
マイクロコントローラーがこのコードを初めて実行するとき、motor.speed_duty_output_R
初期値は 0 であることがわかっています。motor.speed_last_error_R
これはデフォルト値の 0 であり、motor.speed_current_error_R
設定値 - 実際の値は 200 です。すると、motor.speed_P*(motor.speed_current_error_R-motor.speed_last_error_R)
この文の値は次のようになります。 P が 2 の場合、P が 5 の場合は 400、P が 5 の場合は 999、P が 10 の場合はまだ 999 に制限されています。したがって、マイクロコントローラーにはmotor.speed_duty_output_R
最初の時点で値 400 が割り当てられます (例として P を 2 とします) ) なので、P が 5 (つまり PWM が 999) の場合、P が 2 の場合よりもカーブの応答性が高く、P が 10 の場合、P が 5 の場合よりもカーブの応答性が低いことがわかります (元の2000 は 999 に削減されました)。motor.speed_current_error_R
最初にI に 200 を掛けますmotor.speed_current_error_R
が、その後偏差の値はどんどん小さくなっていきますmotor.speed_current_error_R
。I パラメータが比較的大きい場合、各調整の強度も比較的大きくなり、静的な差が大きくなることがわかります。もっと大きい。I パラメータは小から中へ変化します。I が大きくなるほど、静的差を小さくすることができ、I パラメータは中から大へと変化します。I が大きいほど、静的差は大きくなります。最終的に、静的差は十分に大きくなります。振動する。
…つづく…