小兴带你玩转平衡小车-从TB6612驱动到STM32精准调速

发布时间:2026/7/14 12:47:31

小兴带你玩转平衡小车-从TB6612驱动到STM32精准调速
1. TB6612驱动模块与JGB37-520电机初探第一次拿到TB6612驱动板和JGB37-520电机时我完全被这个小巧的组合惊艳到了。TB6612这个只有指甲盖大小的芯片居然能输出1.2A的持续电流峰值可达3.2A而且效率比老旧的L298N高出不少。JGB37-520电机自带霍尔编码器的设计更是贴心六根彩色线缆红、黑、黄、绿、蓝、白对应不同功能接线时完全不用担心搞混。说到选型这里有个小插曲。当时我在某宝选购时发现JGB37-520居然有不同减速比版本19:1、30:1、56:1。经过反复比较最终选择了30:1减速比的型号空载转速200RPM。这个速度对于平衡小车来说刚刚好——太快了容易失控太慢了又不够灵活。电机额定电压12V实测用3节18650锂电池串联供电非常稳定。2. 硬件连接的那些坑2.1 接口匹配的血泪史刚开始我以为所有2.54mm间距的接口都是通用的结果吃了大亏。JGB37-520电机用的是PH2.0接口而我准备的却是XH2.54连接线。这个错误导致我第一次通电测试时编码器信号完全读不出来。后来用万用表一根根测线序才发现问题所在。建议大家一定要提前确认接口规格PH2.0的插头明显比XH2.54要小巧精致得多。2.2 TB6612的稳定之道TB6612虽然性能强悍但对电源稳定性要求很高。我的第一个版本板子就因为没有在VM引脚附近放置足够的滤波电容至少4个100nF陶瓷电容导致PWM调速时电机出现奇怪的抖动。后来在芯片每个电源引脚都加了去耦电容问题立刻解决。这里特别提醒STBY引脚一定要接高电平3.3V否则驱动芯片会进入休眠状态。3. STM32的PWM精准控制3.1 定时器配置秘籍要让STM32产生稳定的PWM信号定时器配置是关键。我使用的是TIM3的通道1PA6引脚预分频值设为0自动重装载值899这样产生的PWM频率就是72MHz/(8991)80kHz。这个频率远高于电机响应的上限既能避免可闻噪音又不会让TB6612过度发热。void PWM_Init(uint16_t per, uint16_t psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; GPIO_InitTypeDef GPIO_InitStruct; TIM_OCInitTypeDef TIM_OCInitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); GPIO_InitStruct.GPIO_Mode GPIO_Mode_AF_PP; GPIO_InitStruct.GPIO_Pin GPIO_Pin_6; GPIO_InitStruct.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA, GPIO_InitStruct); TIM_TimeBaseInitStruct.TIM_ClockDivision TIM_CKD_DIV1; TIM_TimeBaseInitStruct.TIM_CounterMode TIM_CounterMode_Up; TIM_TimeBaseInitStruct.TIM_Period per; TIM_TimeBaseInitStruct.TIM_Prescaler psc; TIM_TimeBaseInit(TIM3, TIM_TimeBaseInitStruct); TIM_OCInitStruct.TIM_OCMode TIM_OCMode_PWM1; TIM_OCInitStruct.TIM_OCPolarity TIM_OCPolarity_High; TIM_OCInitStruct.TIM_OutputState TIM_OutputState_Enable; TIM_OCInitStruct.TIM_Pulse 0; TIM_OC1Init(TIM3, TIM_OCInitStruct); TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); TIM_Cmd(TIM3,ENABLE); }3.2 电机转向控制技巧TB6612控制电机转向需要配合IN1和IN2引脚。我的做法是将PA4和PA5分别接驱动板的IN1和IN2正转PA4高电平PA5低电平反转PA4低电平PA5高电平刹车两个引脚同为高电平停止两个引脚同为低电平实测发现快速切换方向时最好先刹车1-2ms可以显著减少机械冲击。这个细节对延长电机寿命很有帮助。4. 编码器数据采集实战4.1 定时器编码器模式JGB37-520的霍尔编码器输出AB两相脉冲我用TIM2的编码器接口来捕获。配置时需要注意将TIM2的CH1和CH2PA0和PA1设置为输入模式开启编码器接口模式3TI1和TI2边沿都计数设置合适的滤波器我用的值是6void Encoder_Init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct; TIM_ICInitTypeDef TIM_ICInitStruct; GPIO_InitTypeDef GPIO_InitStruct; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStruct.GPIO_Pin GPIO_Pin_0 | GPIO_Pin_1; GPIO_InitStruct.GPIO_Mode GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, GPIO_InitStruct); TIM_TimeBaseStruct.TIM_Prescaler 0; TIM_TimeBaseStruct.TIM_Period 65535; TIM_TimeBaseStruct.TIM_ClockDivision TIM_CKD_DIV1; TIM_TimeBaseStruct.TIM_CounterMode TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2, TIM_TimeBaseStruct); TIM_EncoderInterfaceConfig(TIM2, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising); TIM_ICInitStruct.TIM_ICFilter 6; TIM_ICInit(TIM2, TIM_ICInitStruct); TIM_Cmd(TIM2, ENABLE); }4.2 速度计算优化编码器每转输出11个脉冲经过30:1减速后轮轴每转实际会产生330个脉冲。我每50ms读取一次计数器值然后通过这个公式计算转速RPM转速 (脉冲数 × 60) / (330 × 0.05)为了减少抖动我还加了滑动平均滤波保留最近5次采样值取中间3个值的平均数。这样处理后的速度曲线非常平滑为后续PID控制打下了良好基础。5. PID闭环控制入门5.1 从开环到闭环的跨越刚开始我只用PWM开环控制发现电机负载变化时转速波动很大。加上PID闭环后效果立竿见影。我的第一个版本只用了比例控制P虽然比开环好但还是有稳态误差。后来加入积分项I成功消除了静差。微分项D的加入则让系统响应更快速且稳定。5.2 参数整定经验谈调参时我遵循先P后I最后D的原则把I和D设为0逐渐增大P直到系统出现轻微震荡记录此时的P值临界增益Kc和震荡周期Pc根据Ziegler-Nichols公式P0.6KcI2P/PcDP*Pc/8在这个基础上微调实测发现对于我的小车P800、I50、D100时效果最佳。这个过程中用串口实时输出速度曲线会事半功倍。6. 系统集成与调试6.1 电源管理要点整个系统最耗电的就是电机我用了单独的18650电池组供电12V通过LM2596降压模块给STM32供电。这里有个重要经验一定要在电机电源和MCU电源之间加磁珠隔离否则电机启停时的电流突变会导致MCU复位。我在PCB上预留了磁珠位置实测效果比简单的0欧电阻好很多。6.2 抗干扰设计编码器信号线最容易受干扰我的解决方案是使用双绞线在信号线上加100Ω终端电阻PCB上走线尽量短在信号线对地加100pF电容这些措施实施后编码器读数稳定性大幅提升即使在电机全速运行时也不会出现误码。

相关新闻

Windows终极HEIC缩略图解决方案:简单三步让iPhone照片完美显示

Windows终极HEIC缩略图解决方案:简单三步让iPhone照片完美显示

2026/7/14 12:47:31

Windows终极HEIC缩略图解决方案:简单三步让iPhone照片完美显示 【免费下载链接】windows-heic-thumbnails Enable Windows Explorer to display thumbnails for HEIC/HEIF files 项目地址: https://gitcode.com/gh_mirrors/wi/windows-heic-thumbnails 还在为…

BiliTools终极指南:如何用AI智能总结功能3倍提升B站学习效率

BiliTools终极指南:如何用AI智能总结功能3倍提升B站学习效率

2026/7/14 12:47:31

BiliTools终极指南:如何用AI智能总结功能3倍提升B站学习效率 【免费下载链接】BiliTools 本项目已停止维护。 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools 在知识获取的数字化时代,B站已成为无数学习者的核心平台&#xff0c…

紧急通知:ChatGPT新版API已触发手册失效风险!立即执行这3项兼容性检查,否则下周起用户投诉率将飙升210%

紧急通知:ChatGPT新版API已触发手册失效风险!立即执行这3项兼容性检查,否则下周起用户投诉率将飙升210%

2026/7/14 12:37:31

更多请点击: https://intelliparadigm.com 第一章:ChatGPT新版API变更概览与风险预警 OpenAI于2024年Q2正式启用全新v1 API端点( https://api.openai.com/v1/chat/completions),全面替代旧版 /v1/engines/{model}/…

为什么你的ChatGPT话术转化率低于行业均值23.6%?——基于172场真实直播AB测试的数据归因分析

为什么你的ChatGPT话术转化率低于行业均值23.6%?——基于172场真实直播AB测试的数据归因分析

2026/7/14 14:27:35

更多请点击: https://codechina.net 第一章:ChatGPT直播带货话术效能归因的底层逻辑 ChatGPT在直播带货场景中的话术效能并非源于“拟人化表达”本身,而是由三重耦合机制共同驱动:语义意图解构能力、实时上下文锚定能力&#xff…

Happy Island Designer:动物森友会岛屿设计的终极免费工具指南

Happy Island Designer:动物森友会岛屿设计的终极免费工具指南

2026/7/14 14:27:35

Happy Island Designer:动物森友会岛屿设计的终极免费工具指南 【免费下载链接】HappyIslandDesigner "Happy Island Designer (Alpha)",是一个在线工具,它允许用户设计和定制自己的岛屿。这个工具是受游戏《动物森友会》(Animal C…

2026办公写字楼租赁获客新解:BBWEYY小程序+GEO闭环更稳

2026办公写字楼租赁获客新解:BBWEYY小程序+GEO闭环更稳

2026/7/14 14:27:35

在办公写字楼租赁行业,企业最常见的问题不是没有业务能力,而是线索分散、获客成本高、交易链路长。很多商家同时在做搜索投放、信息平台、社群传播和老客户转介绍,但流量到了微信或电话端后,仍然依赖人工解释、反复报价和线下确认…

React Native Table Component入门教程:如何在5分钟内创建你的第一个表格

React Native Table Component入门教程:如何在5分钟内创建你的第一个表格

2026/7/14 14:27:35

React Native Table Component入门教程:如何在5分钟内创建你的第一个表格 【免费下载链接】react-native-table-component 🌱Build table for react native 项目地址: https://gitcode.com/gh_mirrors/re/react-native-table-component React Nat…

如何免费获取网易云音乐和QQ音乐歌词:163MusicLyrics完整使用指南

如何免费获取网易云音乐和QQ音乐歌词:163MusicLyrics完整使用指南

2026/7/14 14:27:35

如何免费获取网易云音乐和QQ音乐歌词:163MusicLyrics完整使用指南 【免费下载链接】163MusicLyrics 云音乐歌词获取处理工具【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 还在为找不到心爱歌曲的歌词而烦恼吗&#…

如何30分钟搞定黑苹果配置:OpCore-Simplify智能自动化工具完全指南

如何30分钟搞定黑苹果配置:OpCore-Simplify智能自动化工具完全指南

2026/7/14 14:17:35

如何30分钟搞定黑苹果配置:OpCore-Simplify智能自动化工具完全指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的黑苹果配置…

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

2026/7/14 10:03:09

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator作为Unity游戏社区中最成熟的文本翻译解决方…

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

2026/7/13 20:43:19

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持 【免费下载链接】raspberrypi-kernel It provides openEuler kernel source for Raspberry Pi 项目地址: https://gitcode.com/openeuler/raspberrypi-kernel 前往项目官网免费下载&…

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

2026/7/13 20:43:10

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧 【免费下载链接】integration-test The repo contains test suits for system integration test 项目地址: https://gitcode.com/openeuler/integration-test 前往项目官网免费下载:…

XUnity.AutoTranslator 游戏实时翻译插件:从原理到实战的完整指南

XUnity.AutoTranslator 游戏实时翻译插件:从原理到实战的完整指南

2026/7/14 0:06:37

1. 项目概述:当游戏语言成为一堵墙作为一名玩了十几年日系、欧美独立游戏的“老油条”,我太懂那种面对一款心仪已久、画风玩法都戳中G点的游戏,却因为语言不通而望而却步的痛了。尤其是那些基于Unity引擎开发的、体量不大但内容精良的作品&am…

2026普通文员学数据分析的价值

2026普通文员学数据分析的价值

2026/7/14 0:06:37

一、2026年普通文员学习数据分析的必要性随着数字化转型加速,数据分析技能正逐渐成为职场基础能力。普通文员学习数据分析可以提升工作效率、增强竞争力,并为职业转型提供更多可能性。二、数据分析对文员的价值自动化办公:通过数据分析工具&a…

2026从计划员到主管,生产管理者学数据分析有用吗?

2026从计划员到主管,生产管理者学数据分析有用吗?

2026/7/14 0:06:37

一、生产管理领域的职业发展路径 从计划员到主管的角色转变,是生产管理者职业发展的典型路径。计划员主要负责生产排程、库存管理和资源协调等基础工作,而主管则需要承担团队管理、决策支持和效率优化等更高级别的职责。这种转变不仅仅是职位的提升&…