直流電機速度、位置雙環控制簡明教程

直流電機速度、位置雙環控制簡明教程

速度、位置的雙環控制是我們在電機的控制系統中常用的方法,很實用。下面讓我們來看一下內部實現的原理。

1.速度閉環控制

我們一般在速度閉環控制系統裡面,使用增量式PI控制。而在我們的微處理器裡面,因為控制器是通過軟件實現其控制算法的,所以必須對模擬調節器進行離散化處理,這樣它只需根據採樣時刻的偏差值計算控制量。因此,我們需要使用離散的差分方程代替連續的微分方程。

假定採樣時間很短時(我們的代碼中是10ms),可做如下處理:

① 用一介差分代替一介微分;

② 用累加代替積分。

根據增量式離散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參數,僅針對平衡小車之家的電機空載時調試得到。

第二行是相關內部變量的定義。

第三行是求出速度偏差,由測量值減去目標值。

第四行使用增量PI控制器求出電機PWM。

第五行保存上一次偏差,便於下次調用。

最後一行是返回。

在10ms定時中斷裡面調用該函數實現我們的控制目標:

Moto1=Incremental_PI(Encoder,Target_velocity);

Set_Pwm(Moto1); //===賦值給對應MCU的PWM寄存器

具體請結合完整代碼理解,我們的代碼基於STM32F103C8控制器,但是把基於C語言的PID控制器部分剝離,並放在control.c裡面,故對STM32不熟悉的同學依然可以使用記事本打開這個文件觀看。

2.位置閉環控制

根據位置式離散PID公式

Pwm=Kp*e(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=Kp*e(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參數,僅針對平衡小車之家的電機空載時調試得到。

第二行是相關內部變量的定義。

第三行是求出速度偏差,由測量值減去目標值。

第四行通過累加求出偏差的積分。

第五行使用位置式PI控制器求出電機PWM。

最後一行是返回。

在10ms定時中斷裡面調用該函數實現我們的控制目標:

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);

第一行是通過M法測速獲得電機速度。

第二行是通過累加求出速度的積分,也就是電機的位置信息。

第三行是位置外環控制器,求出控制輸出量,作為速度內環的控制目標值。

第四行是速度內環。

因為雙環控制過程較複雜,故給出其控制原理圖如下:

直流電機速度、位置雙環控制簡明教程

感興趣的朋友可以關注我。

會持續更新機器人設計、控制的相關內容。


分享到:


相關文章: