玩命加载中 . . .

Arduino智能小车(一):编码马达


近期准备做一个三轮全向平台,用来搞各种事情。于是先用Solidworks建了一个模型,运动算例搞了一番,还是不知所以然,干脆直接开始动手,变搞边学习。然而查阅网上各种资料高深莫测,看得我云里雾里,初学很是艰辛。所以就写几篇博客记录一下自己的学习过程。作为菜鸡,还请各位大佬多指正。😄

1 马达的选用

如果是要做小车的,选用什么样的马达是很重要的,需要考虑的一个方面。之前用Arduino做小车一般直接用减速直流电机,就是那种小黄马达。说实在的效果不是很好,所谓便宜没好货,拿去比赛各种问题接踵而至,但若不考虑其控制的精确性,只是用来实现移动,还算可以接受。

其实这算是一个开环控制系统,信号单向流通,由驱动板传向马达,马达没有反馈,因此其控制精度不会很高。就算它转速的控制很精准,但如果电池供电忽大忽小,或是地面阻力时强时弱,这些外界输入依旧会给小车的运动带来极大的不确定性。这种方案在要求稍微高一点的情况下,就是应当舍弃的。

为了解决开环控制的问题,人们自然而然地就想到了在马达上加一个传感器,让它可以返回它的各种运动参数。而我们一般用编码器来做这样的传感器。
> 编码器把角位移或直线位移转换成电信号

这是百度对编码器的解释,简单来说,编码器可以把马达的转速转变为电压值传回,达到了闭环控制的目的。而装了编码器的电机,也就升级成为了编码电机。

一般还有另一种选择,就是步进电机,步进电机也是开环控制电机,但它和我们平常见到的减速电机不同之处在于,它通过电磁学原理,能够精准地转过一个角度,实际上,它内部也有控制电路,会把当前的转角与目标转角进行比较,最终实现精确的控制,从原理上看,更像是舵机。

2 编码马达原理介绍

讲了以上三种电机,到底该用哪一种呢?综合控制精度和实现难度来考虑,不论是独轮车,还是二轮车,还是三轮车,或是四轮车,一般我们都会选用编码马达。要会用编码马达,一定要学习一下编码器原理。下面就来做详细介绍:

2.1 角位移测量

如图所示
<img src="https://i.loli.net/2020/03/13/RCZnV6PYqa5LBTM.jpg" style="zoom:40%"/>
</div>
这张图展示了码盘的结构

把码盘上面那个器件想象成一个光电传感器,能够侦测到每一道狭缝经过,这样返回的波形就是一个周期性方波,如下图。这样的话,数一数共有多少周期,就能计算出转动过的角度。而电机轴转过一圈有多少周期就称为编码器的分辨率。显然,分辨率越高,编码器测出的转角就越精准。当然不能一味地通过刻槽来提高分辨率,为了达到目的,一般将码盘安装在减速电机未经减速的一端,甚至理论上可以通过齿轮组使其转速更快。这样一来,轮子转过一圈,码盘就转了好几圈。比如一个减速比30的减速电机,其分辨率就增加到30倍。
另外还有一种办法,能够注意到下面图中有两个方波,也就是相当于有两个光电传感器,或者是有两圈槽,测出的波形分别称为A B相,其相位差90度。若A相上行下行各计一次,B相同样,这样分辨率就又提高到四倍,效果立竿见影。

2.2 速度测量

速度测量原理其实就很明了了,只要在测角位移的同时记录时间,位移除以时间即为速度。这里的难点在于用Arduino实现涉及到中断函数和计时函数,这会在下一篇详细进行介绍。

2.3 转动方向测量

对于双相编码器,其目的主要并不是为了提高分辨率,而是为了测出电机转动方向。
AB相
原理是这样的:比如图中所示的情况,我们关注A相,当A相上行时可以看到B相是高电平,我们定义这时电机为正转,反转时,它们的相位差是原来的相反数,也就是负九十度。这是,A相上行时B相为低电平,这样即可简单地判断出电机转动方向。

3 总结

关于马达就这么多了吧,编码马达一直在用,但直到最近才搞得比较清楚,本人也不是机械专业的,肯定有很多认识是存在偏颇的。若有不足,欢迎指正。
下一篇会有Arduino控制编码马达的代码实现。


文章作者: Mond
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明来源 Mond !
  目录