不用把编码器想得太玄乎。做运动控制这些年,我见过太多人在“编码器读数”这个问题上栽跟头:电机在转,上位机却显示速度为零;或者脉冲数忽然跳变,系统直接报警停机。这些问题的根源,往往不是硬件坏了,而是没搞清楚编码器输出的到底是什么。
先给一句话结论:编码器本身并不知道电机转了多少度、转得多快,它只输出脉冲——脉冲的数量代表相对位移,脉冲的频率代表瞬时速度。“编码器读到的到底是什么”这个问题的答案,就是脉冲序列,而速度和位置,是我们根据脉冲在控制器里算出来的。
这篇文章我把整条链路拆开讲透:从码盘的物理结构、A/B/Z相脉冲的真实含义,到M法/T法/M-T法测速的取舍,再到实际调试中会遇到的具体坑。不管你是刚接触旋转编码器的新手,还是在现场被“脉冲值不匹配报警”折磨过的老手,这都值得读完。
1. 解码第一步:编码器输出的脉冲到底是什么形态
1.1 从码盘说起:增量式编码器的工作逻辑
增量式编码器里面有一个码盘,码盘上刻着一圈均匀分布的透光/不透光条纹。码盘一侧是发光管,另一侧是光敏接收管。电机转动时,码盘跟着转,透光和不透光的条纹交替经过光路,接收管就输出高低电平交替的方波。
每经过一个条纹,输出一个完整的方波周期,工业上叫一“个”脉冲。如果码盘一圈刻了2500个条纹,那么转一圈就是2500个脉冲。这个“每圈多少脉冲”就是编码器的核心参数,通常标成PPR(Pulse Per Revolution,每圈脉冲数)。
注意“增量”两个字。增量式编码器没有绝对零点,它只输出相对当前位置的变化量。每次上电,控制器记录的数值是未知的,必须靠找零位(Z相)或者执行回零动作来确定绝对位置。这一点在实际项目中特别重要——很多新手以为编码器自己知道电机在什么位置,其实它只知道“从开机到现在转了多少个脉冲”。
1.2 A、B两相的意义:不只是两个脉冲,是方向
增量式编码器通常输出A、B两路方波,两路相位相差90度,所以又叫正交信号。这两路信号共同存在,才能解决一个关键问题:判断转向。
单看A相,你只能知道有脉冲进来,不知道电机是正转还是反转。多看一路B相,控制器就能通过判断A、B的电平组合顺序来确定方向:A超前B是正转,B超前A就是反转。这就像两个人交替举手报数,你要同时看两个人谁先动,才能知道队伍是在向前走还是向后退。
正交信号还有一个很大的价值:倍频测速。一个完整的A/B周期包含4个边沿变化(A上升、A下降、B上升、B下降),控制器如果把每一个边沿都当作一次计数,就能在硬件脉冲频率不变的情况下,把分辨率提高4倍。比如2500PPR的编码器,4倍频之后相当于每圈10000个计数。这就是很多伺服驱动器里“电子齿轮比”能做得那么高的底层原因。
1.3 Z相的作用:它是绝对定位的锚点
A/B相告诉你相对位移和方向,但增量式编码器没有绝对位置,于是设计者在码盘上额外开了一圈只有一个条纹的轨道,输出Z相脉冲——每旋转一圈只出现一个,作为机械零点标记。
Z相的使用场景很典型:设备上电后,控制器带着电机低速转动,等待捕捉到Z相脉冲。一旦抓到,就把当前位置标定为零点,后续的位置计算都以这个零点为基准。这个逻辑在龙门铣、飞剪、注塑机顶杆这些需要重复定位到原点的设备上非常常见。
有个细节要注意:Z相输出的位置在码盘上只有一个物理位置,但经过4倍频处理后,Z相零点可能落在某一个计数点附近,不同控制器的对齐策略不一样。调试时如果发现回零后位置总有几十微米的偏差,先检查Z相和A/B相在控制器里的捕获时序。
提示:编码器输出的是电信号层面的方波。我们要在控制器里把它解读成“多少个脉冲、什么方向、上一个脉冲是什么时候来的”——这三件事,就是后续所有速度、位置计算的原始素材。
1.4 别忘了码道数量:从增量到绝对编码器的区分
热搜里有个词叫“3码道编码器原理”。这里稍微展开一下。
- 一两码道:最简单的增量编码器。一码道输出A相,只能计数不能辨向;两码道输出A/B正交信号,能计数也能辨向,但断电丢位置。
- 三码道:在A/B/Z基础上,有的编码器把第三码道做成绝对值码道(如格雷码),这样上电就能直接读到绝对机械位置,不需要回零。
三码道编码器在需要断电保持位置记忆的场景里很有用,比如机器人关节、数控转台。它的代价是码盘结构更复杂,成本也高。选型时别只看脉冲数,要先想清楚你需不需要“上电自报位置”。
2. 速度从哪里来:从脉冲频率到速度的计算逻辑
2.1 测量频率代表测速度:测速度的底层公式
既然脉冲的频率代表转速,那么测速度本质上就是测频率。最简单的方法:在固定时间窗口T内计数脉冲个数N,速度就是:
转速(r/min) = (N / PPR) / T × 60其中N是时间窗口内的脉冲数,PPR是编码器每圈脉冲数,T是窗口秒数。举个例子:编码器PPR=1000,在0.1秒内数到500个脉冲,那么:
转速 = (500 / 1000) / 0.1 × 60 = 300 r/min这个公式很简单,但它暴露了M法(定时计数法)的先天缺陷:在低速时,窗口内的脉冲数太少,比如转速只有10r/min、PPR=1000时,0.1秒窗口内只有约17个脉冲,量化误差会大到让速度曲线像锯齿一样跳动。所以M法适合中高速测量,测量结果平滑,低速时要换思路。
2.2 低速的反击:T法(测脉冲周期)为什么更准
T法的思路反过来:不去数固定时间内的脉冲数,而是测量相邻两个脉冲之间的时间间隔。把高频时钟(比如1MHz)接到计数器上,记录脉冲到来时的时钟计数值,两个脉冲间的时钟差值就是脉冲周期。
周期知道了,速度自然就出来了:
转速(r/min) = 60 / (T_pulse × PPR)比如PPR=1000,测得脉冲周期是0.01秒,那么转速就是:
转速 = 60 / (0.01 × 1000) = 6 r/min低速时,T法的优势很明显:脉冲周期长,时钟计数值大,分辨率高。但高速时反过来——脉冲周期太短,计数器可能只数到几十个时钟周期,量化误差被放大。所以T法适合低速高精度测量,中高速反而不行。
2.3 全速域方案:M/T法自动切换
M法和T法各有短板,工程上更常用的是M/T法:在一个时间窗口内,同时记录编码器脉冲数M、以及一个高频时钟的脉冲数T,然后综合两者计算速度。低速时以T法为主,高速时以M法为主,或者干脆在同一公式里融合计数。
M/T法在伺服驱动、CNC数控系统里几乎成了标配。它的计算量不大,但对底层定时器的资源要求高——需要两个计数器同时工作。自己做方案时,如果用STM32这类带编码器接口的MCU,硬件上支持起来很容易;如果靠PLC高速计数模块,就得确认模块是否支持增量式位置捕获加时间戳,否则M/T法实现起来很别扭。
2.4 一个关键换算:Hz脉冲频率与r/min之间的对应
现场调试时,我们经常听到两种说法:“编码器输出500Hz”和“电机转速300转”。这两者之间只差一个PPR参数。
脉冲频率(Hz) = 转速(r/min) / 60 × PPR所以PPR=1000时,300 r/min对应的脉冲频率就是:
300 / 60 × 1000 = 5000 Hz反过来说,如果你用示波器量到编码器A相输出频率是5000Hz、编码器铭牌PPR=1000,那么转速就是5000 / 1000 × 60 = 300 r/min。
这个换算是排查“脉冲值不匹配报警”的最高频工具。控制器报这个警,本质就是“收到脉冲数和系统模型推算值对不上”。通常先算一遍理论脉冲频率,再拿实测脉冲频率去对比,就能快速定位问题出在机械环节(打滑、断轴)还是电气环节(干扰、接线错误)。
3. 实操中怎么把编码器信号变成可靠的速度值
3.1 硬件层面:差分信号、双绞线与终端电阻
编码器信号在传输过程中最怕干扰。特别是把编码器线走在电机动力电缆旁边时,变频器输出的强电场会在信号线上感应出噪声脉冲,导致计数多跳或少跳。这就是“脉冲值不匹配报警”最常见的诱因之一。
解决思路有几个,按优先级排列:
- 用差分输出编码器代替单端输出:A+/A-两根线互为差分对,接收端做差,共模干扰被抵消。标准接口是RS422,市面主流增量编码器很多都支持这种输出。
- 动力线和编码器线分开走:不在同一个线槽里并行,能交叉就90度交叉。
- 接终端电阻:长线传输时,在接收端加120欧姆电阻匹配阻抗,减少反射造成的脉冲畸变。
- 屏蔽层单端接地:屏蔽层在控制器侧接地,避免形成地环路。
我在现场见过一个典型案例:一台包装机械的编码器A相示波器波形,在变频器启动瞬间出现几十毫伏的毛刺,虽然没到逻辑翻转阈值,但已经让计数器偶发误计数。最后把编码器屏蔽层从两端接地改成只接控制器端,毛刺立刻消失。
3.2 控制器选型:是硬件计数还是软件计数
脉冲计数有两种实现方式:硬件计数器由芯片内部电路自动处理,不占用CPU,计数精度高;软件计数则靠中断/轮询来读取。
用PLC做高速计数时,大部分型号的输入端都有频率上限,比如200kHz或500kHz。如果编码器PPR很高、转速又快,脉冲频率超出硬件上限,那不论软件怎么写都无法准确计数。选型时先估算一下最高的脉冲频率:
最大脉冲频率(Hz) ≈ 最大转速(r/min) / 60 × PPR × 倍频系数举个例子:最大转速3000r/min,PPR=2500,4倍频后峰值频率是3000/60×2500×4=500kHz。这个频率下,用200kHz的PLC高速计数口是铁定不行的——要么换高频率接口模块,要么不采用4倍频(用A相单计数,峰值125kHz,刚好低于200kHz)。
用单片机方案时,建议直接复用芯片的编码器接口(比如STM32的TIM_EncoderMode),硬件自动处理A/B相位判断和加减计数,远比自己在GPIO中断里判断方向靠谱。我自己初学编码器时就是死磕GPIO外部中断,结果不断抖动、误触发,后来换硬件编码器模式,世界立刻清净了。
3.3 软件层面:滤波、圈数与时间戳
就算硬件计数没问题,软件侧依然要处理三件事:
- 滤波:短于某宽度的脉冲可视为毛刺,不参与计数。许多PLC计数器模块自带数字滤波,可配置滤波器时间常数。用单片机时,应对GPIO采样做消抖,消除机械振动产生的虚假脉冲。
- 累计值:位置就是累计脉冲总数。注意累计值可能溢出,在32位计数器中,PPR高、长时间运转时要考虑定时读取并做高位扩展,或者用带溢出错标志的方案。
- 时间戳:测速时,必须记录每个脉冲或每个窗口的精确时间。用M/T法时,时间戳的精度直接决定速度分辨率。
一个容易忽略的点:计数值的读取和窗口时间的采样必须同步。如果你在软件循环里读计数器值同时用定时器计时,计数器的值可能已经更新了几次,时间窗口也没有精确对齐,算出来的速度就会周期性抖动。规范做法是硬件触发一次采样,同时锁存计数器值和时间基准值。
3.4 现场标定:怎样验算PPR和齿轮比配置
如果在系统里配置了PPR,但实际机械结构里电机和负载之间有减速机、皮带轮,控制器只能测量电机轴端的编码器脉冲,负载端的位置/速度需要按传动比换算。
现场标定的步骤:
- 查看减速机铭牌减速比,比如10:1,即电机转10圈,输出端转1圈。
- 如果编码器装在电机端,负载端转一圈对应的脉冲数是PPR×减速比=2500×10=25000。
- 把这些参数填进控制器的电子齿轮或机械参数里,然后手动慢速转动负载轴一整圈,看位移反馈是否正好对应一圈的距离。
如果不对,第一件事先确认编码器是装在电机端还是负载端。这个看似低级的问题,我在现场遇到过不止三次——换人了,节拍器查了半天参数,结果编码器装在负载端却按电机端速度配比算,所有速度曲线都差一个减速比。
4. 常见问题与排查技巧实录
4.1 问题速查表
结合多年调试经历,我搜集了下面这些高频问题,做成一个速查表:
| 现象 | 最可能的原因 | 快速检查手段 |
|---|---|---|
| 转动手轮,计数值不动 | A相接线断/接错,或编码器坏 | 示波器量A/B相波形 |
| 正转时数值在增加但马上跳回零 | 拆了Z相但用了绝对位置模式 | 检查控制器位置模式配置 |
| 电机转但速度波动很大 | 屏蔽被干扰,或窗口时间太短 | 示波器看波形毛刺,增加滤波 |
| 高速时计数值乱跳 | 脉冲频率超过硬件计数上限 | 计算峰值频率,对比端口规格 |
| 停机后位置缓慢漂移 | 有低频干扰脉冲持续误触发 | 检查线与动力电缆是否并走 |
| 报警脉冲值不匹配 | 机械打滑或传动比参数错 | 手动转一圈,对照理论脉冲值 |
| 断电后位置丢 | 用了增量式编码器 | 加装Z相回零或换绝对式编码器 |
| PPR配置成2500但实测值近10000 | 控制器启用了4倍频 | 看倍频系数设置,换算回去 |
4.2 排查脉冲值不匹配报警的完整流程
这类报警在包装机、印刷机等设备上很常见。我建议按这个顺序排查:
- 先看报警上下文:报警是发生在启动瞬间、匀速运行中,还是减速过程?启动瞬间报警多是加速度过大造成机械打滑;匀速中报警多为干扰;减速过程报警可能是急停导致机械回冲。
- 检查机械传动链:编码器联轴器是否松动?皮带是否打滑?齿轮是否磨损?把电机端用手盘动一圈,对照理论脉冲数。
- 看实时脉冲频率:用控制器的监控变量观察实时转速,同时用示波器量A相波形,对比二者是否一致。
- 检查参数配比:确认PPR、倍频数、电子齿轮比与实际编码器铭牌一致。
- 最后用替换法:如果以上都正常,换一台同型号编码器,排除器件损坏。
我曾经处理过一台折页机,报警时有时无,折腾了两天。最后发现是编码器联轴器里的弹性片磨损,高速时每转偶尔滑过半个齿,导致少脉冲。这种机械问题光看电气波形是看不出来的,必须结合“盘车对照脉冲数”才能定位。
4.3 示波器抓波形:实测编码器信号的读法
示波器是排查编码器故障最趁手的工具,但很多人不知道怎么看。简单说一下:
- 把示波器探头接到A相和B相,地线夹子接信号的公共地。
- 在控制器正常供电、电机转动时观察:A相和B相应当是一对相位差约90度的方波。
- 如果没有波形,先碰一下探头地线,确认是接线问题还是编码器本身没供电。
- 如果方波边沿有明显圆角或毛刺,说明传输线阻抗不匹配或者屏蔽不良。
- 若要验算转速:数一下A相完整周期的时间,用“频率=1/周期”算出A相脉冲频率,再除以PPR换算成转速,拿去和控制器显示值比对。
值得加一句:低速时方波看起来仍然很整洁,不代表高速时也整洁。踩过不少坑之后,我现在习惯在额定转速下测波形,更贴近真实工况。
4.4 关于干扰的几个冷知识
- 脉冲丢失往往不是干扰,而是机械振动:振动引起码盘抖动,A/B相位异常,控制器可能把一整个计数值丢弃。
- 输出长线时,不只是屏蔽层重要:用双绞线把A+和A-绞在一起能显著抑制磁场耦合。
- 接地很关键,也很容易做错:屏蔽层接到控制器电源的负极不如接到专用接地端子,缝在机架上可能形成地环路。
- 干扰不是只有高频:变频器启动瞬间的地电位抬升,就可能造成几百毫秒的计数噪声。这类问题在硬件上增加光耦隔离。
原本以为这些经验写出来会很长,结果整理一下发现,核心就三条:看清楚脉冲形态、选对测速方法、重视传输与接地。编码器输出的无非是A/B/Z三相方波,背后却牵扯了机械传动、电气布线、信号处理和算法模型,任何一个环节掉链子,速度读数都会给你脸色看。
我个人在实际项目中最深的体会是:先学会用示波器看波形,再去纠结算法精度。波形不对,算法写得再漂亮也是给错误数据做精细加工。反过来,只要A/B相位正确、脉冲频率对得上,哪怕只用最简单的M法定时计数,绝大多数现场场景已经够用。速度环PID废了半天劲调不稳,回头发现编码器信号本身就是抖的——这种冤枉路,走一次就够了。