news 2026/6/8 18:41:33

平衡车项目学习笔记,一、

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
平衡车项目学习笔记,一、

核心硬件驱动模块

1.驱动电机用motor相关函数

2.读取速度用encoder相关函数

3.获取姿态数据,用MPU6050相关函数

4.调试时调用两个串口相关函数

平衡方案

本项目使用两轮平衡小车,仅需关注俯仰角,只有精准实时获取车身前倾 / 后倾角度,后续才能通过 PID 算法控制电机正反转,抵消倾斜、维持车身直立,是整个控制系统的 “感知基础”。

实现方案:因此利用 MPU6050计算小车的俯仰角,并通过互补滤波算法解析。

单独用加速度计计算俯仰角:

测加速度就是测每个面受到的重力,F=ma,成正比。根据MPU6050在小车上安装的方向和位置,这里我们根据x轴和z轴的夹角来计算俯仰角

优点:静态精度高,小车静止时测出的角度稳定、无漂移;

缺点:抗干扰极差,小车电机振动、车身移动、加减速都会严重干扰数据(加速时会受到力测量出加速度值,再用上面的公式计算会有偏移)。测绝对角度

单独使用陀螺仪计算俯仰角:

测角速度方法简单来说就是两个球绕一根杆旋转,转动速度越快力越大,圆周运动时,角速度的积分就是角度,所以只要简单的对角速度进行积分就能测出角度。而这里的角度不是绝对值,而是变化的角度。由于小车绕xoz平面旋转,因此只要测绕y轴的角速度就能测出俯仰角。

由于只能隔一段时间采样角速度,是离散系统,因此只能计算矩形面积的和,还要知道采样间隔T

优点:动态响应快,车身倾斜瞬间就能检测到角速度,短期测角精度高,不受振动影响;

缺点:存在积分漂移问题。陀螺仪只能输出角速度,需要不断积分得到角度,随着时间推移,微小误差会持续累积。测相对角度,且要明确初始值。

核心算法:互补滤波(两者结合)

思路就是以陀螺仪为主,加速度计为辅。通过参考加速度计角度,来修正陀螺仪角度的漂移,同时为陀螺仪提供绝对角度参考值。

下面的式子就是在陀螺仪算出的角度上加一个偏移量,使陀螺仪算出的角度不断偏向加速度计算出的角度,同时这之间的差值越大,偏移量越大。

这里α的值大了,算出的值易受冲击影响更明显(加速度计的缺点),小了,算出的值在稳定时的稳态误差越大(陀螺仪的缺点)。一般给0.01或0.02。

最后还要抑制零度漂移,得到小车平放时的y轴角速度,然后让其减去这个值使y轴角速度归零。

PID控制结构

这里只包括了角度环和转向环

当差分PWM给零时,左右轮转动速度一样,小车直行。当平均PWM给10,差分PWM给4时,左轮PWM为12,右轮PWM为8,左轮转速快,小车右转。

因此只要控制平均PWM和差分PWM就可以控制小车运动,同时前后和左右控制能实现解耦,前后只要控制平均PWM,左右只要控制差分PWM。

主要代码:计算俯仰角,平均PWM,差分PWM

MPU6050_GetData(&AX, &AY, &AZ, &GX, &GY, &GZ); GY -= 37; AngleAcc = -atan2(AX , AZ) / 3.14159 * 180; AngleGyro = Angle + GY / 32768.0 * 2000 *0.01; float Alpha = 0.01; Angle = Alpha * AngleAcc + (1 - Alpha) * AngleGyro;//angle为俯仰角 if(Angle > 50 || Angle < -50) { RunFlag = 0; } if(RunFlag) { AnglePID.Actual = Angle; PID_Update(&AnglePID); AvePWM = -AnglePID.Out; LeftPWM = AvePWM + DifPWM / 2; RightPWM = AvePWM - DifPWM / 2; if(LeftPWM > 100) {LeftPWM = 100;} else if(LeftPWM < -100) {LeftPWM = -100;} if(RightPWM > 100) {RightPWM = 100;} else if(RightPWM < -100) {RightPWM = -100;} Motor_SetPWM(1, LeftPWM); Motor_SetPWM(2, RightPWM); } else { Motor_SetPWM(1, 0); Motor_SetPWM(2, 0); }

PID的参数如下

PID_t AnglePID = { .Kp = 3.1, .Ki = 0.1, .Kd = 3.7, .OutMax = 100, .OutMin = -100, };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/8 18:39:12

基于HC08MP16的电机控制实战:从PWM原理到多电机与伺服应用

1. 项目概述与核心价值电机控制&#xff0c;听起来是个挺硬核的领域&#xff0c;但说白了&#xff0c;它就是让电机这个“大力士”听我们的话&#xff0c;让它转多快、转多少、用多大力气&#xff0c;都能精确控制。从工厂里不知疲倦的机械臂&#xff0c;到家里安静送风的空调风…

作者头像 李华
网站建设 2026/6/8 18:33:54

如何免费解锁旧Mac潜力:专业级系统升级完整指南

如何免费解锁旧Mac潜力&#xff1a;专业级系统升级完整指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 还在为苹果官方停止支持的旧款Mac无法升级最新mac…

作者头像 李华
网站建设 2026/6/8 18:30:10

高效窗口分辨率自定义工具SRWE:三步实现游戏与设计自由

高效窗口分辨率自定义工具SRWE&#xff1a;三步实现游戏与设计自由 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE SRWE窗口分辨率编辑器让你实时掌控任何运行中应用程序的窗口尺寸、位置和样式。无论是游戏玩家…

作者头像 李华
网站建设 2026/6/8 18:26:31

HS2-HF补丁:3步解锁完整汉化与去码功能的终极游戏增强方案

HS2-HF补丁&#xff1a;3步解锁完整汉化与去码功能的终极游戏增强方案 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch HS2-HF补丁是一款专为Honey Select 2 Lib…

作者头像 李华
网站建设 2026/6/8 18:23:05

点哪天记哪天:Java做的日历小工具,带弹窗提醒和本地存档

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;双击运行日历备忘录.jar就能用&#xff0c;界面是标准的年月日日历视图&#xff0c;鼠标点任意日期直接弹出文本框写事情&#xff0c;保存后自动存到Diary.txt里&#xff1b;再点同一天会立刻弹窗提示‘此日已有…

作者头像 李华