如何获得电机旋转角度?当然是磁编码器啦!

最近看到了一个开源项目(原作者开源 链接: GitHub - EPFLXplore/XRE_LeggedRobot_HW: PCB designs for Xplore Research's robot dog project ),是一个机器人的运动关节的电机控制工程,其中有一个磁编码器的角度反馈的设计,所以钳工就顺道学习和梳理了一下,分享给各位朋友。下面是PCB的Layout:

我们都知道,单纯的控制FOC或者有刷电机旋转是没有办法做精细控制的(除了步进电机这种精细控制之外),因为如果不加传感器去检测的话是没有办法知道其旋转角度的,那么如何才能获取当前的FOC或者有刷电机的旋转角度呢?那么当然就是通过外置编码器去获取旋转角度,这样就可以实现闭环控制。本期要介绍的也就是编码器的一种—磁编码器通过芯片感知磁场变化,从而判断电机的旋转角度。

我也在网上找了一下这种电机的图片,大家也可以看到,在这个电机的中间有一颗磁铁,这个磁铁也正是和磁编码器配套使用的。电机的旋转会带动这个磁铁的旋转。

而在这个磁铁的正下方就有一个磁编码器,磁编码器可以通过磁铁旋转产生的磁场变化而感知旋转角度。

然后我们就看一下我找的这个开源的工程使用的磁编码器的原理图,原理图如下,采用的是MPS的14bit的磁编码器,型号为MA732

那么如何看懂上图的原理图呢?首先我们还是要先看手册:backhand_index_pointing_down:

https://www.monolithicpower.cn/cn/products/sensors/ma732.html

数据手册这个地方可以下载:backhand_index_pointing_up:

从手册我们可以看出,这个磁编码器是分辨率为9~14bit的磁编码器,也就是其最小理论角度分辨率为360/2^14 ≈ 0.022°,这样看分辨率是极其高的,而这种高分辨率也是机器人关节这种高精度应用场合必不可少的需求。

从原理框图可以看出,这个MA732芯片有三种输出接口,分别是SPI和SSI和ABZ的增量式脉冲输出接口。

这三个输出接口大概如下介绍:

  • ABZ 输出:A/B 正交脉冲(相位差 90°,用于测转速 / 转向),Z 为每转 1 个索引脉冲。

  • SPI和SSI 接口:用于读取绝对角度、配置 ABZ 参数(PPT/HYS/Z 脉冲)、磁场诊断等。

  • PWM 输出:14 位角度 PWM,占空比对应绝对角度,可作备用角度输出

SPI接口和SSI接口都是标准的数字通讯接口,这个只需要和单片机那边对应协议即可通讯获取角度,圈数等参数。

那么我们看一下ABZ这三个增量脉冲输出接口。A和B作为角度输出,他们两个是正交输出,也就是可以通过A和B的超前或者滞后关系判断电机当前是出于正转或者反转,Z的话是一圈输出一个脉冲:

那么我们就看原理图,可以看到,这个开源的原理图并没有使用ABZ的脉冲增量接口,而是只使用了一个SPI接口,ABZ和PWM输出都没有使用哦:

然后是我觉得比较好的地方,就是这个芯片可以通过寄存器配置检测磁场强度的阈值,配置MGHT和MGLT来配置磁铁的磁场检测强度阈值。因为实际这种磁编码器的安装肯定都是需要安装磁铁与编码器配合。那么如果安装不合理的话,比如距离远或近,或者磁铁异常带来的这个磁场异常就可以被检测到。

然后这个磁场检测结果也会通过MA732的IO,MGH和MGL输出给MCU或者外部指示灯,低电平正常,高电平告警:

那么这俩管脚MGH和MGL在这个开源的原理图中做了个指示灯用来指示磁场强度高于,低于或正常。可以看到,MGH接了个NMOS然后控制黄灯,如果磁场强度高于阈值,那么MGH输出高电平,NMOS导通,黄灯点亮。同理磁场强度低于阈值则亮红灯。然后如果磁场强度出于正常区间,那么MGH和MGL都输出低电平,然后经过一个或非门,然后控制NMOS亮绿灯。这个设计也很巧妙,设计的很好。

好的,那么本期的分享就到此结束啦~又是收货满满的一天!

对了,还有一个关于MA732兄弟产品MA900的开源项目(来自:爱上半导体),感兴趣的也可以自己打板玩玩。开源链接