4、信号采集硬件:差分信号接收器(AM26LS32)、比较器整形电路、FPGA/CPLD计数方案
做编码器信号处理这么多年,我始终觉得硬件采集方案是整个系统的基石。你想想看,如果前端信号都收不干净,后面算法再牛也白搭。今天咱们就聊聊这个环节里三个关键器件:AM26LS32差分接收器、比较器整形电路,还有FPGA/CPLD的计数方案。
4.1 差分信号接收器:AM26LS32
编码器输出信号,尤其是长距离传输时,很容易被共模噪声干扰。差分信号就是为了解决这个问题而生的。AM26LS32这颗芯片,我用了不下十年,它就是个差分转单端的专用接收器。
说白了,它把A+、A-这对差分信号,转成我们单片机或FPGA能识别的单端TTL电平。内部有四个独立的接收通道,正好对应编码器的A、B、Z三路信号,多出来一路还能做备用。
关键参数:
- 输入共模范围:±7V,抗干扰能力很强
- 迟滞电压:典型值50mV,能有效抑制信号抖动
- 传输延迟:典型值20ns,对高速编码器完全够用
我在项目中遇到过一个问题:编码器线缆超过20米时,信号偶尔会丢步。排查了半天,发现是AM26LS32的使能引脚没处理好。嗯,这里要注意——使能引脚必须接高电平或低电平,不能悬空,否则内部逻辑会乱跳。
4.2 比较器整形电路
有些场合,编码器输出的是正弦波信号(比如Sin/Cos编码器),这时候AM26LS32就派不上用场了。我们需要用比较器把正弦波整形成方波。
比较器整形电路的核心,就是设置一个合适的阈值电压。信号高于阈值输出高电平,低于阈值输出低电平。听起来简单,但实际坑不少。
避坑指南:
我曾经在调试一个伺服系统时,编码器信号在零速附近频繁跳变。后来发现是比较器没有加迟滞,导致信号在阈值附近来回振荡。加一个正反馈电阻,引入几毫伏的迟滞,问题立刻解决。
典型的比较器整形电路,我习惯用LM393或TLV3501。LM393便宜皮实,但速度慢;TLV3501速度快,但价格贵。选型时看编码器最高频率,一般电机编码器用LM393就够了。
电路设计时,有几点要注意:
- 阈值电压要稳定,最好用精密电阻分压
- 输入信号要加RC滤波,滤除高频毛刺
- 输出要加上拉电阻,开漏输出不能直接驱动FPGA
4.3 FPGA/CPLD计数方案
信号整形成方波后,下一步就是计数。用单片机做计数当然可以,但精度和实时性有限。FPGA或CPLD才是专业干这活的。
FPGA/CPLD计数方案,说白了就是用硬件逻辑直接处理编码器脉冲。没有中断延迟,没有软件开销,能做到纳秒级的响应。
我常用的方案是四倍频计数。编码器每转一圈输出N个脉冲,四倍频后分辨率变成4N。实现方式很简单:检测A、B两路信号的上升沿和下降沿,每个边沿都计一次数。
// Verilog代码示例:四倍频计数器
module encoder_counter (
input clk,
input rst_n,
input A,
input B,
output reg [31:0] count
);
reg A_dly, B_dly;
wire A_rise, A_fall, B_rise, B_fall;
// 边沿检测
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
A_dly <= 1'b0;
B_dly <= 1'b0;
end else begin
A_dly <= A;
B_dly <= B;
end
end
assign A_rise = A & ~A_dly;
assign A_fall = ~A & A_dly;
assign B_rise = B & ~B_dly;
assign B_fall = ~B & B_dly;
// 四倍频计数
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
count <= 32'd0;
else begin
if (A_rise & B) // A上升沿,B为高,正转
count <= count + 1'b1;
else if (A_rise & ~B) // A上升沿,B为低,反转
count <= count - 1'b1;
// 其他边沿类似处理...
end
end
endmodule
这段代码我用了很多年,核心思路就是边沿检测加方向判断。你想想看,每个时钟周期都在做这个操作,精度自然高。
个人经验:
FPGA计数时,一定要做输入信号同步处理。编码器信号是异步的,直接采会有亚稳态风险。我习惯用两级D触发器打拍,把信号同步到系统时钟域。
4.4 整体方案对比
| 方案 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| AM26LS32 + 单片机 | 低速编码器,线缆长 | 抗干扰强,成本低 | 实时性一般 |
| 比较器 + FPGA | 正弦波编码器,高速 | 精度高,响应快 | 电路复杂,成本高 |
| AM26LS32 + FPGA | 差分编码器,高速 | 抗干扰强,精度高 | FPGA开发门槛高 |
选型时,我建议先看编码器输出类型。差分输出就用AM26LS32,正弦波输出就用比较器。至于计数部分,如果系统对实时性要求高,比如伺服驱动器,那就上FPGA;如果只是位置监控,单片机也够用。
最后,画一张整体流程图,帮大家理清思路。
这张图把整个信号链路串起来了。编码器输出差分信号或正弦波信号,经过AM26LS32或比较器整形,最后进入FPGA/CPLD进行计数。我个人建议,如果条件允许,优先选差分信号加FPGA的方案,抗干扰和精度都能兼顾。
核心要点回顾:
- AM26LS32负责差分转单端,使能引脚不能悬空
- 比较器整形必须加迟滞,否则信号会振荡
- FPGA计数要做同步处理,避免亚稳态
- 四倍频计数能提高分辨率,但要注意方向判断
好了,这一章的内容就到这里。信号采集硬件这块,说白了就是要把编码器的原始信号,变成干净、可靠的数字脉冲。每一步都有坑,但踩过一次就记住了。