共计 1635 个字符,预计需要花费 5 分钟才能阅读完成。
背景痛点
在工业自动化领域,编码器作为位置反馈的核心传感器,其信号传输可靠性直接决定系统性能。传统增量式编码器采用 ABZ 信号接口,在长距离传输时面临三大挑战:

- 信号衰减导致边沿抖动(实测 1 米电缆抖动达±15ns)
- 差分线对布线成本高(需双绞线 + 屏蔽层)
- 无法在单周期内获取绝对位置数据(必须依赖零位脉冲)
BISS 协议通过单线双向曼彻斯特编码(据 BISS 白皮书 v1.3 第 4 章),在 6MHz 时钟下可实现:
- 传输距离延长至 100 米(CAT5e 电缆测试结果)
- 32 位绝对位置 + 6 位 CRC 校验
- 抗共模干扰能力达±7V(对比 SSI 仅±1.5V)
协议解析
时序机制
典型 BISS 帧结构如下图所示(省略图示,文字描述):
- 主机发送起始脉冲:低电平持续≥2 个时钟周期
- 从机响应:在时钟上升沿输出曼彻斯特编码数据
- CDS 同步:数据帧首个下降沿用于时钟相位校准
- CRC 校验:多项式 x⁶ + x + 1(BISS 规范附录 B)
关键时序参数:
- 建立时间 t_su ≥ 15ns(Xilinx 7 系列 FPGA 约束)
- 保持时间 t_h ≥ 10ns
- 时钟抖动容限±5% 周期
FPGA 实现
模块架构
// 顶层模块
module biss_master (
input wire clk_100m, // 主时钟
output wire biss_clk, // 6MHz 生成时钟
inout wire biss_data, // 双向数据线
output [31:0] pos_data // 解码位置
);
// PLL 生成 6MHz 时钟
clk_wiz_0 pll_inst(.clk_out1(biss_clk), .clk_in1(clk_100m));
// 曼彻斯特解码器
manchester_decoder decoder(.clk(biss_clk),
.data_in(biss_data),
.pos_valid(pos_valid),
.pos_out(pos_data)
);
// CRC 校验模块
crc6_checker crc(.clk(biss_clk),
.data_stream(pos_data[31:0]),
.crc_in(pos_data[37:32]),
.error(crc_error)
);
endmodule
解码核心逻辑
曼彻斯特解码状态机设计要点:
-
边沿检测:使用双触发器消除亚稳态
always @(posedge clk) begin data_dly <= biss_data; edge <= data_dly ^ biss_data; // 跳变检测 end -
数据采样:在时钟周期中点锁存
if (edge & ~sampling) begin sample_timer <= 3'b100; // 启动 1 / 2 周期计时 sampling <= 1'b1; end else if (sampling) begin sample_timer <= sample_timer - 1; if (sample_timer==0) begin data_shift <= {data_shift[30:0], biss_data}; sampling <= 1'b0; end end
工程优化
PCB 设计规范
- 阻抗匹配:单端 50Ω(FR4 板材线宽 0.3mm)
- 走线间距:≥3 倍线宽防止串扰
- 终端电阻:33Ω+10pF RC 网络(抑制反射)
调试技巧
- ILA 触发设置:
- 捕获模式:触发于 CRC 错误上升沿
-
存储深度:8192 点(覆盖完整帧)
-
眼图分析法:
- 使用高速示波器测量建立 / 保持时间余量
- 抖动容忍度测试:注入±10% 时钟偏移
避坑指南
典型问题解决方案
- 信号抖动处理:
- 添加 LTCC 低通滤波器(截止频率 8MHz)
-
启用 FPGA 输入的 IDELAYE2 模块
-
电源噪声抑制:
- 编码器供电采用 LCπ 型滤波(10μH+2×100μF)
-
数字地模拟地单点连接
-
误码率优化:
- 10 万次测试统计显示:
- 无屏蔽时误码率 1.2×10⁻⁴
- 增加屏蔽后降至 3.8×10⁻⁶
扩展思考
如何将当前单主单从架构扩展为 BISS- C 多从站系统?需考虑:
- 拓扑结构:菊花链 vs 星型连接
- 冲突仲裁:基于硬件地址的优先级机制
- 时钟同步:全局时钟分发网络设计
期待读者在评论区分享实际应用中的解决方案。
正文完
