速度と位置の二重ループ制御の原理

5424 ワード

1.速度閉ループ制御我々は一般的に速度閉ループ制御システムにおいて、インクリメンタルPI制御を使用する.我々のマイクロプロセッサでは,コントローラがソフトウェアによって制御アルゴリズムを実現するため,サンプリング時刻の偏差値に基づいて制御量を計算するだけでシミュレーションレギュレータを離散化処理しなければならない.従って,連続微分方程式の代わりに離散差分方程式を用いる必要がある.
サンプリング時間が短い場合(我々のコードでは10 ms)を仮定すると、以下の処理が可能である.
1介微分の代わりに一介差分を用いる.
②ポイントの代わりに累加する.
インクリメンタル離散PID式による
Pwm+=Kp[e(k)-e(k-1)]+Ki*e(k)+Kd[e(k)-2e(k-1)+e(k-2)]
e(k):今回の偏差
e(k-1):前回の偏差
e(k-2):前回の偏差
Pwmはインクリメンタル出力を表す
我々の速度制御閉ループシステムではPI制御のみが使用されるため、PIDコントローラに対して以下の式に簡略化することができる.
Pwm+=Kp[e(k)-e(k-1)]+Ki*e(k)
具体的にC言語で実現されるコードは以下の通りである.
int Incremental_PI (int Encoder,int Target)
{
float Kp=100,Ki=100;//PIパラメータはモータの種類と負荷によって決まる
static int Bias,Pwm,Last_bias;
Bias=Encoder-Target;//けいさんへんさ
Pwm+=Kp*(Bias-Last_bias)+Ki*Bias;//インクリメンタルPIコントローラ
Last_bias=Bias;//前回の偏差を保存
return Pwm;//インクリメンタル出力
}
入口パラメータはエンコーダの速度測定値と速度制御の目標値であり、戻り値はモータ制御PWMである.
最初の行のコードはPIパラメータの定義であり、PIパラメータは異なるシステムで異なり、私たちのコードのPIDパラメータは、バランスのとれた車の家のモータの空負荷時にのみデバッグされます.
2行目は、関連する内部変数の定義です.
3行目は速度偏差を求め、測定値から目標値を減算します.
4行目はインクリメンタルPIコントローラを用いてモータPWMを求める.
5行目は前回の偏差を保存し、次回の呼び出しに便利です.
最後の行は戻ります.
10 msのタイミング割り込みでこの関数を呼び出して、私たちの制御目標を実現します.
Moto1=Incremental_PI(Encoder,Target_velocity);
Set_Pwm(Moto1);//===対応するMCUのPWMレジスタに付与
具体的には、完全なコードを理解してください.私たちのコードはSTM 32 F 103 C 8コントローラに基づいていますが、C言語ベースのPIDコントローラの一部を剥離し、controlに置きます.cの中で、だからSTM 32に対して熟知していない学友は依然として手帳を使ってこの書類を開けて見ることができます.2.位置閉ループ制御位置式離散PID式による
Pwm=Kpe(k)+Ki∑e(k)+Kd[e(k)-e(k-1)]
e(k):今回の偏差
e(k-1):前回の偏差
Σe(k):e(k)および以前の偏差の累積和;ここでkは1,2,kである.
Pwm代表出力
我々の位置制御閉ループシステムではPI制御のみが使用されるため、PIDコントローラに対して以下の式に簡略化することができる.
Pwm=Kpe(k)+Ki∑e(k)
具体的にC言語で実現されるコードは以下の通りである.
int Position_PI (int Encoder,int Target)

{ 

float Kp=15,Ki=0.01;

static int Bias,Pwm,Integral_bias;

Bias=Encoder-Target; //    

Integral_bias+=Bias; //       

Pwm=Kp*Bias+Ki*Integral_bias; //   PI   

return Pwm; //    

}

入口パラメータはエンコーダの位置測定値と位置制御の目標値であり、戻り値はモータ制御PWMである.
最初の行のコードはPIパラメータの定義であり、PIパラメータは異なるシステムで異なり、私たちのコードのPIDパラメータは、バランスのとれた車の家のモータの空負荷時にのみデバッグされます.
2行目は、関連する内部変数の定義です.
3行目は速度偏差を求め、測定値から目標値を減算します.
4行目は累積により偏差の積分を求める.
5行目は位置式PIコントローラを用いてモータPWMを求める.
最後の行は戻ります.
10 msのタイミング割り込みでこの関数を呼び出して、私たちの制御目標を実現します.
Moto1=Position_PI(Encoder,Target_position);

Set_Pwm(Moto1); //===   PWM   

具体的には、完全なコードと組み合わせて理解してください.
3.速度位置二重ループ制御速度位置二重ループ制御は以上の二つのコントローラによってネストされ、具体的な原理はもう詳しく説明せず、コアコードだけを説明する.
Encoder=Read_Encoder(2);

Position+=Encoder;

Moto1=Position_PI(Position,Target_position);

Moto1=Incremental_PI(Encoder,-Moto1);

1行目はM法で速度を測定してモータ速度を得る.
2行目は,速度の積分,すなわちモータの位置情報を累積して求める.
3行目は位置外ループコントローラであり、速度内ループの制御目標値として制御出力量を求める.
4行目は速度内リングです.