運動控制系統是通過控制電機電壓、電流、頻率等輸入量,來滿足工作機械的轉矩、速度、位移等機械量,使各種工作機械按照人們期望的要求運行,以滿足生產及應用的需要。
運動控制系統由電機、功率變換裝置、控制器及相應的傳感器構成,其框圖及涉及學科領域如下圖:
對照運動控制系統的結構框圖,可以推斷出智能車中的運動控制系統如下:
被控對象
電機是門深奧的學問號稱自動化專業的天書之最(筆者當初被電機學折磨的有陰影,故有關電機不做分析)。
(此處所提到的電動機都是車模上指定的普通直流電機,不包括十七屆中的無刷電機)智能車中的電機都是用于調速系統的拖動電機,而舵機則是用于伺服系統的伺服電動機的一種。
執行機構
功率放大與變換裝置在智能車系統之中指的是電機驅動,能夠根據主控輸出的信號,動態的調節被控對象(直流電機)的驅動電壓來控制電機的轉速從而達到控制車身速度的作用。
控制器
智能車運動控制的控制器一般采用數字PI控制(關于PI控制器后面會出一篇PID的文章描述),大家姑且先把PI控制器當做一個公式,只用輸入誤差,輸出的就是根據內部算法計算后的結果。這里借用龍邱科技的 代碼片。
// An highlighted block
typedef struct
{
float kp; //P
float ki; //I
float kd; //D
float imax; //積分限幅
float out_p; //KP輸出
float out_i; //KI輸出
float out_d; //KD輸出
float out; //pid輸出
float integrator; //< 積分值
float last_error; //< 上次誤差
float last_derivative;//< 上次誤差與上上次誤差之差
unsigned long last_t; //< 上次時間
}pid_param_t;
pid_param_t Speed_PID;
Speed_PID.kp = 130;
Speed_PID.ki = 2.5;
Speed_PID.kd = 0.25;
/*************************************************************************
* 函數名稱:void Motor_Control(void)
* 功能說明:電機控制
* 參數說明:
* 函數返回:
* 修改時間:
* 備 注:這類設計PID運算的函數一定要放在定時器中斷內保持控制周期穩定
*************************************************************************/
void Motor_Control(void)
{
MotorDuty1 = (int)PidIncCtrl(&Speed_PID, Target_Speed - ECPULSE1);
if(MotorDuty1 > 8000)MotorDuty1 = 8000;else if(MotorDuty1 < -8000)MotorDuty1 = -8000;
if(Speed_PID.out > 8000)Speed_PID.out = 8000;else if(Speed_PID.out < -8000)Speed_PID.out = -8000;
Motor1Ctrl(MotorDuty1);
// 電機閉環控制
}
/*************************************************************************
* 函數名稱:float constrain_float(float amt, float low, float high)
* 功能說明:pid增量式控制器輸出
* 參數說明:
* @param pid pid參數
* @param error pid輸入誤差
* 函數返回:PID輸出結果 注意輸出結果已經包涵了上次結果
* 修改時間:2020年4月1日
* 備 注:
*************************************************************************/
float PidIncCtrl(pid_param_t * pid, float error)
{
pid- >out_p = pid- >kp * (error - pid- >last_error);
pid- >out_i = pid- >ki * error;
pid- >out_d = pid- >kd * ((error - pid- >last_error) - pid- >last_derivative);
pid- >last_derivative = error - pid- >last_error;
pid- >last_error = error;
pid- >out += pid- >out_p + pid- >out_i + pid- >out_d;
return pid- >out;
}
-
電機控制
+關注
關注
3530文章
1861瀏覽量
268415 -
運動控制
+關注
關注
4文章
567瀏覽量
32828 -
智能車
+關注
關注
21文章
402瀏覽量
76915
發布評論請先 登錄
相關推薦
評論