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