舵機(jī)控制
在對(duì)舵機(jī)的控制中,我采用的是位置式PD算法。
將左右電感的偏差值賦給error,再代入公式進(jìn)行解算,最后傳給舵機(jī)輸出子函數(shù),控制舵機(jī)正確打角。
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;
}
另外,如果想使舵機(jī)更順滑,可以對(duì)偏差error的計(jì)算進(jìn)行處理,如將歸一化后的值開(kāi)方處理等。
在對(duì)電機(jī)的控制中,我采用的是增量式PID算法。
首先要設(shè)定一個(gè)目標(biāo)速度set_speed,再將當(dāng)前速度與其比較,得出的差值代入公式計(jì)算,得到最終需要輸出的電機(jī)占空比,從而控制電機(jī)轉(zhuǎn)速。
需要注意的是,電機(jī)PID控制作為閉環(huán)控制,最好將其放入PIT定時(shí)器中斷,同時(shí)在中斷中用左右兩個(gè)編碼器分別測(cè)出實(shí)時(shí)速度,這樣可以使其控制的更精確。
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
+關(guān)注
關(guān)注
35文章
1467瀏覽量
85083 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4260瀏覽量
62228 -
代碼
+關(guān)注
關(guān)注
30文章
4697瀏覽量
68083 -
控制算法
+關(guān)注
關(guān)注
4文章
165瀏覽量
21647
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論