第10章-小車跑一跑
如何實(shí)現(xiàn)小車的前、后、左、右、停
控制電機(jī)速度就可以控制小車運(yùn)動(dòng)
如何控制電機(jī)速度?
改變小車速度PID的目標(biāo)值,然后定時(shí)器里面的PID控制函數(shù)就會(huì)計(jì)算輸占空比然后控制小車。
代碼如下:
定時(shí)器里面有電機(jī)控制,我們這里還增加
Motor_Set(PID_realize(&pidMotor1Speed,Motor1Speed),PID_realize(&pidMotor2Speed,Motor2Speed));
是為了提高實(shí)時(shí)性。
/*******************
* @brief 通過PID控制電機(jī)轉(zhuǎn)速
* @param Motor1Speed:電機(jī)1 目標(biāo)速度、Motor2Speed:電機(jī)2 目標(biāo)速度
* @return 無
*
*******************/
void motorPidSetSpeed(float Motor1SetSpeed,float Motor2SetSpeed)
{
//改變電機(jī)PID參數(shù)的目標(biāo)速度
pidMotor1Speed.target_val = Motor1SetSpeed;
pidMotor2Speed.target_val = Motor2SetSpeed;
//根據(jù)PID計(jì)算 輸出作用于電機(jī)
Motor_Set(PID_realize(&pidMotor1Speed,Motor1Speed),PID_realize(&pidMotor2Speed,Motor2Speed));
}
很容易得到一下控制方式
// motorPidSetSpeed(1,2);//向右轉(zhuǎn)彎
// motorPidSetSpeed(2,1);//向左轉(zhuǎn)彎
// motorPidSetSpeed(1,1);//前進(jìn)
// motorPidSetSpeed(-1,-1);//后退
// motorPidSetSpeed(0,0);//停止
向左原地轉(zhuǎn)彎、向原地轉(zhuǎn)彎
// motorPidSetSpeed(-1,1);//右原地旋轉(zhuǎn)
// motorPidSetSpeed(1,-1);//左原地旋轉(zhuǎn)
加速減速函數(shù)
//向前加速函數(shù)
void motorSpeedUp(void)
{
static float MotorSetSpeedUp=0.5;//靜態(tài)變量 函數(shù)結(jié)束 變量不會(huì)銷毀
if(MotorSetSpeedUp <= MAX_SPEED_UP) MotorSetSpeedUp +=0.5 ; //如果沒有超過最大值就增加0.5
motorPidSetSpeed(MotorSetSpeedUp,MotorSetSpeedUp);//設(shè)置到電機(jī)
}
//向前減速函數(shù)
void motorSpeedCut(void)
{
static float MotorSetSpeedCut=3;//靜態(tài)變量 函數(shù)結(jié)束 變量不會(huì)銷毀
if(MotorSetSpeedCut >=0.5) MotorSetSpeedCut-=0.5;//判斷是否速度太小
motorPidSetSpeed(MotorSetSpeedCut,MotorSetSpeedCut);//設(shè)置到電機(jī)
}
上面第10章我們學(xué)會(huì)如何控制小車的運(yùn)動(dòng)
后面我們講解如何具體控制速度等。
聯(lián)系:Q,1930299709