地心一号-超迷你自平衡小车(四)

本贴由MCU起航原创,首发于博客-MCU起航,版权归本人所有,如有转载,请注明出处链接!

接着上一篇,咱们继续!

原因很简单,第一年我卡在了路程环上,第二年我去忙别的事情了~

直接说路程环吧!

平衡小车的站立,至少需要两个环!一个是角度环,维持小车平衡。但是维持平衡还不够,你会看到它平衡的到处乱跑,不服从指挥。

所以需要第二个环:路程环(也有人叫位置环)。它能让小车原地不动,或者按照我们的要求移动。原理也很简单,它会监测小车轮胎的转速和转向,从而对小车的移动进行纠正。

为什么说至少需要两个环?

有的人还会做转向环,假设,如果有外力导致小车旋转了90°,那么也要把这个旋转纠正过来。

为什么说我在这里卡了一年?网上不是有很多方案吗?你手里不是也有样品吗?

确实,如果要做一个跟我手里一样的,一点都不难。但我不想做那样的,我用的是N20的电机,这种电机带码盘的很少,而且价格高的不正常!

有多高?

电机不加编码器,价格十多块。加了编码器之后,价格变成了37块钱!

自己定做一批高精度码盘?

一个是成本会有较大的提升,另外就是违背了我的初衷。我的其中一个初衷就是:尽量使用低成本、市面上现成的元件来制作这个小车。

一个电机十多块钱,但如果加上码盘,要卖到37!两个就70多!两个一元硬币大小的电机,卖70多,很难接受!

这个问题从2017年初就开始困扰我,怎么搞?再这么拖下去,外甥都要上大学了!!!

同期,卡着我的还有另一个问题,路程环的问题。假设,我真的没得选,用了37块钱一个的电机,能不能实现路程环?

这个我试了一下,虽然有些坎坷,但还是能用的。难道真的要用这个?

先给外甥做一个玩具出来吧,一方面做验证,另一方面,再拖下去,我这个舅舅的尊严就彻底没了。

做的过程很顺利,采用了8.4V的锂电池,转速一分钟300转的电机,外接了一个蓝牙串口模块,可以接手机,通过蓝牙串口助手发送指令,实现手机遥控的效果。在家附近找了个公园,测了一下无线传输的距离,撑死二三十米。但是忽悠小朋友足够了!

同时,继续查资料!

所以,这一阶段的主要问题是:如何在不使用测速码盘的情况下,或者是一些别的方式,实现小车原地站立。

查了很久,还真查到一个思路,还是最开始那个帖子。

那位前辈,也考虑了跟我一样的问题:不使用路程环,能否实现位置的维持!

他在处理这个问题的时候,思维上升到了能量的层面。小车在向前移动或者向后移动的时候,肯定会消耗能量。如果把前后消耗的能量抵消,那么小车就能原地不动了。

怎么计算这个能量?

说来也简单!把小车每个周期下,驱动电机的PWM的占空比,以及电机旋转方向记录下来,做累加。向前为正,向后为负,尽量保持累加和为零。进而实现小车的位置原地不动。

有没有效果?

据这位前辈说,有一定的效果,但是会随着时间不断偏移,偏移比较明显。

呵呵,这位前辈很调皮啊!这么搞,自己玩玩可以,不能做为方案对外分享啊。

怎么办?

那段时间差不多每天都在想这个问题,有时候睡觉也会想~

头疼了很长一段时间,终于出现了转机。

第一个问题的转机,我印象里出现在2017年下半年。

这里不得不提到一个人:孟瑞生,他曾经在电子发烧友论坛众筹STM32的开发板。我之所以注意到他,是因为他毕业于中北大学。

是的,跟我一个学校,也就是我师兄。

后来他去了嘉立创,创建了技新网。技新网主要做各种模块,方便工程师做验证。他们曾经推出过一款产品(非平衡车),上面同样使用了N20电机,同样对该电机进行了测速,但测速方式却和传统的平衡小车完全不一样。

传统的电机在测速的时候,他们是在电机的旋转轴上加了一个码盘,这样电机在旋转的时候可以测出它的转速,还有旋转方向,这个码盘可以是光栅码盘也可以是霍尔码盘。

放个图:

这里借用平衡小车之家的图给大家说下。

左边的电机在电机旋转轴上增加了一个霍尔码盘,电机转一圈,码盘输出13个信号(数量多少根据码盘结构)。而右边的电机,在旋转轴上增加了一个光电码盘,码盘旋转一圈可以输出500个脉冲。

无论是13还是500,都是减速前的脉冲个数,如果电机减速比是30的话,前面的数字还要乘以30.13X30或者500X30,就是小车轮胎旋转一圈输出的脉冲个数。

技新网是怎么做的?

他们使用了一个红外反射式传感器,做了个模块,利用轮胎自身的结构,组成了一个另类的测速装置,如图:

核心是里面用到的芯片:ITR8307。这是一个红外反射式传感器,芯片表面由两部分区域组成。一部分用来发射红外光,另一部分用来接收红外光。如果能接收到,说明芯片表面有类似镜面的物体存在,那么,这有什么用?

看轮胎!

早期的卖家在宝贝详情里会说一句话:轮胎自带编码器(现在好像看不到了)。

原谅我才疏学浅,孤陋寡闻!很长时间,一直没明白自带的编码器在哪,怎么用!直到技新网做了上面那个模块,我才明白过来。

轮胎内部自带白色牙齿(原谅我用“牙齿”这个词),共有12个。他们把红外反射模块固定在牙齿下面,当轮胎旋转时,牙齿会依次、间断的从传感器上面经过,出现的效果就是高、低、高、低电平的不断输出。单位时间内计算脉冲信号个数,速度有了~~~

注意这里的脉冲个数,上升沿12个、下降沿12个!轮胎转一圈只有24个!

然后是方向。很遗憾,这种编码器没法计算方向。但是无所谓,我只需要在检测到高低电平的时候判断一下电机的驱动方向就行了,毕竟当前脉冲个数不多,精度一般。

而这种解决方案的成本,相比37块钱一个电机的价格,简直便宜的不像话。

电机测速问题解决了,但是路程环怎么搞?

前面说了,常用的测速码盘,轮胎旋转一圈,输出的脉冲个数,要么300+,要么上千。而这里的码盘,旋转一圈,输出24个脉冲!!!

这个数量级的差别,导致我在调试路程环的时候几乎无从下手!现有的程序移植过去,上电,几乎看不到路程环起作用。如果把路程环里的PID参数调大,最直观的现象就是小车变得剧烈的抖动,然后倒下。

怎么办?

那段时间差不多每天都在想这个问题,有时候睡觉也会想~

头疼了很长一段时间,第二个问题终于出现了转机,结果就是算法方面要换一种思路。前面说了,角度环已经没有问题,有问题的是当前状态下的路程环。解决这个问题只有两个方向:1、优化;2换思路。

我选择了第二个,怎么换的思路?

这里不得不提到我的岳父大人,他除了是我岳父,还有一个身份,就是一位老中医,老武术家。有一些人跟他学武术,周末的时候经常聚在一起练习。

我跟着去过几次,有一段对话让我印象很深。当时是一个人想他提问,关于搏击的问题。我岳父具体怎么回答的我已经记不清了,大致意思就是:

“两个人搏击,目的就是把对方放到。而放倒对方最核心的方式,就是破坏对方的重心!”

是的,破坏对方的重心。我当时对这段话印象深,是因为我岳父的学历,说实话不是很高(这里没有任何意思,只是陈述一个事实),但是却能用一种很科学的方式来描述这个问题。让我很是惊讶!

而后期我头疼的那段时间,这句话时不时出现在我脑子里。所以我在想,会不会有什么启发的作用?注意,下面是我的思考过程(你们也可以自己先想一下):

小车的站立也要保持重心平衡,如果不平衡,那么就会往一个方向偏。在这个过程中,我要阻止外力对小车重心的破坏。

小车的平衡靠角度环可以实现,但是会偏。怎么不让它偏?

由于小车的车身质量分布并不均匀,导致小车水平的时候可能并不是它的平衡角,那就需要找到这个平衡角。小车维持平衡的角度,刚好是小车重心垂直过电机轴的角度。所以小车初始调试的时候,需要先找平衡角。

假设已经找到了平衡角,在平衡角状态下,外力导致小车向前走了7步,我可以通过码盘测速测出来。那么,怎么纠正?

重心!

是的,我可以让小车的重心平衡角向反方向增加0.7°。这样角度环为了维持平衡,会自动往反方向纠正。往回走一步,重心平衡角上面添加的误差少一点,回到原地,角误差清零。

当我想出这个方法的时候,脑子是极度兴奋的!因为我相当于抛弃了传统的路程环,重新设计了一种控制思路。同样是夜里十一点多,我把这种思路转化为代码,编译、烧录、上电。

现象跟我想的一样,小车以一个位置为原点,做往复运动!

在这种情况下,只需要把偏差和重心结合起来,使用PID的方式计算出一个纠正用的误差角,叠加到小车的平衡角上就行了。而传统的路程环就彻底被我抛弃了,这种新的PID环,如果之前没有人用过的话,我想把它叫做重心环

本系列已完结,相关章节请点击:

地心一号-超迷你自平衡小车(一)

地心一号-超迷你自平衡小车(二)

地心一号-超迷你自平衡小车(三)

地心一号-超迷你自平衡小车(四)

地心一号-超迷你自平衡小车(五)-完结篇

如果要购买地心一号平衡小车,可在淘宝搜索:地心一号,或者在公众号:AI电堂(可开发票) 中获取购买方式。

《地心一号-超迷你自平衡小车(四)》有2条留言

留下评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据