一、引入
电机,即电动机(motor)俗称马达,是电能转化为机械能的总称,按工作原理分类电机可以分为:直流电机(通过直流电源供电,依靠电刷和换向器改变电流方向,产生连续转动的转矩)和交流电机(通过交流电源供电,利用交流电的周期性变化来产生旋转磁场,从而驱动转子旋转)。本篇文章主要介绍直流电机。
二、工作原理
下面是分析直流电机的物理模型图。其中,固定部分有磁铁,这里称作主磁极;固定部分还有电刷。转动部分有环形铁心和绕在环形铁心上的绕组。(其中 2 个小圆圈是为了方便表示该位置上的导体电势或电流的方向而设置的)。
它的固定部分(定子)上,装设了一对直流励磁的静止的主磁极 N 和 S,在旋转部分(转子)上装设电枢铁心。在电枢铁心上放置了 两根导体连成的电枢线圈,线圈的首端和末端分别连到两个圆弧形的 铜片上,此铜片称为换向片。换向片之间互相绝缘,由换向片构成的整体称为换向器。换向器固定在转轴上,换向片与转轴之间亦互相绝缘。在换向片上放置着一对固定不动的电刷 B1 和 B2,当电枢旋转时,电枢线圈通过换向片和电刷与外电路接通。 在电刷上施加直流电压 U,电枢线圈中的电流流向为:N 极下的 有效边中的电流总是一个方向,而 S 极下的有效边中的电流总是另一 个方向。这样两个有效边所受的洛伦兹力的方向一致(可以根据左手 法则判定),电枢开始转动。
具体来说就是,把上图中的+和-分别接到电池的正极和负极,电 机即可转动;如果是把上图中的+和-分别接到电池的负极和正极,则 电机会反方向转动。电机的转速可以理解为和外接的电压是正相关的 (实际是由电枢电流决定)。
总而言之,如果我们可以调节施加在电机上面的直流电压大小, 即可实现直流电机调速,改变施加电机上面直流电压的极性,即可实现电机换向。
三、减速器
一般直流电机的转速都是一分钟几千上万转的,所以一般需要安 装减速器。
减速器是一种相对精密的机械零件,使用它的目的是降低 转速,增加转矩。减速后的直流电机力矩增大、可控性更强。按照传 动级数不同可分为单级和多级减速器;按照传动类型可分为齿轮减速 器、蜗杆减速器和行星齿轮减速器。
齿轮减速箱体积较小,传递扭矩大,但是有一定的回程间隙。 蜗轮蜗杆减速机的主要特点是具有反向自锁功能,可以有较大的 减速比,但是一般体积较大,传动效率不高,精度不高。 行星减速机其优点是结构比较紧凑,回程间隙小、精度较高,使用寿 命很长,额定输出扭矩可以做的很大,但价格略贵。 以下是一款搭配多级齿轮减速箱的电机。
四、接线图
以上面的电机为例,我们可以分析它的接线以及使用
上面介绍了一大堆说直流电机只引出两个线,怎么这个电机有 6 个线,而且还有两个大焊点呢?其实,根据上面的图解也知道,那两 个焊点分别和黄线和棕线是连接在一起的。也就是说只有 6 个线,而 6P 排线中,中间的四根线(红绿白黑)是编码器的线,只是用于测 速,和直流电机本身没有联系。我们在实现开环控制的时候无需使用。
综上所述,我们只需控制施加在黄线和棕色线两端的直流电压大 小和极性即可实现调试和换向。
五、编码器
1.简介
编码器是一种将角位移或者直线位移转换成一连串电数字脉冲的一种传感器。 我们可以通过编码器测量电机转动的位移或者速度信息。
编码器按照工作原理,可以分为增量式编码器和绝对式编码器,绝对式编码器 的每一个位置对应一个确定的数字码,因此它的示值只与测量的起始和终止位置有关,而与测量的中间过程无关。我们常用的编码器为增量式编码器。
从编码器检测原理上来分,还可以分为光学式、磁式、感应式、电容式。常见 的是光电编码器(光学式)和霍尔编码器(磁式)。一般来说光电编码器是霍尔编码器精度的几十倍。
2.工作原理
光电编码器是由光码盘和光电检测装置组成。光码盘是在一定直径的圆板上等 分地开通若干个长方形孔。由于光电码盘与电动机同轴,电动机旋转时,检测装置 检测输出若干脉冲信号,为判断转向,一般输出两组存在一定相位差的方波信号。
霍尔编码器是由霍尔码盘和霍尔元件组成。霍尔码盘是在一定直径的圆板上等 分地布置有不同的磁极。霍尔码盘与电动机同轴,电动机旋转时,霍尔元件检测输 出若干脉冲信号,为判断转向,一般输出两组存在一定相位差的方波信号。
然后我们就可以通过单片机采集 AB 相的脉冲数据,根据脉冲换算即可得到电 机位置数据。
3.四倍频
四倍频是通过程序提升我们的编码器的精度的一种数据处理方法,可以有效的 最大化我们的编码器的精度和测量精度。
上图是一个我们编码器输出的波形图,正常我们一般的处理方式是通过 A 相去 计数,B 相去判断目前的转动方向。具体实现比如:A 相的上升沿计数或者下降沿 计数,同时在 A 相的上升沿或者下降沿来根据 B 相此时的电平状态来判断转向。
四倍频则是同时计算 AB 两相的每个跳边沿,这样子原本在 A 相计数的一个脉 冲周期内就实现了四次计数,从而实现了精度的提升。
4.程序实现
因为编码器输出的是标准的正交方波,所以我们可以使用单片机(STM32 STM8 51 等)直接读取。在软件中的处理方法是分两种,自带编码器接口的单片机如 STM32, 可以直接使用编码器硬件接口(定时器 CH1&CH2)计数,然后从对应的寄存器读出 相应的数据即可。没有编码器硬件接口的单片机,可以通过外部中断接口测量,比 如把编码器 A 相输出接到单片机的外部中断接口,这样就可以通过跳边沿触发中断, 然后在对应的中断服务函数里面,通过 B 相的电平来确定正反转。如当 A 相来一个 跳变沿的时候,如果 B 相是高电平就认为是正转,低电平就认为是反转。
STM32 的程序实际就是初始化定时器为编码器模式即可,这里就不贴出对应的 程序了,可以直接看一下我们的例程即可,下面为 Arduino 的编码器程序,更符合 我们上述的逻辑,代码如下:
void READ_ENCODER_L()
{if (digitalRead(ENCODER_L) == LOW){ //下降沿if (digitalRead(DIRECTION_L) == LOW) Velocity_L--; //根据 B 判断方向 CCWelse Velocity_L++; //根据 B 判断方向 CW}else { //上升沿if (digitalRead(DIRECTION_L) == LOW) Velocity_L++;//根据 B 判断方向 CWelse Velocity_L--;//根据 B 判断方向 CCW}
}
上述代码仅在 A 相的跳边沿进行中断判断,因此仅具有二倍频的功能,我们在 通过外部中断引脚来采集编码器的数据的时候也应结合资源的使用情况来综合处理。