0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

简易mini版平衡小车具体制作过程

STM32嵌入式开发 来源:STM32嵌入式开发 作者:STM32嵌入式开发 2022-06-23 09:49 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

STM32平衡小车大家应该见到过很多了,作为学生或者DIY爱好者做一辆小型的mini平衡小车还是可以实现的。给大家带来博主老倪制作的迷你的平衡自行车项目,相信我们能从中学到一些新东西。在本文将会介绍平衡自行车的具体制作过程,包括机械、电路和代码。

本项目要说的简易mini版平衡小车。

自行车平衡理论

模型分析

1 倒立摆

很显然我们知道自行车在左右方向上不稳定,这是一个很常见的物理模型——倒立摆。

b3fa0110-f291-11ec-ba43-dac502259ad0.png

顾名思义,倒立摆的意思就是倒着的摆,比如一个倒着的杆,

b40e828e-f291-11ec-ba43-dac502259ad0.png

倒立摆的特性:不稳定,只要偏离平衡位置,就会有一个力(重力的分力)使系统更加偏离平衡位置,这样偏差就会越来越大。

一般倒立的杆在前后左右方向都有可能倒下,在二维的平面上不稳定;而自行车仅在左右方向上可能倒下,是一维的倒立摆,这要简单一些。

2 自行车的平衡控制

自行车属于倒立摆模型,倒立摆是不稳定的,那么倒立摆应该如何控制才能平衡呢?

我们把问题拆分一下:

怎样的状态才叫平衡?

我们能控制的是什么?

如何控制才能稳定平衡?

2.1 怎样的状态才叫平衡

我们要对”平衡”进行数学描述,所谓的平衡其实就是倒立摆的倾角稳定在一个我们想要的值。

b40e828e-f291-11ec-ba43-dac502259ad0.png

通常我们想要平衡在θ = 0处。

2.2 我们能控制的是什么

对于倒立摆模型,通常我们能控制的是底端的力或速度或位置,不同的控制量对应的控制方法不同。

对于自行车来说,它的控制方式不像通常的倒立摆那样直接控制底部,而是间接地通过转向来控制,当自行车以一个固定的速度前进时,自行车把手以一定角度进行转向(设为α),自行车会做相应半径的圆周运动,产生相应大小的”离心力”。

在自行车这个费惯性系里看来,只要对把手进行一定角度的转向(α),就会产生一个相应大小的横向力:

b43a8014-f291-11ec-ba43-dac502259ad0.png

这就是我们进行平衡控制时的实际控制量——把手转角α,只要控制它就能控制回复力。

2.3 如何控制才能平衡

上面我们已经能够通过转向产生回复力,这个回复力可以把倒立摆”掰回”平衡位置,有往回掰的回复力就能稳定平衡了吗?

并不是这样,我们再来回顾一下中学物理:

过阻尼状态的摆会以较慢的速度回到平衡位置;欠阻尼状态的摆会很快回到平衡位置,但会在平衡位置来回摆动;临界阻尼状态的摆会以最快的速度稳定在平衡位置。

结合到实际的自行车平衡中就是:

如果恢复力不够大,就无法矫正,或者矫正速度很慢,这会导致系统不稳定;如果回复力过大,就会导致矫正过度,这也会导致系统不稳定;我们最希望的状态就是回复力刚刚好,刚好使倒立摆快速回到平衡位置,又不至于矫正过度。

这是一个复杂的数学计算过程,回复力大小会在系统运行时不断地计算(本平衡自行车是20ms计算一次),用到的是PID算法,会在后面详细介绍。

3 自行车平衡需要解决的基本问题

获取左右方向倾角θ

以合适的算法控制转角α使系统稳定平衡

这将会在下面详细讨论。

姿态检测

1 检测的是什么

检测的是自行车左右倾斜的角度。

2 怎么检测

用一个叫gy521的模块,里面用的是mpu6050芯片,带有陀螺仪和加速度传感器

gy521的具体使用会在第三篇-实践篇介绍,这里我们知道通过这个模块我们可以得到自行车各个方向的加速度和角速度。注意哦,我们不能直接得到倾斜角度,我们的到的是各个方向的加速度和角速度,需要进行一些复杂的计算才能得到正确的倾斜角度。

常用的算法有互补平衡滤波、卡尔曼滤波。

PID算法

前面已经分析了,我们通过控制把手转角来控制回复力,我们需要实时计算一个合适的回复力使系统稳定平衡。

b4451772-f291-11ec-ba43-dac502259ad0.png

有一个小球在光滑球面上,小球的位置是x,光滑球面顶端在L处,我们可以控制小球水平方向力F,现在要求让小球稳定平衡在x0处。

先看简单情况x0=L,此时偏差为L-x,

我们给出一个比例项(P) F = kp*(L-x),这样就会有一个回复力,当偏差存在时就会有一个力把小球拉回L处。

这存在的问题是,小球接近L时是会有一定速度的,小球越来越接近L,此时的力仍然是在把小球往L处拉,这会导致小球到达L时(我们想要的位置)速度很大,小球无法立刻停下来,而是会冲过去。

这样小球就会在L附近来回摆动,这是不稳定的状态,属于欠阻尼状态。

为了解决上述问题需要加一个微分项(D) F = kd*dx/dt = kd*v,所谓”微分”指的是位置x对时间的微分,说白了就是速度。

意思就是当速度越大,就产生一个反向的力使速度减小,这样就可以防止出现上面小球冲过去的。

可以认为这一项具有”预测”功能,预测小球下一时刻的状态从而提前做出反应,预测小球将要到达L处,提前减速。

也可以认为这一项具有阻尼作用,相当于系统中有一个和速度成比例的阻尼力。

这个”阻尼力”调得过小会导致欠阻尼状态,调得过大会导致过阻尼状态。

积分项此时可以不用,积分项是当平衡位置x0不等于L时使用的,

当平衡位置不是L处,那么当小球静止在平衡位置x0时,由于在坡道上会有一个恒定的横向偏移力,此时比例调节作用为0(Δx=0),微分调节作用也是0(v=0),所以小球在该处无法平衡,会在更远离平衡位置处达到平衡,那么就会有一个长时间存在的偏差。

积分作用就是检测偏差进行累积,对于上面这个长时间存在的偏差进行积分(累积叠加),使系统在长时间范围可以稳定在要求的平衡位置。

平衡自行车-实践篇

在本文将会介绍平衡自行车的具体制作过程,包括机械、电路和代码。

材料

机械

b45b85f2-f291-11ec-ba43-dac502259ad0.png

电路

b46e61f4-f291-11ec-ba43-dac502259ad0.png

动力部分

传动方式

如图,我用的是皮带或者齿轮传送的方式,因为比较好实现。

b478877e-f291-11ec-ba43-dac502259ad0.png

电机选择

这个DIY是不考虑变速情况的,平衡的参数都是按照一个固定速度调的。

所以动力部分的作用就是提供一个恒定的速度,并且这个速度尽可能稳定,尽可能不受外部影响。

电机应选择扭力大一些、转速稳定的减速电机。

电机供电

电机是直接供电还是使用升压模块供电要根据电机特性,有些电机用升压模块可以提高功率,有些大电流电机用升压模块反而可能限制了电流。

我这里用升压模块升到12v给N20电机供电的。

另外,电机通过三极管受stm32控制,通过控制占空比也可以限制电机输出的功率。

转向部分

转向部分用一个舵机带动把手转动即可。

电路

在GitHub工程里有详细的引脚连接表

https://github.com/nicekwell/balance_bike

供电

用3.3v稳压芯片给整个控制系统供电,包括单片机、GY521模块、蓝牙模块。

用5v稳压芯片给舵机供电。

用12v升压模块给电机供电。

下载

我是用串口给stm32下载程序的。

b4cc1326-f291-11ec-ba43-dac502259ad0.png

GY521

这个模块通过i2c通信,只需要连接4根线。

3.3v

GND

PB0 GY521 I2C SCL

PB1 GY521 I2C SDA (用的是IO模拟i2c)

电机

点击用12v升压模块供电,由于不需要反转,用三极管即可直接驱动,电路图如下:

b4d76cbc-f291-11ec-ba43-dac502259ad0.png

加三极管的目的是为了可以通过调节PWM占空比来限制输出功率,但我的实际情况是100%输出时动力才勉强足够。相关推荐:STM32中PWM的配置与应用详解。所以如果你不需要限制电机输出功率,或者通过其他方式限制输出功率,也可以不要三极管,不通过单片机控制。

舵机

舵机是用5v供电的,而单片机是3.3v电平,对于PWM控制脚可以通过2个三极管实现同相的电平转换:

b4e0cfd2-f291-11ec-ba43-dac502259ad0.png

蓝牙模块

下图是我使用的蓝牙串口模块,可以实现串口透传,只需要4根线连接:vcc、gnd、txd、rxd。

b4f0e106-f291-11ec-ba43-dac502259ad0.png

蓝牙模块是用来调试和遥控的,没有它也能跑。建议还是加上这个模块,在调试PID擦数时会非常方便。相关文章:PID算法原理介绍。

代码结构

代码提交在GitHub,点击阅读原文直达。

主要分为3个部分:

基础的驱动程序,实现电机、舵机、gy521数据读取;

平衡控制系统,核心是一个20ms定时器,每20ms进行一次数据采集、计算和响应;

遥控和调试系统,实现log输出、接收遥控信息。

b507bd7c-f291-11ec-ba43-dac502259ad0.png

平衡控制

main函数会初始化一个定时器20ms中断一次,调用 main/balance.c 里的 balance_tick 函数,平衡算法在 main/balance.c 实现。

每20ms到来会执行一次:

读取传感器加速度和角速度信息。

互补平衡滤波计算当前姿态。

用PID算法计算出前轮转角。

遥控和调试

两部分:状态输出和指令接收。

状态输出

在main函数的while循环里,利用串口中断构建一个简单的界面显示状态。

指令接收

串口接收到的数据会传给main/control.c,该文件分析串口数据,解释成相应的操作。主要是PID参数调节。

点击阅读原文,可以获取平衡自行车完整的代码

老倪

http://nicekwell.net/blog/20180123/ping-heng-zi-xing-che-shi-jian-pian.html

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模型
    +关注

    关注

    1

    文章

    3914

    浏览量

    52432
  • 平衡小车
    +关注

    关注

    1

    文章

    41

    浏览量

    13023

原文标题:STM32平衡自行车项目,你也可以试试!文末附代码

文章出处:【微信号:c-stm32,微信公众号:STM32嵌入式开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    miniBalan平衡小车为什么能“稳如泰山”?来快速探索下PID算法的奥秘

    一、为什么平衡小车能“稳如泰山”?普通四轮小车依靠宽大底盘和稳定结构支撑小车,但只有两个轮子的平衡小车
    的头像 发表于 05-21 11:45 791次阅读
    miniBalan<b class='flag-5'>平衡</b><b class='flag-5'>小车</b>为什么能“稳如泰山”?来快速探索下PID算法的奥秘

    从PID到HAL库全开源:搭载AI大模型的miniBalan平衡小车,极客的学习与开发利器

    从手动操控到AI自主,从稳定平衡到多模态交互。miniBalan以STM32高性能主控与AI大模型,开启AI轮式平衡小车新纪元。一、视听感知:自然交互的基础miniBalan搭载AI大模型模块,集成
    的头像 发表于 05-20 11:26 1203次阅读
    从PID到HAL库全开源:搭载AI大模型的miniBalan<b class='flag-5'>平衡</b><b class='flag-5'>小车</b>,极客的学习与开发利器

    幻尔miniBalan智能平衡小车搭载PID、LQR等多维算法,融合多模态AI大模型

    幻尔科技发布AI大模型平衡小车miniBalan,以“全力开卷”的姿态,为每一位探索智能控制领域的学习者,打造出集经典理论、前沿AI、实战创新于一体的全能学习平台,实现从入门到精通的无缝进阶!一
    的头像 发表于 05-19 11:46 972次阅读
    幻尔miniBalan智能<b class='flag-5'>平衡</b><b class='flag-5'>小车</b>搭载PID、LQR等多维算法,融合多模态AI大模型

    半导体制冷片怎么选?一个应用案例教会你!

    如何正确选择半导体制冷片是一个平衡性能、能效和成本的过程。掌握Qmax、ΔTmax、Imax、Umax这些核心参数的应用技巧,可以有效帮助你找到适合的型号。另外,选型完成后别忘了评估散热方案(之后也会进行详细的讲解说明),否则系
    的头像 发表于 04-10 10:25 586次阅读
    半导<b class='flag-5'>体制</b>冷片怎么选?一个应用案例教会你!

    Labview接口(interface)的工作过程

    文字描述部分: 目的:产生随机数,当随机数达到某个阈值时触发一个状态事件。 创建过程: 1、用labview 模板创建root Actor ,这个根操作者,用来管理所有其他的Actor 2、创建一个
    发表于 02-03 11:07

    请问CW32 UART用于数据收发的具体过程是怎样的?

    CW32 UART用于数据收发的具体过程是怎样的?
    发表于 12-24 07:42

    高精度CT在测量电流不平衡度中具体是如何工作的?

    高精度 CT(电流互感器)在电流不平衡度测量中,是通过 电磁感应实现大电流信号的精准变换 ,并依托自身优异的精度、一致性和抗干扰特性,为后续不平衡度计算提供可靠原始数据,其具体工作流程可分为 5 个
    的头像 发表于 12-05 16:37 1113次阅读
    高精度CT在测量电流不<b class='flag-5'>平衡</b>度中<b class='flag-5'>具体</b>是如何工作的?

    CW32L012小型机器人控制评估板活动 四足机器人+智能小车 开箱评测

    /L5JUdqlqjoqIoUxtlQrcs2CcnHg 里面有更详细的讲解各个模块功能与软硬件具体实现讲解,同时还配套了相关的视频教程,这个做得确实比较用心了。 3、智能小车组装 在B站上CW32生态
    发表于 11-24 23:44

    【CW32L012小车测评】到手小车测评其中基本功能

    开箱介绍 在CW小程序中购买了小车,其中的包装特别好,外面有个箱子来装着,其中我们将外包装拆开,可以看见我们本次购买的小车的本体,我购买的是焊接完成的,所以我可以开箱直接试用,方便很多,如果大家追求
    的头像 发表于 11-24 22:59 556次阅读
    【CW32L012<b class='flag-5'>小车</b>测评】到手<b class='flag-5'>小车</b>测评其中基本功能

    KMbalancerII+动平衡等级评估功能介绍#动平衡仪#动平衡校正

    平衡
    KM预测性维护专家
    发布于 :2025年11月04日 16:36:39

    硅片超声波清洗机操作过程中常见问题及解决办法

    在半导体制造领域,硅片超声波清洗机是关键的设备之一。其主要功能是通过超声波震动,将硅片表面的微小颗粒和污染物有效清除,确保其表面洁净,实现高质量的半导体生产。然而,在实际操作过程中,硅片超声波清洗机
    的头像 发表于 10-21 16:50 2278次阅读
    硅片超声波清洗机操<b class='flag-5'>作过程</b>中常见问题及解决办法

    如何精准计算半导体制冷片的实际功率需求

    华晶温控将和大家一起探讨半导体制冷片的制冷功率计算公式及其推导过程,并介绍在线计算工具的使用,帮助您清晰了解自身的制冷功率需求。半导体制冷片制冷原理:半导体制冷片,
    的头像 发表于 09-04 14:34 2556次阅读
    如何精准计算半导<b class='flag-5'>体制</b>冷片的实际功率需求

    能源行业的边缘计算具体使用如何-EG8200Mini的实现场景化赋能

    在能源行业的数字化转型中,边缘计算网关成为了连接物理设备与智能决策的核心枢纽。从工厂的能耗优化到充电站的智能调度,从写字楼的精细化能源管理到商场的动态负荷平衡,边缘计算技术通过本地化数据处理与实时
    的头像 发表于 08-29 16:51 1136次阅读
    能源行业的边缘计算<b class='flag-5'>具体</b>使用如何-EG8200<b class='flag-5'>Mini</b>的实现场景化赋能

    智能小车设计源码和图纸资料

    智能小车设计源码和图纸
    发表于 08-25 15:38 2次下载

    不同的PCB制作工艺的流程细节

    半加成法双面 PCB 工艺具有很强的代表性,其他类型的 PCB 工艺可参考该工艺,并通过对部分工艺步骤和方法进行调整而得到。下面以半加成法双面 PCB 工艺为基础展开详细说明。其具体制作工艺,尤其是孔金属化环节,存在多种方法。
    的头像 发表于 08-12 10:55 7958次阅读
    不同的PCB<b class='flag-5'>制作</b>工艺的流程细节