文章目录

编码器Z相信号的一圈脉冲捕获

发布于 2026-03-26 20:57:45 · 浏览 8 次 · 评论 0 条

编码器Z相信号的一圈脉冲捕获

增量式编码器通过A、B两相正交脉冲输出位置信息,而Z相(Index或Zero Mark)信号作为每转一圈仅出现一次的零位参考点,是实现绝对位置校准和消除累积误差的关键。准确捕获Z相信号不仅需要硬件接线正确,更依赖于严谨的逻辑判断。以下指南将详细拆解从信号特性分析到软件逻辑实现的全过程。


一、 理解Z相信号的物理特性

在编写捕获逻辑前,必须明确Z相的物理行为,这直接决定了算法的鲁棒性。

  1. 确认 Z相脉冲宽度。
    通常情况下,Z相脉冲宽度相当于A相的一个电气周期(360度电角度),或者是一个固定的窄脉冲。在某些高分辨率编码器中,Z相可能由多个方波组成,但中心位置是唯一的。

  2. 识别 电压类型。
    确认编码器输出是推挽式、集电极开路(NPN/PNP)还是差分信号(RS422)。差分信号能提供更强的抗干扰能力,建议优先使用。

  3. 对齐 ABZ相位关系。
    大多数标准编码器的Z相上升沿会与A相的特定状态(如低电平)在机械零点对齐。但在换相后,这种关系可能会反转,因此逻辑上不应仅依赖A相状态判断Z相,而应将其作为辅助验证。


二、 硬件接线与信号调理

稳定的信号输入是软件捕获的基础。干扰或边沿抖动会导致“多圈”计数错误。

  1. 连接 差分信号线。
    若使用差分编码器,接入 Z+Z- 信号至控制器的高速输入端。切勿只接 Z+ 而将 Z- 悬空,这会大幅降低共模抑制比。

  2. 配置 输入滤波。
    在控制器或PLC硬件组态中,设置 输入滤波时间常数。对于高速旋转应用,滤波时间应短于Z相脉冲的低电平持续时间;对于低速应用,可适当增大滤波值以消除抖动。

  3. 测量 边沿陡峭度。
    使用示波器观察 Z相上升沿和下降沿的时间。如果边沿过于平缓(上升时间超过微秒级),需检查线路阻抗匹配或增加终端电阻。


三、 基础脉冲捕获逻辑(上升沿检测)

核心目标是识别Z相从低电平变为高电平的瞬间,并触发计数器清零或置位动作。

下面是通用的上升沿检测逻辑流程:

graph LR A[开始] --> B[读取当前Z相状态
Current_Z] B --> C[判断 Current_Z = 1?] C -- 否 --> E[更新 Last_Z = Current_Z] C -- 是 --> D["判断 Last_Z = 0?"] D -- 否 --> E D -- 是 --> F["触发事件: 捕获成功"] F --> E E --> B
  1. 定义 状态变量。
    在程序中创建两个布尔变量:Z_Current(当前状态)和 Z_Last(上一周期状态)。

  2. 读取 物理输入。
    在每个扫描周期开始时, 物理输入点(例如 I_X0)的状态赋值Z_Current

  3. 执行 边沿逻辑判断。
    使用公式逻辑判断上升沿:
    $$ RisingEdge = Z\_Current \land \neg Z\_Last $$
    即:当前为1,且上一次为0。

  4. 更新 历史状态。
    在扫描周期结束前, Z_Current 的值传送Z_Last,为下一次比较做准备。


四、 高级精准定位(ABZ同步锁存)

仅捕获Z相的上升沿可能会存在±1个脉冲的偏差,因为Z相信号可能会在A相跳变的临界点出现。为了实现高精度的“零点对齐”,必须结合A、B相状态。

  1. 锁定 ABZ状态组合。
    当检测到Z相上升沿时,不要立即复位,而是读取 当前A相和B相的电平状态。

  2. 比对 标准相位表。
    根据编码器旋转方向,Z相有效时的AB相位是固定的。例如,正向旋转时Z相上升沿可能对应 A=0, B=1。

  3. 实施 校正逻辑。
    如果捕获到的AB状态与标准状态不符,说明发生了信号抖动或干扰。此时应丢弃 本次捕获信号,或记录 报警,防止误复位。

旋转方向 Z相上升沿时刻 A相电平 Z相上升沿时刻 B相电平 校准动作
正转 (CW) 0 1 执行 复位
反转 (CCW) 1 1 执行 复位
正转 (CW) 1 1 视为 干扰,忽略

五、 代码实现范例(PLC结构化文本)

以下是基于IEC 61131-3标准的结构化文本(ST)代码示例,展示了带AB校验的Z相捕获逻辑。

(* 定义变量 *)
VAR
    // 输入信号
    Encoder_Z AT %I0.0 : BOOL;
    Encoder_A AT %I0.1 : BOOL;
    Encoder_B AT %I0.2 : BOOL;

    // 内部状态
    Z_Last_Cycle : BOOL := FALSE;
    Z_Edge_Detected : BOOL := FALSE;

    // 输出控制
    Execute_Reset : BOOL := FALSE;
END_VAR

(* 1. 捕获Z相上升沿 *)
Z_Edge_Detected := Encoder_Z AND NOT Z_Last_Cycle;

(* 2. 更新历史状态 *)
Z_Last_Cycle := Encoder_Z;

(* 3. ABZ同步校验与复位触发 *)
IF Z_Edge_Detected THEN
    (* 假设正向旋转标准零点为 A=0, B=1 *)
    IF (Encoder_A = FALSE) AND (Encoder_B = TRUE) THEN
        Execute_Reset := TRUE; (* 触发计数器复位 *)
    ELSE
        (* 状态异常,可能是干扰或反向旋转,根据需求处理 *)
        Execute_Reset := FALSE;
    END_IF;
ELSE
    (* 脉冲消失后复位触发信号,形成单周期脉冲 *)
    Execute_Reset := FALSE;
END_IF

六、 常见问题处理

  1. 处理 信号震荡。
    如果在Z相高电平期间,Execute_Reset 信号多次跳变,说明逻辑中缺少了“自锁”或“单稳态”处理。确保 复位指令仅在一个扫描周期内有效,或者使用沿检测指令驱动复位功能块。

  2. 解决 停机时的漂移。
    当轴缓慢爬行或停止时,Z相可能恰好停留在上升沿附近,导致信号在0和1之间反复跳变。增加 迟滞逻辑:只有当Z相信号稳定保持高电平超过一定时间(例如10ms)后,才确认为有效信号。

  3. 计算 位置偏移量。
    如果机械零点与电气零点存在偏角,不要通过物理旋转编码器来校正。记录 Z相触发时刻的计数值,在软件中加减 该偏移量作为最终坐标。

评论 (0)

暂无评论,快来抢沙发吧!

扫一扫,手机查看

扫描上方二维码,在手机上查看本文