开源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米的应用距离也丝毫没有毛刺数据产生。
磁编端:
控制板/驱动器端
也是一片SIT3490即可解决,为了性价比考虑,这里选择了价格更便宜的SOP8封装的SIT3490EESA
读取时序,
截图自MA732手册:
读取代码很简单
这边演示是读取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();
}
好方案,收藏了 这个RS422芯片可以解决10Mhz以下的2线(TX *1 / RX * 1)接口的长距离(20米+)收发问题 lz大神,厉害 编码器长引线方案,mark一下。 这个方案可以试试
有点意思,长知识了今天 不错,14M高速 RS422全双工芯片 SIT3490EEUA SPI转RS422,好思路!楼主牛逼!赞!收藏了。 LVDS多好啊 我几年前用485发送低频数据:) 本帖最后由 A1804889557 于 2023-10-26 15:11 编辑
请问如果不用SSI接口,使用用SPI接口,要怎么弄?用四通道的 RS422芯片嘛? A1804889557 发表于 2023-10-26 15:06
请问如果不用SSI接口,使用用SPI接口,要怎么弄?用四通道的 RS422芯片嘛?
(引用自15楼)
搞2片 是不是就可以了 查分信号发射和接收就是这样使用场景 zwp2012 发表于 2023-11-10 22:36
搞2片 是不是就可以了
(引用自16楼)
SPI主机是三发送一接收,
从机是一发送三接收。
芯片目前找到的,只有SN65LVDT14 、SN65LVDT41 这一对可以用。
A1804889557 发表于 2023-10-26 15:06
请问如果不用SSI接口,使用用SPI接口,要怎么弄?用四通道的 RS422芯片嘛?
(引用自15楼)
SN65LVDT14 、SN65LVDT41 这一对支持SPI差分的收发。
sy8501 发表于 2023-11-13 04:11
SPI主机是三发送一接收,
从机是一发送三接收。
(引用自18楼)
我是这样解决的:miso和sclk使用RS422转换,MOSI和CS就不用了,现在也能正常工作,我用的线缆是0.3M的,实测没毛刺{:lol:} 大佬我还有一个问题,BISS-C也能用咱们这套方案转换吗?目前几乎没找到STM32通过SPI转BISS-C的例子 A1804889557 发表于 2023-11-21 15:05
我是这样解决的:miso和sclk使用RS422转换,MOSI和CS就不用了,现在也能正常工作,我用的线缆是0.3M的, ...
(引用自20楼)
双向io的,直接使用485收发器来切换。
差分驱动,记录一下
页:
[1]