BISS编码器入门指南:从原理到实战避坑

1次阅读
没有评论

共计 1214 个字符,预计需要花费 4 分钟才能阅读完成。

image.webp

背景痛点

工业设备位置检测中,传统增量式编码器存在协议封闭、抗干扰能力差等问题。尤其在长距离传输或电磁环境复杂的场景下,信号失真会导致位置数据跳变,直接影响设备控制精度。而 BISS 协议作为开放式标准,具有错误检测机制和更强的抗干扰能力,正逐渐成为高可靠性应用的首选。

BISS 编码器入门指南:从原理到实战避坑

BISS vs SSI 协议对比

对比维度 BISS 协议 SSI 协议
传输速率 最高 10MHz(曼彻斯特编码) 通常≤1MHz(NRZ 编码)
错误检测 6 位 CRC 校验 无校验机制
接线复杂度 单线差分(支持双绞线) 多线并行(易受干扰)
零位校准 内置自动校准机制 需外部参考信号
协议开放性 开放标准(免授权费) 部分厂商私有协议

核心实现

帧结构图解

[起始位 1][起始位 0][6 位 CRC][数据位(多字节)][状态位]

起始位 :固定 ”10″ 模式,用于同步时钟
CRC6 校验 :多项式 x⁶ + x + 1(0x43)
状态位 :包含错误标志和零位信号

关键处理流程

  1. 同步头检测
  2. 连续采样直到捕获 ”10″ 模式
  3. 启动硬件 SPI 时钟同步(CPOL=1, CPHA=1)

  4. 曼彻斯特解码

  5. 每个时钟周期采样中点数据
  6. 跳变沿表示逻辑 1,无跳变表示逻辑 0

  7. CRC 校验

  8. 预生成 0x43 多项式的查表(64 字节)
  9. 对比接收 CRC 与计算值

代码实现(STM32 HAL 库)

// CRC6 查表(预计算 0x43 多项式)const uint8_t crc6_table[64] = {0x00, 0x03, 0x06, 0x05...};

// DMA 双缓冲配置
void BISS_Init(SPI_HandleTypeDef *hspi) {
  hspi->Init.CLKPolarity = SPI_POLARITY_HIGH;
  hspi->Init.CLKPhase = SPI_PHASE_2EDGE;
  HAL_SPI_Init(hspi);

  // 双缓冲 DMA 接收
  HAL_SPI_Receive_DMA(hspi, buffer1, BUFFER_SIZE);
  HAL_SPI_Receive_DMA(hspi, buffer2, BUFFER_SIZE);
}

// 最小 tSCLK 间隔约束(示例如 10MHz 时钟)#define MIN_SCLK_INTERVAL 100 // ns

实战避坑指南

  • 信号反射处理
  • 电缆末端并联 120Ω 终端电阻
  • 使用阻抗匹配的双绞线(如 Belden 3105A)

  • 零位校准

  • 上电时连续读取 10 次零位信号取平均
  • 动态补偿温度漂移(每℃补偿 0.1LSB)

  • 抗干扰布线

  • 避免与电机电源线平行走线
  • 超过 5 米传输时采用屏蔽双绞线

性能验证方法

  1. 示波器测量信号质量:
  2. 上升时间应 <50ns(@10MHz)
  3. 过冲幅度 <10%Vcc

  4. 误码率测试:

  5. 发送已知数据模式(如 0xAA55)
  6. 统计 100 万次传输的错误次数

实际测试数据:
– 2 米线缆:误码率 <1e-9
– 20 米线缆:误码率≈1e-6(需加中继器)

通过合理配置和验证,BISS 编码器可在绝大多数工业场景实现可靠的位置采集。关键点在于严格遵循时序约束、做好信号完整性设计,并定期执行自动校准。

正文完
 0
评论(没有评论)