简介这份资料包面向嵌入式初学者与DIY爱好者围绕基于STM32微控制器的两轮自平衡小车展开提供从硬件设计到软件实现的完整制作参考。包内共1430个文件以c与h源码、d与o编译中间文件、crf与dep工程索引为主辅以pdf原理图与说明文档、hex烧录固件、uvproj等Keil工程文件及bat脚本压缩包约53.19MB目录按原理图、源码、使用说明、开发笔记等模块组织。资料涵盖陀螺仪与加速度计数据采集、PID控制算法实现、电机驱动电路设计及整车装配调试流程开发笔记还记录了故障排查与性能优化思路便于读者对照硬件搭建、理解实时控制逻辑并复现调试过程。目前已有4138人学习下载适合希望系统掌握STM32应用、传感器融合与自平衡控制的中级开发者参考。1. 从“站不稳”说起STM32 自平衡小车到底是什么你第一次看到两轮自平衡小车的时候多半会有一个疑问两个轮子并排前后没有支撑它凭什么不倒更奇怪的是你用手轻轻推它一下它不但不倒还会往你推的方向“让一让”然后自己站稳。很多人第一次接触 STM32 自平衡小车就是被这个“反直觉”的动作吸引的。说白了它就是一个会自己找平衡的小车车身上装了一块 STM32 单片机当“大脑”一个姿态传感器当“内耳”两个电机当“腿”。大脑不停地问内耳“我现在歪了多少”然后命令腿往歪的方向多转一点把身体拉回来。这个过程一秒钟要重复几百次所以你看着它就像稳稳站着。STM32 自平衡小车入门本质上就是学会把“感知—判断—动作”这条链路搭起来让一块芯片真的能控制一个物理世界里的东西动起来。这份资料适合谁适合刚学完 C 语言、摸过一点单片机、想做一个“能看见结果”的项目的新手。它不要求你先懂控制理论也不要求你会画电路板跟着做先让轮子转起来再让它站起来路是一步一步走的。2. 为什么值得从自平衡小车入手它把“学单片机”变成了“看得见的事”2.1 它逼你把零散知识串成一条线很多人学 STM32 的过程是这样的今天点个灯明天读个按键后天调个串口每个实验都能跑但合在一起就不知道能干什么。自平衡小车不一样它天然要求你把 GPIO、定时器、PWM、串口、传感器读取这几样东西同时用上而且缺一个都不行。灯不亮你可以不管但小车站不起来你一定会去查。我第一次搭这类项目的时候最大的感受是以前学定时器只知道“计数”做了小车才明白定时器还决定了控制循环多久跑一次跑慢了车就晃跑快了芯片忙不过来。这种“参数和现象直接挂钩”的体验是点灯实验给不了的。STM32 自平衡小车制作教程的价值就在于它把抽象的外设配置变成了“车稳不稳”这种你能亲眼判断的结果。2.2 反馈快挫败感低适合零基础建立信心做项目最怕的是改了半天代码什么反应都没有。自平衡小车的反馈非常直接电机转不转、轮子往哪边转、车身往哪边倒你一眼就能看出来。哪怕你还没调平衡只要能让两个轮子按你的命令正反转你就已经跨过了“单片机控制执行器”这道坎。而且它的调试是分层的。先让电机转再让传感器读数正确再让车有一点“抵抗倾斜”的反应最后才是稳稳站住。每一层都有明确的成功标志新手不会一上来就被“整车调不好”吓退。这也是我建议零基础的人从这类项目入门的原因它把一个大目标拆成了好几个能单独验证的小目标。2.3 资料形态友好一份压缩包就是一条现成的路这份资料是以压缩包形式给的里面通常包含教程文档、示例代码、电路连接说明这些内容。对新手来说最怕的是“知道要做小车但不知道从哪根线开始接”。有现成的教程和代码你就不用从零去猜引脚定义和初始化顺序可以先照着跑通再回头理解为什么这么写。提示拿到压缩包后先别急着改代码先把里面的教程文档从头翻一遍尤其是接线图和代码目录说明这两样决定了你后面少走多少弯路。3. 动手前的准备零基础第一步该装什么、接什么3.1 先把工具链装好别在环境上翻车新手最容易卡住的地方往往不是代码而是“代码写完了怎么弄进芯片”。你需要准备两样东西一个是写代码和编译的软件环境一个是把程序下载进 STM32 的工具。常见的选择是 Keil 这类集成开发环境配合 ST-Link 之类的下载器。具体用哪个版本、怎么装资料里的教程一般会写照着做就行。装完之后不要急着打开小车工程先做一个最小验证新建或者打开一个最简单的工程编译一次看能不能生成可下载的文件再下载进去看有没有反应。这一步看起来多余但它能帮你把“环境问题”和“小车问题”分开。我见过太多人小车调不出来最后发现是下载器驱动没装好。# 示意编译完成后确认输出文件是否存在 # 不同环境输出目录不同以教程说明为准 ls ./build/ # 预期能看到 .hex 或 .bin 之类的可下载文件上面这段只是帮你确认“编译真的产出了能下载的文件”。如果这一步就没有输出说明工程配置或编译选项有问题先解决它别往下走。参数上你只需要关注输出文件的路径和名字后面下载时要用到。3.2 接线先接“最小系统”别一次全接上接线是新手翻车的高发区。我的建议是分两步先只接电源和下载线确认芯片能被识别再接电机驱动和传感器。一次把所有线都插上出了问题你根本不知道是哪一根。接线时重点看三件事电源电压对不对、电机驱动的输入输出有没有接反、传感器的方向装没装对。尤其是传感器装反了车会往错误的方向“救自己”结果越救越倒。资料里的接线图要对着看不要凭感觉插。注意上电前先检查电源正负极电机和传感器都别带电插拔。这一步省不得烧一次模块的代价比多花十分钟检查大得多。3.3 先跑通“让轮子转”这是你的第一个里程碑在碰平衡逻辑之前先写一个最简单的程序让两个轮子按固定速度正转再反转再停。这个程序不涉及传感器只涉及 GPIO 和 PWM。它的意义是验证“大脑能指挥腿”。// 示意用 PWM 让电机以固定占空比转动 // 具体引脚和定时器通道以你的接线和教程为准 void motor_forward(void) { // 设置方向引脚决定正转 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET); // 设置 PWM 占空比数值越大转得越快 __HAL_TIM_SET_COMPARE(htim2, TIM_CHANNEL_1, 300); }这段代码里方向引脚决定轮子往哪边转PWM 的比较值决定转多快。300 这个数不是固定的你的电机和电源不同合适的值也不同先从中间值试听声音、看转速再调。如果轮子不转先查方向引脚有没有设对、PWM 定时器有没有启动、电机驱动有没有供电。把这一步跑通你就有资格进入下一章了。4. 让车“感觉到自己歪了”传感器读数与第一个闭环4.1 先读懂传感器在说什么自平衡小车能站住的前提是它知道自己歪了多少。这个信息来自姿态传感器常见的是能输出加速度和角速度的模块。加速度能感知重力方向角速度能感知转动快慢两者结合才能得到比较稳的倾角。新手在这一步最常见的困惑是读出来的数一直在跳。这不是坏了而是传感器本来就有噪声。你要做的不是追求一个“完美静止的数”而是先确认“车往前倾时读数往一个方向变往后倾时往另一个方向变”。这个方向关系对了后面的控制才有意义。// 示意读取传感器并打印原始值先不做任何滤波 // 具体读取函数以你使用的传感器和驱动为准 int16_t acc_x read_accel_x(); int16_t gyro_y read_gyro_y(); printf(acc_x%d, gyro_y%d\r\n, acc_x, gyro_y);这段代码的目的不是控制而是“观察”。你把车往前倾、往后倾看串口打印出来的数怎么变记下变化方向。参数上你只需要关注两个通道一个反映倾斜一个反映转动。等你能凭读数判断车的姿态再谈控制。4.2 第一个闭环让车“往歪的反方向用力”所谓闭环就是让车的动作依赖传感器的读数而不是你写死的固定值。最小闭环可以很简单车往前倾就让轮子往前转一点试图把车身“追回来”。这个逻辑听起来粗糙但它就是自平衡的核心雏形。// 示意最简比例控制倾角越大输出越大 // angle 为当前倾角target 为目标平衡角度 float error angle - target; float output Kp * error; set_motor_output(output);这里的 Kp 是一个需要你手调的系数。Kp 太小车反应软倒了也不怎么用力Kp 太大车会来回猛晃甚至抖动。新手调这个参数的血泪经验是先从小值开始一点点加每次加完观察车的反应别一次跳很大。target 是你希望车保持的角度通常接近竖直具体值要结合传感器安装方向来定。4.3 调参时看什么、改什么调参不是玄学它有观察顺序。先看车有没有“抵抗倾斜”的趋势你轻轻推它它有没有往反方向用力。如果没有先检查输出方向对不对再加大 Kp。如果有但晃得厉害说明用力过猛减小 Kp 或者加入对转动速度的抑制。这个阶段不要追求“一放就稳”先追求“推它一下它会自己往回找”。等这个反应稳定了再考虑更细的调节。我第一次调的时候就是太心急一上来就想让它站住结果参数越调越乱后来退回到“只让它有抵抗反应”这一步反而很快找到了方向。5. 新手最容易踩的坑排查清单5.1 现象上电后轮子完全不转原因通常有三个电机驱动没供电、方向引脚设错、PWM 定时器没启动。解决顺序是先量电机驱动的电源脚有没有电压再看代码里方向引脚和 PWM 通道是不是和接线一致最后确认定时器启动函数有没有被调用。别一上来就怀疑芯片坏了绝大多数是供电或配置问题。5.2 现象轮子转了但车一歪就往错误方向倒这是方向反了常见于传感器装反或者电机接线反。原因是控制输出和实际倾斜方向没有对上。解决办法很简单把电机两根线对调或者在代码里把输出取反二选一。改完再推一下车看它是不是开始“追”倾斜方向。5.3 现象车能站一下但一直抖原因是 Kp 偏大或者控制循环太快太慢。先减小 Kp 看抖动是否减轻再检查控制循环的周期是不是稳定。如果你的循环里塞了打印语句周期会变得很不稳调试阶段可以打印但正式跑的时候要把打印去掉或者降低频率。5.4 现象传感器读数漂移静止时数也在慢慢变这是这类传感器的常见特性不一定是故障。原因是零偏会随温度和时间变化。新手不用一上来就做复杂补偿先保证车在短时间内的反应是对的等基础功能跑通再考虑校准。资料里如果有校准步骤按步骤做一遍即可。5.5 现象照着教程做但自己的板子和教程不一样原因是教程针对的硬件版本和你手里的可能不同。解决办法是以你自己的原理图和引脚定义为准把教程里的引脚号、定时器通道替换成你实际用的。不要硬套先确认“我的板子上这个功能接在哪个脚”再改代码。6. 跑通第一个例子之后下一步学什么第一个例子跑通的标准不是车能站十分钟而是你能独立完成“上电—传感器读数—电机响应—推一下有抵抗”这条链路。到了这一步你已经跨过了新手最难的门槛。接下来怎么走我建议按下面的顺序来不要跳。阶段目标建议投入巩固能独立改引脚、改参数、重新烧录先把现有代码改坏再修好加滤波让倾角读数更稳理解为什么原始值会跳加闭环从比例控制过渡到更稳的控制先调好一个参数再加下一个看教程文档把资料里的说明和自己的现象对上带着问题去翻不要通读具体来说先别急着加新功能而是把现有工程“拆开再装回去”改一个引脚看现象怎么变改一个参数看车怎么反应。这个过程比看十篇理论文章都管用。然后去理解滤波知道为什么传感器读数需要处理但不用一上来就推公式先会用、能看到效果就行。再往后你可以尝试把控制循环的周期固定下来观察周期变化对稳定性的影响。这一步会让你真正理解“实时控制”是什么意思。资料里的教程文档这时候就派上用场了带着你遇到的具体现象去翻比从头读到尾效率高得多。我第一次做这类项目的时候最大的教训是总想一步到位结果每个环节都半懂不懂。后来我强迫自己每改一个地方就记录一次现象哪怕只是“Kp 从 5 加到 8抖动变明显”这种一句话。这个习惯让我后面调任何参数都有据可查不再靠感觉瞎试。从那以后我每次动手前都强制走一遍“先最小验证、再逐步叠加”的流程希望这个习惯也能帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?