速度、位置的雙環控制是我們在電機的控制系統中常用的方法,很實用。下面讓我們來看一下內部實現的原理。
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法測速獲得電機速度。
第二行是通過累加求出速度的積分,也就是電機的位置信息。
第三行是位置外環控制器,求出控制輸出量,作為速度內環的控制目標值。
第四行是速度內環。
因為雙環控制過程較複雜,故給出其控制原理圖如下:
感興趣的朋友可以關注我。
會持續更新機器人設計、控制的相關內容。