使用FPGA自己编写代码与海德汉编码器endat2.2协议传输发生数据混乱现象的解决方法

背景及问题描述

最近在FPGA上写了一个与海德汉编码器进行endat协议通信的代码。endat协议的通信时序在网上很容易找到,简单的实现角度的获取难度也不是很大。但是在写完之后实物验证上出现了问题:

我能接收到编码器传回来的数据,但是这些数据最终在计算机上看起来是毫无规律的。在排除了传输路径上的其他可能出问题的阶段之后,最后问题定位到了endat协议的通信上。

最初我对这个问题束手无措,因为从ILA抓取的波形来看,我发送时钟和模式指令的时序是符合通信协议的,但是编码器传回的数据也确实是毫无规律。

后来我将状态机卡在接收数据的阶段,让FPGA不断产生时钟,观察编码器返回的波形。这样还真发现了编码器返回数据的规律,每隔一段时间数据线上就会出现一段极其相似的波形,我完全有理由相信这是正确的反馈结果,但是不是很懂为什么会这样,甚至一度怀疑是这个编码器已经坏了。

解决方法

最终解决这个问题是延长了两个通信周期之间的间隔时间。我发送的时钟频率大致在几百KHz那样,根据编码器手册讲这时需要两个通信周期的时间间隔在10us到40us,而我的时间间隔时间恰好只有10us左右。后来将这个时间延长到了80us,计算机上读到了正确的角度数据。

我猜测这个长时间的间隔可能会使编码器复位。

我的实际实验数据结果与说明书上的数据不是很相符,这需要更多的实验去验证。

但是可以得到这样的结果:通信协议的时序图只有一个周期的波形,单看这么一个图很容易忽略间隔时间。两个通信周期之间的间隔时间是很必要的,时间应该足够长来保证接收到的数据的准确。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值