第10章-小车跑一跑
如何实现小车的前、后、左、右、停
控制电机速度就可以控制小车运动
如何控制电机速度?
改变小车速度PID的目标值,然后定时器里面的PID控制函数就会计算输占空比然后控制小车。
代码如下:
定时器里面有电机控制,我们这里还增加
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参数的目标速度
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);//左原地旋转
加速减速函数
//向前加速函数
void motorSpeedUp(void)
{
static float MotorSetSpeedUp=0.5;//静态变量 函数结束 变量不会销毁
if(MotorSetSpeedUp <= MAX_SPEED_UP) MotorSetSpeedUp +=0.5 ; //如果没有超过最大值就增加0.5
motorPidSetSpeed(MotorSetSpeedUp,MotorSetSpeedUp);//设置到电机
}
//向前减速函数
void motorSpeedCut(void)
{
static float MotorSetSpeedCut=3;//静态变量 函数结束 变量不会销毁
if(MotorSetSpeedCut >=0.5) MotorSetSpeedCut-=0.5;//判断是否速度太小
motorPidSetSpeed(MotorSetSpeedCut,MotorSetSpeedCut);//设置到电机
}
上面第10章我们学会如何控制小车的运动
后面我们讲解如何具体控制速度等。
联系:Q,1930299709
阅读全文