找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 17592|回复: 13
打印 上一主题 下一主题
收起左侧

超声自平衡小车(新手入门自平衡小车方案)

  [复制链接]
跳转到指定楼层
楼主
1、项目概述

2015年底在网上看到各种制作自平衡小车的帖子,也跟着做了起来。因为第一次做,心里没底,也就没有投入过多的资金,一切按照最小配置进行,所以选择“TT马达”,俗称“香蕉电机”的小车底盘。在等快递送货期间,才看到各种说用“香蕉电机”做自平衡小车的问题,最大的问题就是电机启动对传感器和单片机的干扰问题,还有就是平衡的稳定性不好等问题。在我以Arduino + MPU6050 + L298N为核心做完后,闲得没事干,就想做一款成本低,易上手,最小配置和最基本功能的自平衡小车,其目的就是给那些没有什么经验的刚入行的新手们提供一个入门的解决方案。所以这个项目的目标有以下几点:

a、成本低;

b、目标功能明确,就是实现小车的自平衡;

c、系统稳定可靠;

d、调试、操作方便简单。


2、项目方案


基于上述目标,本方案采用超声波测距模块作为小车平衡状态的检测,免去了对加速度、陀螺仪传感器的理解和复杂处理算法。小车的平衡控制仍然采用网络上流行的Arduino开源硬件,再加上电机驱动模块 L298N,电机仍然采用TT马达(香蕉电机)。

该方案为了降低成本,采用电位器调整设定小车的平衡参数,不使用蓝牙无线模块或有线串口在线调整参数。

用超声波测距的方式实现的自平衡小车,网络上有人提出这种方案无法在坡度变化的斜坡上保持平衡,这种说法经过我的实践,是有解决方案的,这个问题我将在后面进行阐述。

平衡控制的算法还是采用平衡车中经典的PD算法。

3、硬件设计

硬件设计比较简单,以Arduino Nano为核心控制模块,采用HC-SR04超声波测距模块,L298N电机驱动模块,供电采用7.4V/2200mAh锂电池。图中三个10K电位器分别用于平衡点设置、PD算法中Kp和Kd系数设置的调整。

电路原理图如下所示:

图中J1为HC-SR04超声波测距模块,J2、J3为L298N模块,Arduino Nano为核心控制模块,MG1、MG2分别为左右电机。

与之前用香蕉电机+MPU6050做的自平衡小车相比较要简单很多,在MPU6050方案中,用了两块电池,其中一块单独用于电机供电,而且L298N必须用光耦隔离的。

而用超声波做的自平衡小车,虽然用的是TT马达(俗称香蕉电机),但仅一块电池供电,L298N电机驱动模块也没有光耦隔离,从最终调试后的效果上看,还比前者更稳定。

成品照:


材料清单

这个材料清单比较完整,是带遥控器的。

4、器材采购

a、Arduino Nano模块


b、HC-SR04 超声波模块

注意,HC-SR04超声波模块,宝上有两种,我们用的是这种不带晶体的,还有种带晶体(见下图)3.80元左右不要买,在近距离不稳定,另外测量的最小周期要稍长一些。


c、L298N电机驱动模块


d、TT马达及固定件




e、电池及充电器





5、程序设计

程序源代码:
v2.4.zip (7.66 KB, 下载次数: 97)

程序很简单,总共不到90行,有不明之处请留言


6、调试流程

最新版超声平衡小车装配完毕后如下图所示。


串口调试助手程序
SSCOM32.zip (351.78 KB, 下载次数: 25)

a、准备工作

将Kp与Kd调为0,调整方法是,旋转电位器后,按下Arduino模块上的复位键调整方可有效。调整后用串口调试助手(sscom42.exe)发送“F”命令,读取超声自平衡小车参数的设定值。在使用串口调试助手前,首先选择串口调试助手对应的串口号,设置好波特率,方可发送上述命令读取超声自平衡小车参数的设定值,操作界面如下图所示。

第一个数据为平衡点设定值,第二个数据为Kp,第三个数据为Kd。

b、超声波测距测试

发送相应“L”命令,读取超声波的测距值,注意,这里不是实际的mm或cm值,而是对应距离来回的传播时间值,是单片机内部计时的输出值。

操作界面如下图所示。

第一个数为超声波测距模块的直接输出值,第二个数为一阶滤波后的值。改变超声波测距模块与被测界面的距离,这两个值会发生相应的改变,距离近,测得的值变小,距离远测得的值就增大。


c、寻找物理平衡点

在Kp、Kd为0时,用手寻找自平衡小车的物理平衡点,同时用“L”命令(500ms定时发送)读取超声波测量的返回值,确定平衡点的返回值,并记录下来。


d、平衡点PB的设定

调整PB电位器,并在Arduino复位后,用“F”命令读取超声自平衡小车参数的设定值,使得第一个返回的数据与上述确定的物理平衡点相一致。

e、判断电机运转方向是否正确

在完成上述调整后,逐渐增大Kp(请记住,每次调整后,都必须复位Arduino模块,调整才能生效),看到电机能够动作时,停止调整Kp。这时将超声波模块一端稍稍下压(也就是使超声波探头与地面距离缩短),观察两个电机的转动方向,往前(超声波测距模块一端为前)转测试正确的,往后转则说明相应的电机两根线接反了,将接反的线调换过来即可。


f、Kp参数整定

在电机接线正确后,再逐渐增大Kp,使得小车能够来回有点摆动即可进入调整Kd参数阶段。


g、Kd参数整定

在调整完Kp后,逐渐增大Kd,使得摆动消失,如果继续增大Kd,小车会出现明显的抖动,此时将Kd往回调整,使得抖动消失即可。


h、平衡点PB的进一步调整

在上述参数调整完毕后,小车一般就能保持平衡了,如果出现小车往一边跑的现象,可通过调整PB电位器加以修正。如果小车往前跑(超声波模块一端为前),调整PB使得平衡点设定值增大;如果小车往后跑,调整PB使得平衡点设定值减小,直到小车能够长时间稳定为止。


7、照片与视频








8、总结与展望

超声自平衡小车的基本版已经完成,在制作过程中与我之前用MPU6050制作的小平衡车相比有以下几点体会:

a、在用TT马达的情况下,如果系统使用同一组电池供电,电机一启动Arduino与MPU6050立即死机,或者MPU6050的数据受干扰极为严重,不可使用。解决办法是用另一组电池单独给L298N供电,并且L298N要选择带光耦隔离的。但同样的使用TT马达的情况下,用超声波测距方案,系统仅用一组电池即可,而且L298N也无需光耦隔离,系统很稳定。

b、超声波传感器的选择要选择最小测量周期短的模块,第一次我使用的是US-015 超声波测距模块,US-015是目前市场上分辨率最高,重复测量一致性最好的超声波测距模块,US-015的分辨率高于1mm,可达0.5mm,测距精度高,重复测量一致性好,测距稳定可靠。但他的最小测量周期大于10ms,而且对输出数据经常有跳动(这是由于它的灵敏度很高,在近距离时超声波在模块与地面之间的来回反射的二次信号都能被检测到),为此在地面垫上一个地毯吸收了部分能量的超声波,才能稳定工作。在第二版中更换了HC-SR04超声波模块,这个模块的测距精度虽然只有3mm,但它的最小测量周期仅略大于3ms。但这种模块市场上有两种,一种没有晶体,一种是带晶体的,带晶体的很不稳定,建议大家不要选择。

c、小车的平衡稳定性与多种因素有关,建议在结构上,重心越低越好。

d、另外,我还做了一个对比测试,数据见下表:


误差绝对值是指小车在一段时间内,实测距离与设定平衡点距离误差绝对值的平均值;滤波是指程序中对超声波测量的距离滤波或不滤波直接使用;循环周期是程序中的延时时间,超声波测量需要大约704us,一个周期大约为3.84ms,程序处理时间大约为136us,实测波形图如下。

超声测距波形图:


3ms延时的一个周期波形图:


通过以上对比分析,当一个循环周期大于20ms时,小车很难长时间保持平衡了,另外重心的升高,平衡的稳定性明显变差。

e、下一步选择具有测速功能的小车底盘,实现上下坡、下台阶等复杂动作,不为别的,只是证明超声自平衡小车这个方案是没有严重的缺陷的。因为自平衡小车本身就有很多局限性,譬如他能下台阶就不能上台阶吧,也不能在极不平坦的路上行走等等。

f、最后,我想说明一下,自平衡小车虽然简单,但也是一个麻雀虽小五脏俱全的项目,譬如小车的结构设计、电机的响应、扭矩的大小、小车的轮胎的选择、PID的调参等等都会影响到小车的平衡稳定性。我们在网上看到的资料大都是说传感器、程序和调参,在结构设计、电机的选择(明确的参数数据对比)等方面都很欠缺或不完整,没有充分的说服力。很多新人就想学校的实验课程一样,仅仅照别人的做法做了一遍,没有太大的收获,特别是碰到问题不知道如何深入分析。大家在DIY的过程中都做出点自己的东西,无论成功与失败,哪怕做一些经验和教训的总结也是对大家的贡献。希望大家在DIY这个乐园里无拘无束的、自由自在的、快快乐乐的玩耍!!!



加“全棉地毯”是由于US-015的超声波测距模块在一般的反射面情况下,并且超声测量周期小于40ms时,返回值经常出现异常,我用示波器观察的波形与返回的实测数据是完全一致的。现附上波形示意图如下:


在实测过程中,我发现在超声波的探测面朝上工作时,我用小块的障碍物测试时,并不出现上述现象。我分析可能是由于朝下时,反射面比较大,可能是超声波在小车与地面之间来回反射造成的某种干扰,后来我就想到用“全棉地毯”吸收部分超声波能量,避免来回反射造成测距的干扰。因为测量周期大于40ms的话,整个调整就反应不过来了。

这里告诉大家,任何事、或者任何方案都有可能会出现一些意想不到的问题的。当时选择US-015是考虑到它的测距精度高,探测精度0.1cm+1%。

今天我换上HC-SR04模块,这个模块的探测精度要差一些,给的指标是3mm。但我通过测试发现,就在桌面和其他普通界面不存在US-015的那种问题,而且测量周期在小于4ms的情况下都能稳定工作。

这就是今天发的照片跟以前的差别所在:1、小车运行的地面不同;2、超声波测距模块已经更换了。


9、后记

在完成上述工作之后,又进行了一些不成系统的零散实验性的工作。第一项工作是在上述平台上增加了一个具有AB相编码输出的测速单元,将小车的速度控制作为最终目标,以调整平衡设定距离来控制小车的速度为手段,这样就可实现超声自平衡小车在变化的坡度上保持动态稳定平衡。

小车平衡算法一般有两种:一种是平衡(角度或距离)PID + 速度PID;另一种是,速度PIDà平衡PID。这第二种就是用速度PID的输出去改变平衡PID的目标值。要实现超声自平衡小车在变化的坡度上保持动态稳定平衡,就必须采用这第二种控制算法。

另外,网络上有些人利用控制电机的PWM输出值,代替测速单元,近似的给出小车的速度。对于此问题我也简单的测试和分析过,现简要谈谈我对这一问题的看法:这种方式在一定的条件下是可以近似替代的,前提是在水平的地面上,地面不能有影响小车运动的各种障碍物,第三个是小车的响应不能太滞后。如果这三条不能满足,此方案不可取。

这项工作的验证比较简单,就是在有测速单元的小车上,同时增加PWM输出模拟测速,将两个测速的结果输出,对输出的数据画出曲线,就可直观的看出两者的差距。

另一项工作是,在原有的平台上增加了一个升压模块,将L298N的Vin由以前的7.4V提高到12V,小车的稳定性有一定的改观,关于这一点一是通过观察就可感觉到平衡的稳定性有所提高,另外通过数据分析也可明显的得出结论。在两种电压(注意,此时的Kp、Kd、PB等参数都要做相应的调整,使得每种电压下都是最佳状态)下,将PID的输出值(这个值是在输出限制在255以内之前的值),观察超过255的频数就可得出结论,如果超过255,在输出之前被限制了,就说明这次调整是不到位的。

第三项工作是增加了一个四通道遥控开关,实现了小车的前进、后退、左转、右转功能,这项工作中就利用PWM的输出近似得出小车的速度。这个遥控开关也很便宜,虽然只有A、B、C、D四个按键,但可以轻易的做到八个有效状态的控制。这八个状态分别为:A、B、C、D、AB、CD、AC、BD。





遥控超声自平衡小车视频






坡度动态改变时的超声自平衡小车视频(拆了门板做的测试)




平面与坡度上的超声自平衡小车




二代超声自平衡小车视频



第二代超声自平衡小车:材料成本不超过90元人民币;程序源代码不超过90行;PID参数整定非常容易。

材料清单:


原理图:


需要超声自平衡小车程序源代码的请加入QQ群:385432944

PID参数整定:
1、先根据你超声波测距在平衡点处附近的实际返回值(通过串口发送“L”命令读取实测值),将源代码中的Len_0修改为“实际返回值” 减去50,编译并下载程序;
2、将KD电位器设置为0,将KP设置到小车能明显抵抗倾倒运动即可;
3、调整PB电位器,使得小车基本既不往前也不往后跑即可;
4、继续增大KP,使得小车在原地有点前后摆动;
5、增大KD,使得小车摆动消失达到你满意的平稳程度即可。


新到60线测速码盘和AB线编码光电传感器,上图:

安装示意图:


测试实物连接照片(注意电机电源两端要接个104电容,否则窄脉冲干扰):


实测波形图:


放假有东西玩了!!!


今天上午在第二代超声自平衡小车上加装了金属码盘(60线),带AB相输出的测速装置,遇到点小坎坷,其中的B相输出接触不良,无奈又换成WTK-20(这个质量的确要好些),但固定方式要改造,下午干了半天钳工活,装上后,吃完晚饭开始调程序,解决所谓的超声自平衡小车不能在坡上平衡的问题。

刚刚调试完毕,非常兴奋,把卧室的门板拆下来一边垫高,建立了一个斜坡小环境,拍了两段视频:
一个是先在水平的地面上平衡,然后放到斜坡上平衡(是同一组参数);
另一个是在斜坡上平衡,但坡度在平衡过程中是变化的。

正在上传视频,等上传完毕后再供大家欣赏。

照片其实差不多,视频还没确认,就发两张吧(晚上照的,不太清楚)

正面(跟二代差不多,仔细看就是多了4根线)


反面的测速装置


原本在假期中解决这个问题,没想到解决得还很顺利(就是装测速装置,由于质量问题,采购花时间,安装时又反复了两次)第三代超声自平衡小车原理图:


平面与坡度上的超声自平衡小车视频




其实超声测距平衡车的坡度(变化)上平衡问题,换个思路就不是问题了,平衡车首要关注的是小车平衡,关注的是角度,控制的是小车速度的变化(加速度);对于超声波测距平衡车,其思路恰恰相反,关注的是速度,控制的是平衡角的变化,这样问题就迎刃而解了!

昨天晚上升压模块到了,将用TT马达做的超声自平衡小车的电机电压由以前的7.4V升到12V,重新调整了一下各参数,12V的比7.4V的稳定性有所提高。


最近没事,买了一个底盘,测了一下电机的响应特性,顺便将TT马达(明显看出性能很差)也测了一下,结果如下:

曲线模式


数据模式

每个电机测了三次,第一条曲线表示加电压,不要看具体指,其实PWM都是给到了255。


这是在带AB相输出测速,好电机底盘上的超声自平衡小车


下面是MPU6050的,用了两组电池、光耦隔离电机驱动


视频效果






评分

参与人数 2黑币 +36 收起 理由
chutii + 30 赞一个!
YJGG + 6 赞一个!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏6 分享淘帖 顶2 踩
回复

使用道具 举报

沙发
ID:129469 发表于 2016-7-6 21:35 | 只看该作者
要是用串口MPU6050就好了,不知道怎么用!
回复

使用道具 举报

板凳
ID:79544 发表于 2016-7-8 17:06 | 只看该作者
楼主强大佩服,用超声波传感器也可以做平衡车啊牛!
回复

使用道具 举报

地板
ID:135550 发表于 2016-7-30 21:33 | 只看该作者
太厉害了
回复

使用道具 举报

5#
ID:141658 发表于 2016-10-8 11:34 | 只看该作者
确实很牛,刚入行菜鸟看着很羡慕
回复

使用道具 举报

6#
ID:144498 发表于 2016-10-26 09:47 | 只看该作者
附上代码就更好了
回复

使用道具 举报

7#
ID:186217 发表于 2017-4-5 10:48 | 只看该作者
想问一下有高级版的原理图吗
回复

使用道具 举报

8#
ID:309193 发表于 2018-4-16 16:58 | 只看该作者
这个主板换成mbed还能运行吗
回复

使用道具 举报

9#
ID:309193 发表于 2018-4-16 17:01 | 只看该作者
这个主板换成mbed还可以运行吗
回复

使用道具 举报

10#
ID:349932 发表于 2018-6-17 11:01 | 只看该作者
请问只是想搞的速度环  20孔光栅够嘛
回复

使用道具 举报

11#
ID:346178 发表于 2018-6-29 19:10 | 只看该作者
可以循迹吗?有循迹小车的 平衡小车吗?
回复

使用道具 举报

12#
ID:361651 发表于 2018-6-30 13:22 | 只看该作者
很不错啊
回复

使用道具 举报

13#
ID:156629 发表于 2019-5-29 10:59 来自手机 | 只看该作者
请问,测量电机特性的波形,用的是什么软件。测量超声波周期用的是什么软件
回复

使用道具 举报

14#
ID:552656 发表于 2020-7-24 20:00 | 只看该作者
我看到了把卧室的门板拆下来
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表