ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

电机编码器原理与实战:从增量式到绝对值,PLC/单片机读取全解析

2026/8/20 8:19:46 拓冰建站 浏览量
电机编码器原理与实战:从增量式到绝对值,PLC/单片机读取全解析 大家好我是专注于工业自动化与嵌入式开发的技术博主。在伺服控制、机器人关节定位等项目中电机编码器是决定系统精度与稳定性的核心传感器。很多朋友初次接触时会被增量式、绝对值、磁编码器、旋转变压器等名词绕晕网上资料也往往零散不成体系。本文将用最直白的语言结合原理图与代码带你彻底吃透电机编码器的工作原理、类型差异、接口协议与实战应用。无论你是自动化工程师、嵌入式开发者还是机器人爱好者都能从零开始构建一套完整的编码器知识体系并掌握如何用PLC或单片机读取其数据。1. 编码器电机系统的“眼睛”在深入细节之前我们首先要理解编码器在电机控制系统中的根本作用。想象一下你要控制一个机械臂到达某个精确位置如果不知道电机轴当前转了多少度、转速多快控制就变成了“盲操”根本无法实现精准定位。编码器就是安装在电机轴上用来实时反馈电机转子位置和速度信息的传感器。它是实现闭环控制如位置环、速度环不可或缺的反馈元件。根据测量原理和输出信号的不同编码器主要分为两大类增量式编码器输出的是相对位移信息。电机每转动一个固定角度就输出一个脉冲。通过统计脉冲数量可以知道转过的角度通过测量脉冲频率可以知道转速。它就像一把没有刻度的尺子只能告诉你“移动了多少格”但不知道“现在在第几格”。绝对值编码器输出的是绝对位置信息。每个位置都对应一个唯一的数字编码。即使系统断电再上电它也能立即告诉控制器“我现在在哪个绝对位置”。它就像一把有精确刻度的尺子可以直接读数。此外根据内部传感技术又可分为光电式利用光栅和光敏元件、磁电式利用磁铁和霍尔/磁阻元件和电容式等。网络热词中提到的“旋变编码器”旋转变压器是一种特殊的模拟式绝对值传感器通过模拟信号来表征角度具有极高的抗干扰性和可靠性常用于军工、航空航天及高端工业伺服。2. 核心工作原理深度拆解理解了分类我们深入到每一种编码器的内部看看它们是如何“看见”旋转的。2.1 增量式编码器A/B/Z相与正交解码这是最常见、成本较低的类型。其核心是一个刻有明暗相间栅格的光栅码盘光电式或磁极交替的磁环磁电式。当轴旋转时固定在转轴上的码盘随之转动固定不动的传感器如光电对管、霍尔元件就会检测到明暗或磁极的变化从而产生电脉冲信号。典型的增量式编码器输出三路信号A相和B相这是两路相位差90度的方波脉冲即正交信号。这是最关键的部分。通过检测A、B两相的先后顺序可以判断电机的旋转方向正转还是反转。同时对A相或B相的脉冲进行计数就能得到转过的相对角度每转脉冲数即PPR或CPR。很多高性能编码器还会对A、B相信号进行倍频如4倍频将一个物理脉冲周期细分为4个边沿进行计数从而将分辨率提高4倍。Z相零位信号电机每旋转一圈Z相输出一个脉冲。这个信号用于确定机械零位进行位置校准防止多圈累计误差。正交解码原理 我们可以通过单片机或专用芯片如STM32的定时器编码器接口来读取A、B相信号。其逻辑如下表所示A相边沿变化B相电平方向判断计数器动作上升沿低电平正转 (CW)加1上升沿高电平反转 (CCW)减1下降沿高电平正转 (CW)加1下降沿低电平反转 (CCW)减12.2 绝对值编码器独一无二的“身份证”绝对值编码器的码盘上有多圈同心码道每一条码道对应一个二进制位。所有码道的组合为每一个角度位置提供了一个唯一的二进制编码如格雷码其相邻位置只有一位变化可防止错码。因此控制器在任何时刻读取到的都是一个代表绝对位置的数字。根据输出接口绝对值编码器又分为并行输出每一位数据用一根线输出速度快但线缆多抗干扰差用于短距离、低位数。串行输出通过特定的通信协议如SSI、BiSS、Endat等逐位传输数据。这是目前的主流方式线缆少可靠性高传输距离远。现场总线输出直接集成Profibus-DP、CANopen、EtherCAT等总线接口成为网络上的一个节点。网络热词中提到的“三菱FX1N通过485读取伺服驱动绝对值编码器位置”通常就是伺服驱动器已经通过自身的高速接口如Endat从电机端的绝对值编码器读取了位置数据然后将其映射到MODBUS-RTU一种基于RS485的通信协议的保持寄存器中PLC再通过485总线读取这些寄存器来获得位置。2.3 旋转变压器与磁编码器旋转变压器一种模拟式角度传感器。其定子绕组输入正弦激励信号转子绕组会感应出两个幅值随角度变化的正余弦信号Sin, Cos。通过专用的RDC旋变数字转换器芯片对这两个信号进行解算可以得到高精度的绝对角度数字量。它无刷、坚固、耐高温高湿是恶劣环境下的首选。磁编码器利用霍尔效应或各向异性磁阻AMR/TMR原理检测旋转磁铁的磁场变化来测量角度。AS5047P就是一款非常流行的磁编码器芯片它通过SPI或ABI模拟增量输出接口提供14位高分辨率绝对位置。磁编码器结构简单、成本低、抗振动正越来越多地应用于消费电子和工业领域。3. 硬件接口与通信协议实战理解了原理下一步就是如何与控制器PLC、单片机连接并读取数据。这是项目落地的关键。3.1 增量式编码器接口与PLC读取对于增量式编码器PLC通常通过高速计数器HSC模块来读取A/B相脉冲。以西门子S7-1200为例对应热词“1200plc读取编码器脉冲程序”硬件接线将编码器的A相接至PLC的HSC输入点如I0.0B相接至另一输入点如I0.1电源和地线接好。注意选择PNP源型还是NPN漏型需与PLC输入类型匹配。PLC组态在TIA Portal软件中对使用的输入点进行硬件配置将其功能定义为“高速计数器”并选择工作模式如“A/B相正交计数器1倍频或4倍频”。编程读取在程序中可以直接使用系统提供的“CTRL_HSC”指令块来控制和读取高速计数器的当前值。一个简化的SCL语言示例片段用于读取计数值并计算转速// 假设HSC1已组态为4倍频正交计数编码器每转1000脉冲(PPR) PROGRAM Main VAR hsc1_PV : DINT; // 当前计数值 speed_RPM : REAL; // 转速单位RPM lastTime : TIME; lastCount : DINT; sampleInterval : TIME : T#100MS; // 采样间隔100ms END_VAR // 每隔100ms执行一次 IF (lastTime sampleInterval) T#0S THEN // 读取当前计数值 (实际中通过“CTRL_HSC”指令更新) hsc1_PV : “HSC_1”.CV; // 计算脉冲差值 deltaCount : hsc1_PV - lastCount; lastCount : hsc1_PV; // 计算转速: (deltaCount / (4*1000 PPR)) / (0.1/60) RPM // 4是4倍频1000是编码器PPR0.1是100ms换算为小时 speed_RPM : (deltaCount / 4000.0) * 600.0; lastTime : lastTime sampleInterval; END_IF;3.2 绝对值编码器与串行通信对于串行绝对值编码器我们需要实现对应的通信协议。以SPI接口读取AS5047P磁编码器为例单片机环境// 文件as5047p.c #include “as5047p.h” #include “spi.h” // 你的SPI驱动 // AS5047P 命令定义 #define AS5047_READ_CMD 0x4000 // 读角度命令第14位为1读 #define AS5047_ANGLE_REG 0x3FFF // 角度寄存器地址 // 函数通过SPI读取AS5047P的绝对角度值 uint16_t AS5047P_ReadAngle(void) { uint16_t command AS5047_READ_CMD | AS5047_ANGLE_REG; uint16_t received_data 0; uint16_t angle 0; // 1. 拉低片选 AS5047_CS_LOW(); // 2. 发送读命令16位 received_data SPI_TransmitReceive16(command); // 3. 发送空数据以读取角度值16位 angle SPI_TransmitReceive16(0x0000); // 4. 拉高片选 AS5047_CS_HIGH(); // 5. 校验数据可选AS5047P返回的数据中最高两位是奇偶校验和帧错误位 if ((angle 0xC000) 0) { // 检查错误标志位 // 提取低14位有效角度数据 (0~16383 对应 0~360度) return angle 0x3FFF; } else { return 0xFFFF; // 返回错误值 } } // 函数将原始值转换为角度度 float AS5047P_ToDegrees(uint16_t raw_angle) { return ((float)raw_angle / 16384.0) * 360.0; }对于通过RS485如MODBUS读取伺服驱动器内编码器值的情况流程是PLC主站向伺服驱动器从站发送符合MODBUS-RTU格式的查询帧请求保持寄存器的值。驱动器响应包含位置数据的帧。你需要查阅具体伺服驱动器的通信手册确定位置数据映射的寄存器地址。4. 环境准备与开发要点在动手开发前做好以下准备能避开很多坑电气环境电源确保编码器供电电压稳定、纹波小。模拟编码器如旋变对电源质量更敏感。接地信号地线要单独、良好接地避免与电机动力地产生共模干扰。线缆对于高速脉冲或串行通信使用双绞屏蔽线屏蔽层单端接地。控制器选型单片机如需处理高速增量编码器选择带正交编码器接口的定时器如STM32的TIM1/TIM2。对于绝对值编码器需具备对应的通信外设SPI, I2C, UART。PLC确认PLC本体或扩展模块支持高速计数器并了解其最高计数频率是否满足电机最高转速要求。编码器参数确认分辨率增量式的PPR每转脉冲数绝对值式的位数如12位、17位。输出类型推挽、集电极开路、差分如RS422。接口协议SSI、BiSS、SPI的时钟极性、相位等。机械安装同心度、轴与孔径的配合避免径向和轴向应力。5. 常见问题与深度排查指南在实际应用中你会遇到各种问题。下面是一个系统的排查清单问题现象可能原因排查步骤与解决方案PLC/单片机计数不准、漏数1. 脉冲频率超过计数器上限。2. 电气干扰严重。3. A/B相序接反。4. 电源电压不足或波动。1.计算验证电机最高转速(RPM) * PPR / 60 最高频率(Hz)。确保小于计数器频率上限。2.硬件检查用示波器观察A、B相信号波形是否干净。加强屏蔽信号线远离动力线。3.交换测试交换A、B相接线看计数方向是否反了。4.测量电源在编码器端测量供电电压确保在额定范围内。绝对值编码器通信失败1. 波特率、数据位、停止位设置错误。2. 协议帧格式错误。3. 线路过长或终端电阻未加。4. 芯片或驱动器地址错误。1.核对手册逐字核对通信参数。使用USB转串口工具配合串口助手软件先与编码器进行“握手”测试。2.分析帧抓取通信波形或数据与手册示例帧对比。3.检查物理层RS485长距离需加120Ω终端电阻。检查A/B线是否接反。4.确认地址MODBUS从站地址、SPI的片选信号是否正确。上电后位置值跳变、不准1. 增量编码器未找零Z相。2. 绝对值编码器多圈数据丢失电池供电。3. 机械安装松动。4. 磁编码器附近有强磁场干扰。1.执行回零启动时让电机转动寻找Z相信号。2.检查电池对于带电池的多圈绝对值编码器检查电池电压。考虑选用机械多圈如齿轮组或真绝对值多圈编码器。3.紧固安装检查编码器与轴的锁紧螺丝、联轴器。4.远离干扰源让磁编码器远离电机、变压器等强磁设备。高速时数据不稳定1. 控制器处理速度跟不上。2. 中断优先级被抢占。3. 信号边沿质量差振铃。1.优化代码将解码放在硬件定时器中断或DMA中主循环只读取结果。避免在中断内进行浮点运算等耗时操作。2.调整优先级提高编码器中断的优先级。3.硬件整改在信号线上并联一个小电容如几十pF到地或串联一个小电阻以改善信号完整性需谨慎可能影响边沿速度。6. 工程实践与选型建议掌握了原理和排错如何在项目中做出最佳选择和应用增量式 vs 绝对值式成本与复杂度增量式成本低电路简单但需上电回零断电位置丢失。绝对值式成本高接口复杂但即上电即用无累计误差。选型决策对于连续旋转、无需绝对位置的应用如调速风机、传送带增量式足够。对于需要精确定位、且可能断电的应用如机械臂、数控机床刀库必须选用绝对值编码器。光电式 vs 磁电式环境适应性光电式精度高但对灰尘、油污、冷凝敏感。磁电式如AS5047P耐污垢、抗振动但在强磁场环境和极端高温下可能受影响。选型决策洁净室内设备、高精度测量可选光电式。户外设备、机器人关节、汽车等环境可选磁电式。系统集成最佳实践信号隔离在工业现场尤其是驱动大功率电机的场合强烈建议在编码器信号进入控制器前使用信号隔离模块以切断地环路保护控制器端口。软件滤波对读取到的位置或速度值进行软件滤波如一阶低通滤波、滑动平均滤波可以平滑噪声但会引入相位滞后在高速响应系统中需权衡。溢出处理对于增量编码器的计数器无论是16位还是32位都要考虑计数溢出回绕的情况。在计算差值时使用有符号整型并正确处理溢出。安全设计在关键安全应用中考虑使用双编码器冗余设计或使用带有安全功能如Safe Torque Off, STO和集成安全编码器协议的驱动系统。从简单的脉冲计数到复杂的多圈绝对值通信编码器技术是连接物理运动与数字世界的桥梁。希望这篇近万字的详解能帮你建立起从传感器原理到代码实现的完整知识链。下次当你面对一个电机控制项目时可以清晰地分析需求是需要低成本的速度反馈还是高可靠的绝对定位环境是洁净还是恶劣通信距离有多远回答好这些问题编码器的选型和应用自然水到渠成。动手实践时务必从最简单的“点灯”读取到数据开始逐步增加功能并用示波器这个“工程师的眼睛”来验证你的信号这是排查疑难杂症最有效的手段。