你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于SPI外设的BISS协议

[复制链接]
IncoYang 发布时间:2020-7-4 01:27
做电机控制的,就不免会跟编码器(本人是做编码器研发)打交道,ST的电机库也一直支持增量编码器做速度环控制,随着位置环控制的需求,特别是在机器人关节应用的兴起,迫切需要驱动器能能增加对绝对值编码器的支持,通常地讲,绝对值编码器的信息通常是以数据协议的方式给出,主要有两种方式,一种是时钟驱动下的同步数据传输,尤以SSI协议和BISS-C协议为代表,它是在驱动器(主机)的时钟来临时,编码器(从机)要立即锁存位置数据(或者还需要采集sin/cos,计算角度等,有些还需要计算CRC)发出,另一种是命令驱动下的异步数据传输,常见于日系的编码器协议,该协议属于半双工通信,通常是驱动器发命令请求数据,然后释放总线的控制,编码器器随后也是准备好数据发出,它的硬件层基于RS485,异步传输的一个要求是时钟要比较精准,相对灵活,因为不同的命令报文提供了对编码器的多种访问可能性。BISS-C协议作为此贴的主题。
1 O' v0 ^2 ~* D' A. T$ K/ J' ~& q$ G
BISS-C协议本质上是同步通信,硬件实现上可以采用SPI的外设加持,对应于SPI的模式(CPOL=1,表示idle电平为高,CPHA=0,表示下降沿采),有一点区别的是BISS-C的传输位数可以任意,而SPI通常都是以字节的倍数,为了利用SPI外设接收数据,可以要求数据的位数是字节的倍数。第二个不同的是,BISS-C允许编码器有一段时间处理和准备数据,此时编码器会维持一段可变时长的ACK低电平,因此驱动器需要考虑这个因素,增加裕量的时钟个数,完美的BISS-C主机实现是会探测start bit,从而会保持有效数据位的时钟个数,换句话说,每一帧的时钟个数不一定完全一样,这点对SPI来说比较难,因为SPI的时钟个数需要预先配置,不过这也可以克服,前提是发多余的时钟保证有效数据的传输,同时在数据末端也会收到垃圾数据,需要在程序处理,只要判断出start bit的位置,往后截取规定的数据长度即可。
: |: b9 t* L; B$ V
* I9 B6 Q! {8 u; k+ \2 T
5 Y- J8 B  I) _" @1 M. v1 [0 G0 K了解了它们的共同点,显而易见的方法就是把驱动器的SPI按照规定的模式配置成主机,启动SPI读数据,程序过滤出数据,听起来很简单,殊不知,这样做并不可靠,隐藏着隐患。SPI是常用于电路板内芯片之间的通信,它可以做得非常可靠,因为芯片之间的参数全都可以固定。但是驱动器与编码器之间的通信已经跨越出这个范畴,往往需要线缆来连接,因此,通信频率,线缆的材质,长度,跟温度变化的特性,板子上的线驱动芯片的延时等等这些参数都会不同,因此存在这样的情况,驱动器这边的时钟发出,到编码器端的时钟已经产生了延时,编码器是看到“当地”的时钟上升沿发送数据,下降沿时数据是稳定的,而数据串传到驱动器这边时,会发现驱动器“当地”的时钟沿已经跟采集数据的时刻已经发生了变化,而SPI主机只会用“当地”的时钟沿来采数据,可能就会发生错位,采错(也就是上升沿时刻才是正确的采集数据的时刻),有些情况下可能改配置貌似可以,有些情况下是任何一个配置都时对时错,何况其他因素的变化都会导致通信的不可靠。因此,单纯的简单地利用SPI外设模拟BISS-C协议并不总是奏效,或者说存在隐患。/ a( r) _0 N4 A% Z. {2 j1 o
只要揪出同步问题,多加2路定时器,就可以完美解决上述问题,打字太累了,感兴趣的朋友可以留言私聊。- ]* O1 F* W! z; W( e' }
Snipaste_2020-07-04_00-54-52.png
收藏 评论3 发布时间:2020-7-4 01:27

举报

3个回答
wabcgn 回答时间:2020-7-20 10:32:51
您好,能大致说下这2路定时器用法吗
wabcgn 回答时间:2020-7-20 10:34:53
您好,能大致说下这2路定时器用法吗
nis 回答时间:2020-12-15 14:32:48
你好,可以交流下怎么写这个控制吗
% P$ a( i& `8 o/ S7 T9 a

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版