浅谈两轮平衡车的控制原理

前言:在IT行业摸爬滚打了好几年,好不容易从学生熬成了社会人士,通过自己的不断努力又从社会人士熬成了学生。这几年的修行,同道博友给了我很多的帮助,很早之前就有写博客的想法,想借自己绵薄之力来回馈一下默默奋斗的你,但是一直拖着,最近闲暇无事,才真正提笔,愿能够对你有用。

上周末去苏州玩儿,同行小伙伴的侄女骑着一辆小米平衡车,运用自如好拉风的感觉。此时我的职业病又犯了,思考了一下原理,觉得不是很难,就是一个陀螺仪姿态加几个PID的事情(专业毒已病入膏肓)。平衡车的制作冲动从这一刻迸发,回家之后事不宜迟直接着手去做,这都要归功于闲暇的暑期。

通过网上查资料发现,两轮平衡车的资料并不多,大多都是飞思卡尔比赛的直立小车资料,但是两者有一定的联系,由于飞思卡尔资助的原因,限制了器件的选型等,而我们业余的选择是广泛的。我选择了当前主流的STM32F103为主控,成熟的MPU6050陀螺仪加速度计,车架让一位同事帮忙组装,很快平衡车成型,心情有点激动,忍不住要上一张图。

浅谈两轮平衡车的控制原理_第1张图片

细心的同事帮我加了配重,非常感谢我的热心朋友。(PS:珍惜身边的朋友,他们都是缔造你生命意义的人!)哈哈,这个小车看上去还是有模有样。加配重的原因是让车架的平很轴接近电机轴,也就是车架在水平时,车前后的质量分布基本一致。说的有点抽象,换句话说就是找车架的平衡位置或者平衡角度。

好了,废话说了一大堆,接下来进入正题。

首先从控制板说起,借用以前公司的一个控制板,主要用到的模块有降压模块,PWM与编码器接口,IIC接口,SPI接口TFT屏幕。由于主控板没有集成MPU6050,用了一个外部的小模块,使用IIC接口。电池使用14.8V锂电池,电机驱动是TI的LMD18200,与L298比较相似,但性能更彪悍一些。电机是带正交编码器的减速电机。基本硬件就是这些了,其实这种配置已经算得上豪华配置了,但是都是借用的没有花钱(硬件烧钱,入坑谨慎)。

其实吾理小子(本人)是做硬件的,在这里的硬件都是比较基本的,而且市面上很容易买到,就不多啰嗦了。

下面开始说控制思路,我觉得开始做之前一定要考虑清楚控制思路,否则就是盲目上路,事倍功半。平衡车实际会涉及到三个PID环,分别是直立环(角度环)、速度环、转向环。其实一般都叫直立环,但是我更愿意把这个理解为角度环,因为这样理解的话更容易和反馈量结合起来。

逐个介绍每个环的作用:

直立环,也就是角度环,通过陀螺仪得到车架的姿态角度,通过当前角度与目标角度比对的差值进行一定的计算控制轮子,以保证车架维持在目标角度附近。总结一句话来说就是直立环保证车架站起来并且稳住;

速度环,速度环是直立环的辅助调节,直立环能够保证车架直立,但是不能保证车直立的速度为零,速度环就可以保证车架保持直立的同时控制此时的速度;

转向环,控制车架的方向。与直立环用到的反馈量不一样。

综合起来的效果就是保证车架直立的同时车的行走速度与方向可控。这就是三个环的综合效果,其中直立环是核心,其它两个是辅助。

其实平衡车的PID调试过程中,还是和传统的位置式与增量式PID有一定的区别,而且区别是致命的,不容小觑!那么具体区别在哪里呢,继续看下文。

在讲解具体的编程之前,首先说一下我们的老大哥——陀螺仪MPU6050。为什么说他是老大哥,因为整个姿态的调节反馈量都来自于他。我不想夸它是第一款集成的6轴陀螺仪与加速度计,也不想夸集成了DMP库,更不想夸它价格便宜简单易用……我想说说陀螺仪与加速度计的测量的物理量。说到这里,可能有人会嘲笑小编好傻,陀螺仪不就是测姿态角的吗还用说!但是,小编刚开始用陀螺仪的时候也是这么认为的,而且把别人的代码拿过来移植到自己的工程中能正常跑,就很骄傲,实际上没有那么简单,你不相信的话,有一天你也会回头来重新认识一次老大哥,相信吾理小子

MPU6050集成了陀螺仪与加速度计,陀螺仪测量的是世界坐标系中各轴的角速度,加速度计测量是世界坐标系中各轴的加速度,这个加速度是加速度的总和包括重力加速度。那么角度是怎么测量的呢?角度是通过对角速度的积分得到的。

明白了这些的话,接下来对陀螺仪的使用会更加如鱼得水。

吾理小子移植正点原子的MPU6050程序,使用DMP库得到姿态角,数据还是比较好的。通过初始化PWM波,车子完全在吾理小子的控制之下了。至此,前期的准备工作已经全部就绪,接下来就是疯狂码代码、看现象、改数据、看现象如此反复,直到达到自己想要的结果。

吾理小子的第一篇博客也要画上一个句号了,天上一脚、地上一脚毫无逻辑的写了一上午,还请各位道友不喜勿喷,下一篇接着说具体编程,并且附上相关代码,各位小伙伴期待吧!

 

 

你可能感兴趣的:(控制相关)