平衡车教程(附开源链接
本文介绍了一个基于STM32F103C8T6的两轮平衡车开源项目,采用直流编码电机与MPU6050传感器实现姿态控制。项目详细讲解了硬件设计包括电机驱动模块(TB6612)、编码器测速原理、PCB布线注意事项,以及软件实现中的PID控制算法(含比例、积分、微分三参数调节)和低通滤波处理。系统通过DMP库进行姿态解算,将PWM输出与编码器反馈构成闭环控制。作者提供了完整的原理图、Gerber制板文件
立创开源广场: 平衡车主控板(已验证 - 立创开源硬件平台




终于调教好了
鼠鼠苦于网上相关教程杂乱,学习起来倍感痛苦,遂发表此文,也算是对这个项目学习到的知识点做一个总结。(注:本工程版权归acc98liu所有
可以直接跳到stm32f103c8t6那一节看具体接线
一、硬件介绍
1.直流编码电机
直流电机
直流编码电机与其他直流电机一样,给正向电流就正传,给负向电流就反转。在额定电流范围内,电流越大,转速越快。(这里的电流和旋转方向都是相对的,直流电机没有严格规定方向)唯一区别就是在电机上集成了一个编码器
本工程用的是某宝上这款直流减速电机(JGB37-520霍尔编码器直流减速电机 四驱平衡智能小车6V12V小马达),减速比为30:1,也就是电机转子转30圈,轮子转1圈。
这款电机配端子(后面这6根数据线接口)的型号是PH2.0 6pin,可以换成自己想要的型号(配图是我选用的端子线,用的是同向的)

可以看到这个接口从上到下为M1,GND,C2,C1,VCC,M2。M1、M2为直流电机的接口,需要通入大电流(4.5V-15V),连接TB6612电机驱动模块(下一节会介绍该模块和接线);VCC、GND是编码器接口,注意切记只能通入2.7-5.5V电压,不然会导致编码器烧毁。C1、C2为编码器输出接口
正交信号(AB相)与方向判断
霍尔编码器通过两个空间位置错开(约1/4磁极间距)的霍尔传感器,生成相位差90°的A、B两路脉冲。
旋转方向由两路信号的相位顺序决定:
-
正转:A相上升沿时,B相为高电平
-
反转:A相上升沿时,B相为低电平
速度计算
-
脉冲计数:
在固定时间Δt(如10ms)内,通过MCU计数器捕获A相或B相的脉冲数(记为N)。 -
参数已知:
-
PPR(每转脉冲数):电机转一圈产生的脉冲数(PPR = 磁极对数 × 2)。(记得后续要除以电机减速比)
-
-
转速公式:
转速(RPM) = 60×NPPR×ΔtPPR×Δt60×N
(Δt单位为秒,结果单位为转/分钟)。
2.TB6612电机驱动模块
该项目所用的电机驱动模块就是这款市面上最常见的TB6612电机驱动模块,内部集成两个H桥,可以同时驱动两个直流电机。
接线说明

VM:电机电流供电口,一般接12V电池
VCC:TB6612芯片供电引脚,输入3.3V或5V
AO1、AO2:接直流电机A的正负极
BO1、BO2:接直流电机B的正负极
PWMA、PWMB:分别接单片机PWM信号输出的两个引脚
AIN1、AIN2:接单片机GPIO,AIN1高电平AIN2低电平,电机正转;AIN1低电平AIN2高电平,电机反转。如果都为低电平,电机失能(无工作电流);都为高电平,电机制动
BIN1、BIN2:同理接GPIO
STBY:STBY高电平,TB6612芯片使能(工作);低电平,芯片失能(不工作)。一般我们直接输入高电平就可以
原理讲解
我们知道电机的转向和输入电流方向有关,那我们设计这样一个电路:
这就是H桥电路,我们可以通过这四个开关进行如下组合,以实现对电流的正反向电流改变:
如图一,我们闭合开关1、3,其余断开,电流正向流入电机,电机正转;同理,图二我们闭合开关2、4,其余断开,电流反向进入电机,电机反转。当然,实际上的开关会替换成大功率mos管(这里就不再展开)
好的,解决了电机转向的问题,我们来解决转速问题。接受过义务教育的我们知道,对于直流电机,电流越大,内部转子受力越大,转速越快。那么,显而易见的是我们要改变直流电机的转速,就要改变电流大小。那能不能用电阻限流的方法来控制电流呢?该方法实质上是用电阻(三极管)消耗掉多余的功率,这会导致器件发热严重甚至烧毁。其实,我们可以引入等效电流的概念,如图:

我们将流经电机的电流状态按时间分为HIGH和LOW,HIGH表示高电平,LOW表示低电平。目前电机输出设为100

接着我们将该图像分为如图所示的几个周期,然后再改变每个周期中高电平开启的时间:

这样,电机就有一半的时间工作,剩下的时间停止。也就是说电机输出的功率为原来的一半。我们知道,物体运动是有惯性的,如果把周期缩短,那么直流电机的输出就会变得平滑。同样的,如果我们将电流为高电平的时间设置为原来的1/4,那么电机的输出就是25。这就是PWM(脉冲宽度调制)的原理,高电平开启的时间在一个周期所占的比例就是其占空比。这样,我们就可以输出任意想要的速度。
3.stm32f103c8t6硬件资源
这款单片机内置三个标准定时器(TIM2、TIM3、TIM4),一个高级定时器(TIM1),对于本项目完全够用。本项目用TIM2输出2路PWM信号,TIM3、TIM4分别作为两个电机的编码器测速接口,剩下的TIM1则用作测量内部程序运行周期(后续PID会用到)。对于串口通信,PB10(CL)、PB11(DA)这两个I2C引脚用作与MPU6050通信;PB8(CL)、PB9(DA)这两个I2C引脚用作与0.96寸OLED通信;最后预留PA9(TX)、PA10(RX)与无线信号通信。下附详细原理图:

接线部分可以参考这份原理图,或者直接用我提供的Gerber制版也是可以的
这部分不细讲原理,感兴趣的可以去看b站up江协科技(毕竟要是展开的话就没完没了了)
4.mpu6050姿态传感器
该传感器只能从寄存器中读取到原始的加速度和角加速度,拿到数据后我们要将其解算成欧拉角(pitch、roll、yaw,其中pitch是该项目所需要的)。除此之外,因为芯片内部是通过测算电压的改变量来实现加速度测量的,所以其测量值会因为电源纹波和高频信号等干扰产生抖动,这会对后续PID算法产生影响。不过好在我们可以通过对数据进行滤波(如低通滤波),通过软件资源弥补硬件缺陷。关于姿态解算的部分我用的是官方的dmp库,可以直接在我提供的工程文件中下载,文件路径为.\code\Hardware\Mpu6050(这里感谢B站up 中Left10)
5.PCB讲解(附带Gerber制版文件)
没学过或者不屑于看这部分的可以直接跳过,直接将Gerber文件提交到厂家(比如jlc,网上有免费打板教程,这里不再赘述)。


如果你要自己设计PCB,注意如下几点:

1:I2C通信线尽量远离PWM高频信号和大电流,使用等长布线,并且SCL和SDA不要靠太近
2:MPU6050模块的地引脚尽量不要直接连地铺铜,单独拉一根连到DC接口(地隔离防止信号干扰)
3:编码器信号线远离I2C信号线,使用等长布线
4:(可选项)在电机驱动模块的STBY引脚出加一个限流电阻
5:DCDC_BOOST电源电路与其他信号电路隔离
6:供电引脚加粗,在地铺铜之前检查发散线宽(设置宽一点)
7:排针引出的PA9、PA10为串口通信引脚,后续可连接无线通讯模块

6.低通滤波&PID公式讲解
公式我这里只简单概况一下,感兴趣的可以自行研究
低通滤波
我们这里介绍一阶低通滤波器(指数加权移动平均):

-
x[n]:当前输入信号(采样值)
-
y[n]:当前输出信号(滤波结果)
-
y[n−1]:上一时刻输出
-
α:滤波系数(0<α<10<α<1)
一阶低通滤波器,其中α 为滤波系数,是我们重点调参对象,决定响应速度与平滑度,α越大,输出越平滑,但是相应的反应相应的也会变慢。这就相当于用历史值稀释测量值,让测量得到的值不会轻易改变
PID
PID(比例-积分-微分)控制器,通过该算法我们可以实现电机的闭环控制。

-
u(t) 是控制器的输出,即控制量。
-
e(t) 是误差值,即期望值与实际值之间的差值。
-
Kp 是比例系数,它决定了误差值的大小对控制量的影响。
-
Ki 是积分系数,它决定了误差值的累积对控制量的影响。
-
Kd 是微分系数,它决定了误差值的变化率对控制量的影响。
看着好像有一点复杂,我们可以把这个公式拆开分析:
比例项Kp
这一项是整个公式中最好理解的一项:误差*系数。也就是说误差越小,输出就会减小。系数越大,对误差的反应越灵敏
微分项Kd
这一项的作用是限制Kp的输出,防止输出的突然改变,让输出更加平滑。我们知道,平衡车具有惯性,如果只有比例项,那么平衡车很可能会在平衡位置摆动。这一项是对误差求微分,也就是:(前一次误差-当前误差)/dt,dt是程序一次循环所用时间。系数越大,输出越丝滑,相应的对误差的反应越迟钝
积分项Kp
(误差*dt)再累加,目的是消除稳态误差。怎么判断是否有稳态误差?我们只需要在输出为零的情况下对系统在平衡位置进行受力分析,如果和外来不为零,就存在稳态误差。系数越大,对误差的反应越迟钝(需要更多的时间进行反向积分)。但是,这一项有助于提高系统鲁棒性,所以代码中我还是保留了这一项(提高抗干扰能力)
7.代码说明

拿到代码后如果要调参直接修改main.c中的宏定义就可以
代码中让小于±1°的误差归零;将PID分为大角度和小角度两套参数,大角度优先回正(Kp偏大),小角度优先平衡(Kd为主);对时间和微分项的误差进行低通滤波。(重点应该就这些,剩下的看看源码注释应该也能懂,篇幅原因不再展开)
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐


所有评论(0)