sy8501 发表于 2023-10-16 01:27:59

开源MA732/MA702/MA730磁编码器,长引线解决方案

通常,电机轴端如果放置一个SPI接口的磁编,
如果想要将SPI引线直接拉至控制板,则需要非常注意电机引线带来的数据干扰。
通常这个引线长度只能10cm,稍微再长一些,SPI数据读取结果会产生非常严重的毛刺。

MPS的MA730、MA702、MA732等,提供了一种简化版的SPI接口,称为SSI,是只读接口。
SSI接口,单端拉线接入控制板,也会存在同样的问题。

解决办法,就是将CLK+Data线,转为RS422全双工,包含输入输出。
并且最好给出一个LDO,使用5V的电源,这样磁编板得到的3.3V,更干净一些,并且不会因为长引线电阻产生压降,使磁编板实际得到的电压低于3.3V

这里LDO可以随意替换成自己熟悉的型号、
RS422全双工芯片选择SIT3490EEUA,MSOP8封装, 高度很矮,体积也小,速度也够。

实测即使跟电机引线绑在一块,2米的应用距离也丝毫没有毛刺数据产生。

磁编端:


sy8501 发表于 2023-10-16 01:32:41

控制板/驱动器端

也是一片SIT3490即可解决,为了性价比考虑,这里选择了价格更便宜的SOP8封装的SIT3490EESA



sy8501 发表于 2023-10-16 01:34:41

读取时序,
截图自MA732手册:



sy8501 发表于 2023-10-16 01:41:29

读取代码很简单

这边演示是读取16位的,实际也可以只读取12位或者14位

后面还要自行处理 : 转动方向调整、零点、磁编校准、判断磁编掉线与否


#define SSI_DATA()      (((GPIOB->IDR & GPIO_Pin_4)==0)? 0:1)

    int angle = 0;
   
    SSI_CLK_H();
    SSI_Delay();
    SSI_CLK_L();
    SSI_Delay();
   
    for(int i=0;i<16;i++)
    {
      angle <<= 1;
      SSI_CLK_H();
      SSI_Delay();
      SSI_CLK_L();
      SSI_Delay();
      angle |= SSI_DATA();
    }

qwe2231695 发表于 2023-10-16 02:04:56

好方案,收藏了

qwe2231695 发表于 2023-10-16 02:09:39

这个RS422芯片可以解决10Mhz以下的2线(TX *1 / RX * 1)接口的长距离(20米+)收发问题

akey3000 发表于 2023-10-16 08:09:46

lz大神,厉害

powerlabor001 发表于 2023-10-16 10:01:27

编码器长引线方案,mark一下。

moouse 发表于 2023-10-16 10:15:00

这个方案可以试试

honami520 发表于 2023-10-16 10:26:28

有点意思,长知识了今天

weiwei4 发表于 2023-10-16 14:24:13

不错,14M高速 RS422全双工芯片 SIT3490EEUA

Corona_spark 发表于 2023-10-16 17:08:50

SPI转RS422,好思路!楼主牛逼!赞!收藏了。

qtechzdh 发表于 2023-10-16 17:34:42

LVDS多好啊

442502587 发表于 2023-10-16 22:54:18

我几年前用485发送低频数据:)

A1804889557 发表于 2023-10-26 15:06:06

本帖最后由 A1804889557 于 2023-10-26 15:11 编辑

请问如果不用SSI接口,使用用SPI接口,要怎么弄?用四通道的        RS422芯片嘛?

zwp2012 发表于 2023-11-10 22:36:09

A1804889557 发表于 2023-10-26 15:06
请问如果不用SSI接口,使用用SPI接口,要怎么弄?用四通道的        RS422芯片嘛?
(引用自15楼)

搞2片 是不是就可以了

lb0857 发表于 2023-11-11 22:48:01

查分信号发射和接收就是这样使用场景

sy8501 发表于 2023-11-13 04:11:35

zwp2012 发表于 2023-11-10 22:36
搞2片 是不是就可以了
(引用自16楼)

SPI主机是三发送一接收,
从机是一发送三接收。

芯片目前找到的,只有SN65LVDT14 、SN65LVDT41 这一对可以用。

sy8501 发表于 2023-11-13 04:12:02

A1804889557 发表于 2023-10-26 15:06
请问如果不用SSI接口,使用用SPI接口,要怎么弄?用四通道的        RS422芯片嘛?
(引用自15楼)

SN65LVDT14 、SN65LVDT41 这一对支持SPI差分的收发。

A1804889557 发表于 2023-11-21 15:05:17

sy8501 发表于 2023-11-13 04:11
SPI主机是三发送一接收,
从机是一发送三接收。

(引用自18楼)

我是这样解决的:miso和sclk使用RS422转换,MOSI和CS就不用了,现在也能正常工作,我用的线缆是0.3M的,实测没毛刺{:lol:} 大佬我还有一个问题,BISS-C也能用咱们这套方案转换吗?目前几乎没找到STM32通过SPI转BISS-C的例子

sy8501 发表于 2023-11-21 22:06:01

A1804889557 发表于 2023-11-21 15:05
我是这样解决的:miso和sclk使用RS422转换,MOSI和CS就不用了,现在也能正常工作,我用的线缆是0.3M的, ...
(引用自20楼)

双向io的,直接使用485收发器来切换。

ronic 发表于 2023-11-30 07:50:13

差分驱动,记录一下
页: [1]
查看完整版本: 开源MA732/MA702/MA730磁编码器,长引线解决方案