stm32シングルチップマイコンでモーターのPID制御を実現

     PID 制御は、釜の温度制御からドローンの飛行姿勢や飛行速度の制御などに至るまで、非常に古くから広く使用されている制御アルゴリズムと考えるべきです。モーター制御では、PID アルゴリズムが特によく使用されます。

1. 位置PID

1. 計算式

モーター制御では、モーターに出力するのは PWM デューティ サイクル値です。
位置 PID の基本式については、特に言う必要はありません。

写真

制御フローチャートは以下の通りです。

写真

上図の目標位置は通常、ボタンまたはスイッチを介して目標値を変更するようにプログラムでき、測定位置はstm32を介してエンコーダのデータを収集します。

目標位置と測定位置の差が本システムの偏差となります。それをPIDコントローラーに送って演算・出力し、モータードライブの電力増幅によりモーターの回転を制御して偏差を低減し、最終的に目標位置に到達します。

2. C言語の実装

上記の理論解析と制御回路図をC言語でどう書くのか、実践的で興味深い作業です。C言語で実現した位置PIDの具体的なコードは以下のとおりです。

int Position_PID (int Encoder,int Target){
   
     static float Bias,Pwm,Integral_bias,Last_Bias;  Bias=Target- Encoder; //计算偏差  Integral_bias+=Bias; //求出偏差的积分  //PID基本公式  Pwm=Position_KP*Bias+Position_KI*Integral_bias+Position_KD*(Bias-Last_Bias);  Last_Bias=Bias; //保存上一次偏差  return Pwm; //输出}

入力パラメータはエンコーダの位置計測値と位置制御の目標値、戻り値はモータ制御のPWMです(上の制御ブロック図を見たほうが分かりやすいと思います)。

最初の行は、関連する内部変数の定義です。

2行目は、測定値から目標値を引いて位置偏差を求めるものです。

3 行目は、合計することによって偏差の積分を計算します。

行 4 は、位置 PID コントローラーを使用してモーター PWM を見つけます。

5 行目は、次の呼び出しのために最後の偏差を保存します。

最後の行はreturnです。

2. インクリメンタルPID

1. 計算式

速度クローズドループ制御は、単位時間あたりに得られるパルス数に応じてモータの速度情報を測定し(ここではM法を使用して速度を測定します)、目標値と比較して制御偏差を取得します。を設定し、偏差の比例、積分、微分を制御して偏差がゼロに近づく過程を作ります。

写真

当社の速度制御クローズドループシステムではPI制御のみを使用しているため、PIDコントローラが簡素化できます。

は次の式です。

写真

制御ブロック図は位置図と同じです。

写真

上図の目標速度は一般にボタンやスイッチで目標値を変更することができますが、速度を測定する前にエンコーダの章で述べたように、ワンチップマイコンで定期的にエンコーダデータを収集し、クリアする必要があります。それ。

目標速度と測定速度の差が現在のシステムの偏差になります。それをPIDコントローラーに送って演算・出力し、モータードライブの電力増幅によりモーターの回転を制御し、偏差を低減し最終的に目標速度に到達します。

2. C言語の実装

上記の理論解析と制御回路図をC言語でどう書くのか、実践的で興味深い作業です。C言語で実現した位置PIDの具体的なコードは以下のとおりです。

int Incremental_PI (int Encoder,int Target){
   
     static float Bias,Pwm,Last_bias;  Bias=Encoder-Target; //计算偏差  //增量式 PI 控制器  Pwm+=Velocity_KP*(Bias-Last_bias)+Velocity_KI*Bias;  Last_bias=Bias; //保存上一次偏差  return Pwm; //增量输出}

入力パラメータはエンコーダの速度測定値と速度制御の目標値、戻り値はモータ制御PWMです。

最初の行は、関連する内部変数の定義です。

2行目は速度偏差を求め、測定値から目標値を差し引きます。

3 行目では、インクリメンタル PI コントローラーを使用してモーター PWM を見つけます。

4 行目は、次の呼び出しのために最後の偏差を保存します。

最後の行はreturnです。

3. P、I、Dの各パラメータの役割

自動制御システムの性能指標には主に、安定性、迅速性、正確性の 3 つの側面があります。

安定性: システムが外部の影響を受けた後、制御システムが制御変数を時間の経過とともに増加させ、最終的に与えられた期待値と一致する場合、システムは安定しているとみなされ、一般にそれをシステムの収束と呼びます。

時間の経過とともに制御量が所定の値からどんどん逸脱する場合、システムは不安定であると言われ、一般にシステムの発散と呼ばれます。安定したシステムのみが自動制御のタスクを完了できるため、システムの安定性は制御システムの正常な動作を保証するために必要な条件です。

安定した制御システムでは、制御量の所定の値からの初期偏差は時間の経過とともに徐々に減少し、ゼロになる傾向があります。

迅速性: 迅速性とは、システムの動的プロセスが進行する時間の長さを指します。処理時間が短いほどシステムの高速性が優れていることを示し、処理時間が長いほどシステムの応答が遅く、高速に変化する指令信号を実現することが困難であることを意味する。

安定性と高速性は、制御プロセスにおけるシステムのパフォーマンスを反映します。システムの追跡プロセス中に、制御量が所定の値から逸脱する時間が小さいほど、逸脱時間は短くなり、システムの動的精度が比較的高いことを示します。

精度: システムの動的プロセスの終了後の、指定された値からの制御変数 (またはフィードバック量) の偏差を指します。この偏差は、動的プロセスの後期段階での定常状態誤差のパフォーマンスです。

実際の生産エンジニアリングでは、制御システムが異なれば、コントローラーの効果に対する要件も異なります。たとえば、天秤車や倒立振子ではシステムの速度に対する高い要件があり、応答が遅すぎるとシステムは制御を失います。

スマートホームのドアや窓の自動開閉システムは、速度に対する要求はそれほど高くありませんが、安定性や精度に対する要求が高いため、システムのオーバーシュートや静的誤差を厳密に制御する必要があります。

おすすめ

転載: blog.csdn.net/weixin_41114301/article/details/132503096