第16章-超聲波跟隨功能
無(wú)PID跟隨功能
//超聲波跟隨
if(HC_SR04_Read() > 25)
{
motorForward();//前進(jìn)
HAL_Delay(100);
}
if(HC_SR04_Read() < 20)
{
motorBackward();//后退
HAL_Delay(100);
}
PID跟隨功能
在pid.c中定義一組PID參數(shù)
tPid pidFollow; //定距離跟隨PID
pidFollow.actual_val=0.0;
pidFollow.target_val=22.50;//定距離跟隨 目標(biāo)距離22.5cm
pidFollow.err=0.0;
pidFollow.err_last=0.0;
pidFollow.err_sum=0.0;
pidFollow.Kp=-0.5;//定距離跟隨的Kp大小通過(guò)估算PID輸入輸出數(shù)據(jù),確定大概大小,然后在調(diào)試
pidFollow.Ki=-0.001;//Ki小一些
pidFollow.Kd=0;
//**********PID跟隨功能***********//
g_fHC_SR04_Read=HC_SR04_Read();//讀取前方障礙物距離
if(g_fHC_SR04_Read < 60){ //如果前60cm 有東西就啟動(dòng)跟隨
g_fFollow_PID_Out = PID_realize(&pidFollow,g_fHC_SR04_Read);//PID計(jì)算輸出目標(biāo)速度 這個(gè)速度,會(huì)和基礎(chǔ)速度加減
if(g_fFollow_PID_Out > 6) g_fFollow_PID_Out = 6;//對(duì)輸出速度限幅
if(g_fFollow_PID_Out < -6) g_fFollow_PID_Out = -6;
motorPidSetSpeed(g_fFollow_PID_Out,g_fFollow_PID_Out);//速度作用與電機(jī)上
}
else motorPidSetSpeed(0,0);//如果前面60cm 沒(méi)有東西就停止
HAL_Delay(10);//讀取超聲波傳感器不能過(guò)快
然后編譯,燒錄測(cè)試 。
下一章節(jié) 我們開(kāi)始使用6050 講解6050使用和如何和PID結(jié)合一起
聯(lián)系:Q,1930299709
閱讀全文