绝对式编码器的ssi协议 stm32 hal

虽然开始研究的时候比较疑惑,其实还是比较简单的。十几分钟就可以全部掌握。

整体框架

发送时钟
读取数据
stm32
RS422
编码器

编码器的厂商为了抗干扰,在SSI信号使用了RS422,RS422和RS485这类的都是通信协议而已,打个比方,只是你去往同一城市的不同道路而已,最终还是你过去,你并没有变化。

  • 编码器经过RS422的协议是SSI,编码器的SSI是什么样子的
  • STM32如何实现

编码器的SSI协议

编码器的SSI协议其实非常的简单,他是同步信号,类似SPI。
绝对式编码器的ssi协议 stm32 hal_第1张图片
SSI为同步串联信号,实际的两对RS422(RS422四根线),一对时钟触发,一对数据发送。
如图所示,编码器的绝对位置值由接收设备的时钟信号触发、从格雷码高位(MSB)开始,输出与时钟信号同步的串行信号。时钟信号从接收设备发出,以编码器的总位数输出N个中断脉冲,当不传送信号时,时钟和数据位均是高位,在时钟信号的第一个下降沿,当前值开始贮存,从时钟信号上升沿开始,数据信号开始传送,一个时钟脉冲同步一位数据。
T = 4~11us
tcal : 1us~5.5us
n = 数据字长,24位,25位26位和32位
推荐读取数据的最佳位置不是时钟的下降沿,而是应该是下降沿与下一个上升沿的中间位置。
这也是为什么SPI不适用的原因,数据可能会出错。

STM32实现

SSI协议只需要两根线,一个是时钟,一个是数据 所以 引脚配置
一个引脚为输出模式,上拉
一个引脚为输入模式,上拉

举例子,T = 125khz, tcal = 4us
伪代码:
时钟引脚高电平持续几ms //保证时钟为高电平,并且错过t2
时钟引脚低电平4us
时钟引脚高电平4us

/* 保证时钟为高电平,并且错过t2 */
时钟引脚高电平持续几ms
/* 第一个时钟数据不需要 */
时钟引脚低电平4us				
时钟引脚高电平4us
/* 读数据 按照需要反复此步骤 直到读取完数据 */
时钟引脚低电平2us
读取数据
时钟引脚低电平2us
时钟引脚高电平4us

重点是us的实现,对此具体见我的其他文章。先读的数据是最高位,并且读完的数据是格雷码,转换一下就可以得到数据。

你可能感兴趣的:(STM32)