很多初学者不知道是先学8位单片机好,还是32位单片机,让我用案例告诉你
本人新近结交了一位单片机爱好者,他想做一位好舅舅,于是踏进了为外甥制作超迷你自均衡小车玩具的坑,为的是证明身为电子工程师的TA有多厉害。一路走来,这是个技能成熟的过程,是舅舅励志进修的故事,我们也能够体会到他从想法到实物的设计思维及攻克问题的策略方法。
让我们先来了解一下制作“地心五号”自均衡小车的故事。
01 MCU起航的造小车故事
话说2016年,我的小外甥就要上小学了,有男孩子动手实践天性,我就想给他做个电子玩具,激发他的进修热情。流水灯太low,四轴飞行器有螺旋桨危险,因此智能小车就成为首选。四个轱辘的比鄙偃皆是,两轮自均衡小车才有的成就感。于是,踏上了3年的慢慢制作路。我这三年不断踩坑,不断爬出来,过程中补齐了自己的根底知识,还提升了自己的硬件设计和软件工程的才能。
故事是这样......
时长拉回到2016年,网上能够找到两类方案:一是STM32+MPU6050,另一种是用Arduino做的。制作的先期过程是进修,我在自己动手前,买了个样机来钻研。从此入了坑,不仅资料少,让我惊掉下巴的是,程序竟然是用STM32的2.0的库写的。没经历过STM32库函数版本变动的同学是不了解的,32的库从刚出来到此时相对稳定的3.5版本,变更了几次,每次都是会大变样。我只好自己将整套程序用3.5的库重写一遍,意外收获是我对程序流程非常熟悉,为后续的调试打下根底。
再后来,我发现卖家的原理图和实际硬件不配套,电路没有留JTAG或者SW接口,只有一个串口下载的接口。注定我要自力更生为外甥造小车。
02当我造小车时,我都在想什么?
很多单片机初学者都会有这样的灵魂拷问:学8位单片机好,还是学STM32好?其实不冲突。玩转STM8是更好使用 STM32的铺垫。
我的均衡小车主控芯片为什么选STM8,小车的设计要到达哪些要求?
STM32此时市面上非常时兴,成为很多用人单位招聘技术人员的标配技能。但我想用STM8来实现我的均衡小车,一是由于8位单片机的性能能够到达;二是最俗的因素,8位单片机便宜!三,我认为会用STM32不代表牛逼,会用8位单片机不代表不牛逼,能把STM32的项目用8位单片机做出来,这才算厉害!
那么为什么不用简略易学的Arduino?
Arduino是意大利的一名教师和一名晶体工程师创造的一个灵敏性非常高的电子平台,非常易学好用。它常出此时很多中小学中的机器人课程中,假如稳定性不行,入门再简略,功能再强大,都是扯淡!Arduino的稳定性却备受争议。由于它最初因教学目标被设计出来,主要用途在DIY工具,中小学生兴趣课,还有一些玩具。国内很少有用它来做商业产品,鉴于Arduino和实际市场的主流单片机差别很大,为了有个好前途,不必在Arduino上花费太多时长。
小车的设计要到达哪些要求?以下几点是我的考量:
1、要有进修的意义,就是说这个板子不光能跑均衡小车,还要作为一个进修的开发板,这是最根本的。
2、选型方面要合理,就像我最初始说的,能用8位的单片机把32位的单片机的项目做出来,这才叫厉害,要尽量选择适宜的资源。每一个元器件的选型都要有理由,有做产品的意识,同时要实现它的效果。
3、制作过程要尽量低老本。身为DIY爱好者,很多人会有这样的感觉,制作过程中通常是非常兴奋的,演示时候也多巴胺爆棚,但是演示完了三天之后,很可能这个DIY作品就初始吃灰了。为了防止这的情况出现,或者说即便吃灰,由于它的价格也不高,不会心疼。所以我们尽量使用低老本东西来实现。
4、组装过程要尽量简略。尽量避免太过复杂的组装过程,降低动手门槛,对很多人才有进修的意义和提高的动力。
03均衡小车的原理探索及制作过程中的坑
先说选型。单片机选用的是STM8S103f3P6,20管脚,Flash空间独有8K ROM,1K的RAM。相比传统的51,它是8位单片机的性价比之王,功能强大,某宝有小巧的最小系统板可供选择。
角度传感器采用MP6050,参照资料多,价格适宜。
电机驱动的局部,这里有两个选择,一个是L9110s,另外一个是TB6612。L9110S在测试过程中发现两个问题:一个是发热鄙偃较严重(据说后来新的芯片攻克了发热的问题),加了散热片也不行;另一个是能量转换效率不高,同样用50%的占空比驱动电机,只用肉眼观察,TB6612比L9110S明显要快一点;三是组装不方便。最后选用TB6612。
选电池的时候,尤其要注意放电才能!
然后是电机,选中性能较好的N20电机。注意带码盘和不带码盘的电机价格差别有点大。
最后是轮胎,与N20电机配套,选中一款D字型的橡胶轮胎。
首先是搭建这个小车的构造,原型采用洞洞板,依照一定的尺寸评估整个车身的大小,然后用剪刀裁定的尺寸,然后使用铜柱进行多层的构造组装。近乎暴力的组装,造成外形自然不够美观。
能够看到左边是MPU6050,右边是STM8S的最小系统板。高低两层洞洞板,采用铜柱做固定。
怎么确定这个新组装出来的构造能够用?方法是替换之前购置的均衡小车样机模块,进行组装测试。
第一坑出现了,如何用STM8来替换STM32来控制这个构造?STM32使用的是DMP方式读取MPU6050的角度,控制小车,是能够站立的;但换做STM8,使用原始数据转化为角度再去控制的话,简直站不住。问题的核心在于,采用原始数据计算角度的方式,与DMP方式计算出的角度有一定的偏差。而这个偏差会导致当小车发生偏移时,电机没法快捷响应,也就是反应速度不够。这时候就须要PID控制算法。我的方案是车身构造较小,电机扭距不够强,须要特殊方式提高响应速度,最直接的方式就是使用PID这个算法里面的参数I,也就是积分。积分的特性就是它会累积误差,时长越久累积的误差越大,它纠正的力度也就越大,此处的时长概念指是单片机的时长。几个循环过去,假如发现误差还在继续增加,那么它会产生非常强大的修正的力,这个力会作用在电机上,最终使小车的车身恢复均衡。到此,第一坑顺利攻克,确定用STM8控制这个构造是可行的。
接下来,工作分两个方向同时进行,一个是电路板的绘制,使用Autumn Designer进行PCB板绘制;另外是程序的编写,STM8S的单片机的编程有很多参照例程,难度不大。程序的移植和编写时,因STM8S103F3P6这个芯片的flash非常小,没法使用DMP的方式读取比较高精度的数据。只能采用读取原始数据,然后解析的方式。
这时第二坑出现了,小车虽然站了起来,但是抖动和晃动明显,不平稳。怎么办?我对程序进行优化,如调节PID参数、调整程序循环周期、在PID算法的根底上做微调等等,最终采用卡尔曼滤波,调整了周期,小车从哆哆嗦嗦的状态,一下子变成了平稳的滑翔者!角度环已经没有问题了。
第三坑被卡在了位置环上。均衡小车的站立,至少须要两个环!一个是角度环,维持小车均衡。但是维持均衡还不够,你会看到它均衡的到处乱跑,不服从指挥。所以须要第二个环:位置环(也有人叫路程环)。它能让小车原地不动,或者依照我们的要求挪动。原理也很简略,它会监测小车轮胎的转速和转向,从而对小车的挪动进行纠正。有的还会做转向环,例如,有外力导致小车旋转了90?,须要把这个旋转纠正过来。
最终,通过使用一个红外反射式传感器ITR8307,做了个模块,利用轮胎自身的构造,组成了一个另类的测速装置,好似让轮胎自带编码器。如图:
轮胎内部自带白色牙齿,共有12个。他们把红外反射模块固定在牙齿下面,当轮胎旋转时,牙齿会依次、间断的从传感器上面经过,出现的效果就是高、低、高、低电平的不断输出。单位时长内计算脉冲信号个数,速度有了~~~
注意这里的脉冲个数,回升沿12个、下降沿12个!轮胎转一圈独有24个!
然后是方向。这种编码器没法计算方向,我只须要在检测到高低电平的时候判断一下电机的驱动方向就行了。
路程环怎么搞?换个思维思考。小车的站立也要保持重心均衡,假如不均衡,那么就会往一个方向偏。在这个过程中,我要阻止外力对小车重心的破坏。
小车的均衡靠角度环能够实现,但是会偏。怎么不让它偏?
由于小车的车身质量分布并不均匀,导致小车水平的时候可能并不是它的均衡角,那就须要找到这个均衡角。小车维持均衡的角度,刚好是小车重心垂直过电机轴的角度。所以小车初始调试的时候,须要先找均衡角。
假设已经找到了均衡角,在均衡角状态下,外力导致小车向前走了7步,我能够通过码盘测速测出来。那么,怎么纠正?
重心!
是的,我能够让小车的重心均衡角向反方向增加0.7?。这样角度环为了维持均衡,会自动往反方向纠正。往回走一步,重心均衡角上面添加的误差少一点,回到原地,角误差清零。
这个想法摈弃了传统的路程环,重新设计了一种控制策略,转化为代码,编译、烧录、上电,小车以一个位置为原点,做往复运动!这种情况下,只须要把偏差和重心联合起来,使用PID的方式计算出一个纠正用的误差角,叠加到小车的均衡角上就行了。这种新的PID环,我把它叫做重心环。
04地心一号迷你均衡小车的诞生
均衡小车的设计完成后,它的诞生还要三步走:
1、确定方案,画原理图、PCB,找工厂安排制板、焊接、组装;
2、编写教程;
3、给小车起个名字。
攻克小车技术的一个关键点是重心环的出现,而《地心引力》是我最喜爱的电影之一,就叫地心五号吧,来看看地心五号美颜!
硬件方案如下:
STM8S103F3P6+MPU6050+TB6612+蓝牙串口模块+红外遥控
蓝牙串口模块在这里有两个功能:一个是调整PID参数的时候,能够终端界面没线测试;另一个就是在键盘界面控制小车的行驶方向。
加入我们,一起学习平衡小车课程!
05课程大纲及订阅用户权益
“地心五号”迷你平衡小车教程内容分两大部分:STM8基础教程 +迷你平衡小车视频教程。想要的私我哦,说了这么多,大家记得留意下方评论第一条(或者私信我)有干货~