舵機控制
在對舵機的控制中,我采用的是位置式PD算法。
將左右電感的偏差值賦給error,再代入公式進行解算,最后傳給舵機輸出子函數,控制舵機正確打角。
void steer_control()
{
error=AD_M_Left[0]-AD_M_Right[0];
direction_controlout=dirP*error+dirD*(error-lasterror);
angle=mid_angle+direction_controlout;
angle=angle >right_angle?right_angle:angle;
angle=angle< left_angle?left_angle:angle;
PWM_SetSteer((int)angle);
lasterror=error;
}
另外,如果想使舵機更順滑,可以對偏差error的計算進行處理,如將歸一化后的值開方處理等。
在對電機的控制中,我采用的是增量式PID算法。
首先要設定一個目標速度set_speed,再將當前速度與其比較,得出的差值代入公式計算,得到最終需要輸出的電機占空比,從而控制電機轉速。
需要注意的是,電機PID控制作為閉環控制,最好將其放入PIT定時器中斷,同時在中斷中用左右兩個編碼器分別測出實時速度,這樣可以使其控制的更精確。
void PID_computer_newL(int left_speed_in)
{
ec_left=set_speed-left_speed_in;
pwm_L+=speedL_P*(ec_left)+speedL_I*(ec_left-eb_left)+speedL_D*(ec_left-2*eb_left+ea_left);
if(pwm_L > 600) pwm_L=600;
if(pwm_L< -600) pwm_L=-600;
PWM_SetMotorL((int)pwm_L);
ea_left=eb_left;
eb_left=ec_left;
}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
PID
+關注
關注
37文章
1482瀏覽量
88204 -
函數
+關注
關注
3文章
4383瀏覽量
65000 -
代碼
+關注
關注
30文章
4902瀏覽量
70854 -
控制算法
+關注
關注
4文章
170瀏覽量
22268
發布評論請先 登錄
相關推薦
熱點推薦
使用C語言進行PID算法實現
前文對PID算法離散化和增量式PID算法原理進行來探索,之后又使用Matlab進行了仿真實驗,對PID三個參數又有了更深入的認識,接下來我們
發表于 09-15 09:20
PID控制算法原理是什么?pid控制算法的c語言實現介紹和測試代碼概述
最近兩天在考慮一般控制算法的C語言實現問題,發現網絡上尚沒有一套完整的比較體系的講解。于是總結了幾天,整理一套思路分享給大家。
在工業應用中PID 及其衍生算法是應用最廣泛的
發表于 08-23 08:00
?46次下載

評論