BISS编码器硬件方案选型与高精度数据采集实践

1次阅读
没有评论

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

image.webp

背景痛点

在工业自动化领域,高精度位置检测是一个常见需求,尤其是机床、机器人等应用场景。传统增量式编码器在实际应用中经常遇到以下问题:

BISS 编码器硬件方案选型与高精度数据采集实践

  • 信号失真:长距离传输导致方波信号畸变,尤其是高频信号更明显
  • 传输延迟:信号在电缆中的传播延迟导致位置反馈滞后
  • 抗干扰差:工业环境中的电磁干扰容易导致误码

这些痛点直接影响系统控制精度,严重时甚至导致设备停机。

协议对比

常见绝对式编码器协议主要有三种:SSI、EnDat 和 BISS。它们的主要区别如下:

  1. SSI 协议
  2. 单向时钟 + 数据线
  3. 无内置校验机制
  4. 最高时钟频率 1MHz

  5. EnDat 协议

  6. 双向数据通信
  7. 支持 CRC 校验
  8. 最高时钟频率 8MHz
  9. 需专用接口芯片

  10. BISS 协议

  11. 差分信号传输
  12. 内置 CRC6 校验
  13. 最高时钟频率 10MHz
  14. 硬件实现简单
sequenceDiagram
    participant Master
    participant Slave
    Master->>Slave: Clock(差分)
    Slave->>Master: Data(差分)
    Note right of Slave: 6-bit CRC 校验 

硬件设计

核心芯片选型

推荐使用以下器件构建 BISS 接口:

  • 差分接收器:AM26C32(TI)
  • 支持 50Mbps 速率
  • 共模抑制比 12kV/μs
  • 工业级温度范围

  • 时钟驱动器:SN65HVD72(TI)

  • 3.3V 供电
  • 短路保护
  • 20ns 传播延迟

FPGA 逻辑实现

以下是 Verilog 实现的 BISS 主机模块核心代码:

module biss_master (
    input clk_50m,
    output reg clk_out,
    input data_in,
    output [31:0] position,
    output crc_error
);

// CRC6 校验模块
function [5:0] crc6;
    input [41:0] data; // 32 位位置 + 6 位 CRC+ 其他
    integer i;
    begin
        crc6 = 6'b111111;
        for(i=0; i<42; i=i+1)
            crc6 = {crc6[4:0],1'b0} ^ (data[i] ? 6'b011011 : 0);
    end
endfunction

// 状态机实现
parameter IDLE = 2'b00;
parameter READ = 2'b01;
parameter CRC  = 2'b10;

reg [1:0] state = IDLE;
reg [5:0] bit_cnt;
reg [41:0] shift_reg;

always @(posedge clk_50m) begin
    case(state)
    IDLE: begin
        clk_out <= 1'b0;
        if(start) begin
            state <= READ;
            bit_cnt <= 6'd0;
        end
    end
    READ: begin
        clk_out <= ~clk_out;
        if(clk_out) begin
            shift_reg <= {shift_reg[40:0], data_in};
            if(bit_cnt == 6'd41) state <= CRC;
            else bit_cnt <= bit_cnt + 1;
        end
    end
    CRC: begin
        crc_error <= (crc6(shift_reg) != 6'b000000);
        position <= shift_reg[39:8];
        state <= IDLE;
    end
    endcase
end

endmodule

PCB 布局要点

  1. 差分线对等长设计:
  2. 长度差控制在 5mil 以内
  3. 使用 100Ω 差分阻抗

  4. 电源去耦:

  5. 每个 IC 的 VCC 引脚放置 0.1μF+1μF MLCC
  6. 电源层分割避免数字噪声耦合

  7. 接地处理:

  8. 采用星型接地
  9. 编码器外壳接机柜地

性能测试

示波器实测

使用 4 米双绞线电缆测试,关键参数:

  • 上升时间:<10ns(10%-90%)
  • 眼图张开度:>80%
  • 时钟抖动:<500ps

误码率统计

电缆长度 误码率 (10^6 次)
2m 0
5m 3
10m 27

避坑指南

时钟抖动抑制

  1. 使用低抖动时钟源(如 SiTime MEMS 振荡器)
  2. 在 FPGA 内插入 IDELAYE2 调整相位
  3. 避免与其他高频信号平行走线

多轴同步

  1. 采用光耦隔离每个轴的地回路
  2. 使用 LTC4332 等隔离式 RS485 芯片
  3. 在 FPGA 内统一采样时钟

扩展思考:STM32H7 移植

STM32H7 的硬件方案要点:

  1. 利用 FDCAN 外设的 CRC 硬件加速
  2. 配置 TIMER 触发 DMA 采集
  3. 使用 LTDC 接口的差分信号引脚

动手实验

基于 STM32CubeIDE 配置 BISS 从机模式:

  1. 在 CubeMX 中启用 SPI 外设
  2. 配置 DMA 通道传输数据
  3. 设置 CRC 外设为多项式 0x43(CRC-6)
  4. 实现以下回调函数:
void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi)
{
    // 处理位置数据更新
    position = (rx_buf[0]<<24) | (rx_buf[1]<<16) | 
               (rx_buf[2]<<8)  | rx_buf[3];
}

通过本文方案,我们成功实现了微米级精度的位置检测系统。实际测试表明,在 5 米电缆长度下,系统位置误差 <±1LSB,完全满足工业应用需求。

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