低成本DIY智能小车核心模块:用STM32和TB6612实现带编码器的定速巡航功能
低成本DIY智能小车核心模块用STM32和TB6612实现带编码器的定速巡航功能周末在工作室调试新做的智能小车时突然意识到一个有趣的现象当我们给电机设定固定转速后实际速度总会因为电池电压波动、负载变化等因素产生偏差。这让我想起汽车上的定速巡航功能——它是如何保持恒定车速的于是决定用手头的STM32开发板和TB6612电机驱动模块配合带编码器的直流电机实现一个类似的闭环速度控制系统。1. 系统架构设计与核心组件选型1.1 硬件配置方案整个系统的硬件架构可以划分为三个主要部分控制核心STM32F103C8T6最小系统板蓝色药丸72MHz主频的Cortex-M3内核内置定时器支持编码器接口模式多路PWM输出通道市场价格约15-20元动力系统TB6612FNG双路电机驱动模块最大1.2A持续电流输出内置MOSFET H桥电路支持PWM调速和方向控制带AB相编码器的直流减速电机减速比30:1编码器分辨率11脉冲/转电机轴实际输出轴分辨率11×30330脉冲/转供电与交互2节18650锂电池串联7.4V0.96寸OLED显示屏SSD1306驱动5个轻触按键正转/反转/停止/加速/减速1.2 编码器信号处理原理AB相编码器通过两个相位差90°的方波信号既能检测转速又能判断方向。STM32的定时器编码器接口模式可自动处理这种正交信号TIM_EncoderInterfaceConfig(TIM2, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);通过四倍频技术实际分辨率提升到330×41320脉冲/转。定时器每50ms采样一次计数值换算为转速RPM转速 (脉冲数 × 1200) / 1320注意电机正反转时编码器计数方向不同需要在代码中对其中一个通道的读数取反。2. PID控制算法实现细节2.1 增量式PID控制器设计相比位置式PID增量式算法更适用于电机控制场景int16_t PID_VelocityPidA(float Spd_Target, int16_t Spd_Now) { static float Motor_Pwm_Out; static float bias,bias_last,bias_integral 0; bias Spd_Target - Spd_Now; bias_integral bias; float para MotorA_kp*bias*PID_SCALE MotorA_kd*(bias-bias_last)*PID_SCALE MotorA_ki*bias_integral*PID_SCALE; if(para-1 || para1) { Motor_Pwm_Out para; } // 输出限幅 if(Motor_Pwm_Out 3500) Motor_Pwm_Out 3500; if(Motor_Pwm_Out 0) Motor_Pwm_Out 0; bias_last bias; return Motor_Pwm_Out; }2.2 参数整定经验分享经过多次实验测试得出以下参数调整规律参数调节效果过大影响过小影响推荐初始值Kp响应速度系统振荡响应迟缓200Ki消除静差积分饱和稳态误差2Kd抑制超调高频噪声调节缓慢0实际调试时建议步骤先将Ki和Kd设为0逐步增大Kp直到系统出现轻微振荡然后加入Ki消除静差最后根据需要加入Kd抑制超调3. 电机驱动与PWM配置3.1 TB6612驱动电路连接TB6612与STM32的连接方式TB6612引脚STM32引脚功能说明PWMAPB8左电机PWM输入AIN1PB12左电机方向控制1AIN2PB13左电机方向控制2PWMBPB9右电机PWM输入BIN1PB14右电机方向控制1BIN2PB15右电机方向控制2STBY3.3V始终使能芯片3.2 PWM频率与分辨率配置电机驱动PWM频率设置为20kHz超出人耳听觉范围避免啸叫void TB6612_PWM_Init(u32 arr, int psc) { TIM_TimeBaseStructure.TIM_Period arr-1; // ARR3599 TIM_TimeBaseStructure.TIM_Prescaler psc-1; // PSC0 TIM_TimeBaseInit(TIM4, TIM_TimeBaseStructure); // 通道3配置(PB8) TIM_OCInitStructure.TIM_OCMode TIM_OCMode_PWM1; TIM_OC3Init(TIM4, TIM_OCInitStructure); TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable); }计算PWM占空比实际占空比 CCRx / (ARR 1)4. 系统集成与功能扩展4.1 电源管理方案采用双18650电池串联供电时需要实时监测电压adc11 ADC_BAT_Val*3.3/4096*11; // 电压分压比11:1 if(adc117.4) { OLED_ShowString(0,0,Low Power,12); // 低电量警告 }4.2 用户交互界面设计OLED显示布局规划------------------------------- | PID Speed Control | | Current: 120 RPM | | Set: 150 RPM | | Direction: forward | -------------------------------按键功能分配按键GPIO引脚功能KEY0PA1速度20RPMKEY1PA2速度-20RPMKEY2PA3正转KEY3PA4反转KEY4PA5停止4.3 扩展接口预留为后续功能升级预留的接口USART1 (PA9/PA10)蓝牙模块接口TIM1_CH1 (PA8)超声波模块触发ADC3 (PC0)红外测距模拟输入在面包板上调试时电机速度突然出现周期性波动检查发现是编码器信号线过长引入了干扰。改用双绞线并缩短走线距离后问题解决。这提醒我们在实际装配中信号完整性同样重要——特别是对于编码器这类高频数字信号。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2450521.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!