1
电子说
功能介绍放开头, 使用便捷无需愁
这是全网最详细、性价比最高的STM32实战项目入门教程,通过合理的硬件设计和详细的视频笔记介绍,硬件使用STM32F103主控资料多方便学习,通过3万字笔记、12多个小时视频、20多章节代码手把手教会你如何开发和调试。让你更快掌握嵌入式系统开发。
V3.3.0-STM32智能小车
视频: https://www.bilibili.com/video/BV16x4y1M7EN/?spm_id_from=333.337.search-card.all.click
V3:HAL库开发、功能:PID速度控制、PID循迹、PID跟随、遥控、避障、PID角度控制、视觉控制、电磁循迹、RTOS等功能。
控制电机速度就可以控制小车运动
如何控制电机速度?
改变小车速度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章我们学会如何控制小车的运动
后面我们讲解如何具体控制速度等。
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !