简介:这份PDF资料面向工业自动化、机电一体化及传感器技术方向的工程师与技术人员,系统讲解编码器的工作原理,并重点剖析增量型编码器的结构与应用。内容从编码器将直线位移或角位移转换为电信号的传感器定位切入,梳理光电、磁性、电感式与电容式等分类,深入说明光电编码器的连接轴、码盘、光源与输出电路组成,以及A、B、Z三相码盘如何通过相位差90度区分正反转、以Z相单圈脉冲提供参考零位,并指出其测量结果为相对值、断电后数据易丢失的局限。资源包为1个PDF文件,约182KB,轻量便携,适合随时查阅与知识梳理。目前已有283人学习。读者可借此快速建立编码器知识框架,理解脉冲计数确定位移大小的机制,为机床、机器人、电机反馈等运动控制场景中的选型与排错打下基础。
1. 增量型编码器在工业控制里到底解决什么问题
产线上一个伺服电机要定位到 0.1 mm,PLC 发完脉冲后怎么知道电机真的转到位了?靠的就是编码器把机械轴的角位移、转速实时翻译成电信号回传。增量型编码器是这里面用量最大的一类:它不告诉你“现在在哪”,只告诉你“相对上一次转了多少格”,上电后必须找零或回零,这是它和绝对值编码器最本质的区别。工业控制现场大量用增量型,原因很直接——结构简单、响应快、抗干扰做得好的型号能跑几百 kHz 的脉冲频率,成本还低。它输出的 A、B 两路方波相差 90 度,Z 路每转一圈给一个零位脉冲,配合 PLC 的高速计数口或 STM32 的编码器模式接口,就能算出位置和方向。这篇把增量型编码器的结构、信号、接线、参数和常见翻车点讲透,适合做运动控制、伺服调试、PLC 计数的工程师照着落地。
2. 增量型编码器的结构:光栅、码盘与三码道信号是怎么来的
2.1 从一根轴到 A/B/Z 三路方波
增量型编码器的核心是一条随轴旋转的码盘(光栅盘),盘上刻有等间距的透光/遮光缝隙。发光二极管在一侧,光电接收管在另一侧,轴一转,光路被周期性遮挡,接收管就输出近似正弦的电流,再经过整形电路变成方波。码盘上通常刻三圈码道:A 道和 B 道缝隙数相同但空间上错开四分之一栅距,所以输出方波相位差 90 度;Z 道每圈只有一个缝隙,转一圈输出一个脉冲,用来做机械零位参考。
A、B 相差 90 度这件事是增量型编码器能判方向的关键。如果 A 超前 B 90 度,判为正转;B 超前 A 90 度,判为反转。四倍频计数就是同时利用 A、B 的上升沿和下降沿,把每个栅距细分成 4 个计数单位,分辨率直接翻四倍。常见做法是 PLC 高速计数口设成 4 倍频,STM32 的编码器模式也默认对 TI1、TI2 双边沿计数。
提示:Z 信号不是每圈都干净,机械抖动或码盘偏心会让 Z 脉冲宽度不稳,回零逻辑里一定要做滤波或只在低速下采信 Z。
2.2 光电式、磁式与 3 码道方案的选型差别
光电增量编码器精度高、频率响应好,但怕粉尘和油污,码盘一脏就丢脉冲。磁编码器(比如常见的 AS5047P 这类磁角度芯片)靠霍尔或磁阻感应旋转磁场,抗污染强、体积小,但分辨率和温漂通常不如光电式。3 码道编码器原理说的就是 A、B、Z 三条码道,这是最经典的增量结构;有些设计会再加 U、V、W 三路换向信号给无刷电机用,那是另一套逻辑,别和 A/B/Z 混为一谈。
选型时先问三个问题:转速多高、分辨率要多少线、现场脏不脏。高转速优先光电式,注意最高响应频率要大于“转速 × 线数”;油污粉尘重就选磁式或带密封的光电式;要绝对位置就干脆上绝对值编码器,别硬用增量型加电池记忆。
2.3 分辨率、线数与四倍频的换算
编码器标称的“线数”(PPR,每转脉冲数)指的是单路 A 或 B 每转输出的脉冲数。系统实际分辨率取决于计数方式:
| 计数方式 | 每转计数 | 说明 |
|---|---|---|
| 单路单边沿 | 1 × PPR | 最简单,浪费分辨率 |
| 单路双边沿 | 2 × PPR | 只用 A 路 |
| 双路双边沿(4 倍频) | 4 × PPR | 工业控制最常用 |
举例:2500 线编码器,4 倍频后每转 10000 个计数。若丝杠导程 10 mm,则每个计数对应 10 / 10000 = 0.001 mm,这就是理论定位精度。注意这是分辨率不是精度,机械间隙、联轴器打滑、丢脉冲都会让实际精度打折。
3. 接线与信号处理:把 A/B/Z 正确送进 PLC 和 STM32
3.1 输出类型先分清:集电极开路、推挽、差分
接线翻车十有八九是输出类型没对上。增量编码器常见三种输出:
- 集电极开路(NPN/PNP):需要外接上拉或下拉电阻,接 PLC 输入时要确认 PLC 是源型还是漏型。
- 推挽输出:直接给高低电平,驱动能力强,接线简单。
- 差分输出(线驱动,A+/A-、B+/B-、Z+/Z-):抗干扰最好,长距离传输首选,接收端要用差分接收芯片或 PLC 的差分输入口。
工业现场线缆超过几米、旁边有变频器,强烈建议用差分输出加双绞屏蔽线,屏蔽层单端接地。用集电极开路长距离跑,脉冲边沿会被拉缓,高速时直接丢计数。
3.2 STM32 编码器模式测速的最小配置
STM32 的定时器自带编码器模式,把 A、B 接到 TIM 的 CH1、CH2,硬件自动做 4 倍频和方向判断,CPU 只读计数寄存器。下面是最小可用配置(以 HAL 库为例):
// TIM3 编码器模式初始化,A->PA6(TIM3_CH1), B->PA7(TIM3_CH2) TIM_Encoder_InitTypeDef enc = {0}; TIM_MasterConfigTypeDef master = {0}; htim3.Instance = TIM3; htim3.Init.Prescaler = 0; // 编码器模式不分频,保持最高计数分辨率 htim3.Init.CounterMode = TIM_COUNTERMODE_UP; htim3.Init.Period = 0xFFFF; // 16 位满量程,靠溢出中断扩展 htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; enc.EncoderMode = TIM_ENCODERMODE_TI12; // TI1、TI2 双边沿,即 4 倍频 enc.IC1Polarity = TIM_ICPOLARITY_RISING; enc.IC1Selection = TIM_ICSELECTION_DIRECTTI; enc.IC1Prescaler = TIM_ICPSC_DIV1; enc.IC1Filter = 10; // 输入滤波,抑制毛刺,值越大滤波越强 enc.IC2Polarity = TIM_ICPOLARITY_RISING; enc.IC2Selection = TIM_ICSELECTION_DIRECTTI; enc.IC2Prescaler = TIM_ICPSC_DIV1; enc.IC2Filter = 10; HAL_TIM_Encoder_Init(&htim3, &enc); HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL);逻辑说明:EncoderMode选TI12表示对两路都双边沿计数,得到 4 倍频;IC1Filter/IC2Filter是数字滤波,现场有干扰时调到 6~15 能明显减少误计数,但滤波太强会限制最高响应频率。读位置用__HAL_TIM_GET_COUNTER(&htim3),读方向用__HAL_TIM_IS_TIM_COUNTING_DOWN(&htim3)。测速时固定周期(比如 10 ms)读一次计数差,除以周期和每转计数就得到转速。
注意:16 位计数器会溢出,做多圈累计必须开更新中断,在中断里把溢出方向累加到一个 32 位或 64 位变量,否则转几圈位置就乱了。
3.3 PLC 高速计数口的参数怎么设
以常见 PLC 高速计数模块为例,需要设四个参数:计数模式(单相/双相/AB 相)、倍频(1/2/4)、计数方向、输入滤波。AB 相正交计数选 4 倍频,输入滤波时间常数按最高脉冲频率倒推——比如最高 100 kHz,周期 10 μs,滤波设 1~2 μs 比较稳。回零方式选“Z 相 + 使能”还是“仅 Z 相”,取决于机械上有没有接近开关做粗定位。参数设错最典型的现象是:电机正转计数增加、反转也增加,那就是 A/B 接反或倍频模式选错。
4. 避坑与排查:增量型编码器现场最常见的 5 个翻车点
4.1 现象:计数只增不减,方向判断失效
原因:A、B 两路接反,或者 PLC/定时器把两路当成同一路单相计数。增量型判方向完全依赖 A、B 的相位先后,接反后相位关系颠倒,方向位就反了。
解决:交换 A、B 接线,或在软件里对方向位取反。STM32 编码器模式下如果方向始终不对,检查 CH1、CH2 是否接到了同一 TI 的映射引脚。
4.2 现象:高速时丢脉冲,低速正常
原因:三种可能——输出是集电极开路没加上拉,边沿被 RC 拖慢;输入滤波设太强,窄脉冲被滤掉;线缆太长没用差分,受变频器干扰。
解决:换差分输出或加合适上拉电阻;把滤波值调小;缩短线缆、改双绞屏蔽并单端接地。用示波器看 A/B 波形是最快的定位手段,边沿是否陡、有没有毛刺一目了然。
4.3 现象:Z 相回零偶尔偏一格
原因:Z 脉冲宽度随转速变化,高速下 Z 有效窗口很窄,加上机械抖动,采样时刻落在窗口边缘就会偏一个计数。
解决:回零时降速到额定转速的 10% 以下再找 Z;软件里对 Z 做去抖,连续两次检测到 Z 才认;或者用“接近开关粗定位 + Z 精定位”两级回零。
4.4 现象:上电位置随机,每次都不一样
原因:增量型编码器本身不带绝对位置,上电计数从 0 开始,这是它的固有特性,不是故障。
解决:上电必须执行回零流程,把机械零位和计数器对齐。需要断电记忆位置就加绝对值编码器或外部电池备份方案,别指望增量型自己记住。
4.5 现象:计数偶尔跳变一个大数
原因:电磁干扰串入信号线,或者屏蔽层两端接地形成地环流;也可能是电源地和信号地处理不当。
解决:屏蔽层只在控制器一端接地;信号线与动力线分开走线槽,间距至少 20 cm;必要时加光耦隔离或差分接收。现场玄学跳数,九成是接地和走线问题。
5. 进阶:用四倍频和滤波把增量型编码器的精度榨到极限
想把增量型编码器用到极致,核心就两件事:把分辨率吃满、把干扰压下去。分辨率上,4 倍频是标配,但很多人忽略了计数器的位宽和溢出处理——16 位计数器在 10000 计数/转时,转 6 圈多就溢出,必须用软件扩展成 32 位甚至 64 位累计值,否则多圈定位直接崩。测速算法上,低速用“固定时间测脉冲数”(M 法)会因脉冲太少而抖动,高速用“测脉冲周期”(T 法)又浪费分辨率,工程上常用 M/T 混合法:低速测周期、高速测频率,切换阈值按每转计数和采样周期算。
滤波这块,硬件上差分传输加屏蔽是底线,软件上定时器输入滤波和滑动平均可以叠加。我一般会在 10 ms 采样周期里对速度做一阶低通,截止频率设在机械带宽的 3~5 倍,既能压噪声又不至于让响应变肉。验证方法很土但有效:手动匀速转一圈,看累计计数是否严格等于 4 × PPR,反复十次偏差不超过 1 个计数,说明信号和计数链路是干净的;再突然反转,看方向位和计数是否同步翻转,能过这两关,现场基本不会翻车。
血泪经验是:别在调试阶段省示波器,A/B/Z 三路波形看一眼,比对着代码猜半天强得多。增量型编码器结构简单,但简单的东西最容易在接线和参数上栽跟头,把回零、倍频、滤波这三件事做扎实,它就能在工业控制里稳稳干活。希望帮到你。
本文还有配套的精品资源,点击获取