1. 课程导入

在运动控制、伺服驱动、机器人关节、数控机床和新能源电驱等系统中,控制器需要实时知道电机转子或执行机构的位置与速度。常见的位置反馈器件有两类:一类是增量式或绝对式编码器,另一类是旋转变压器(Resolver)。前者输出数字脉冲或串行位置数据,后者输出与转子角度相关的模拟正弦/余弦信号。FPGA 由于具备并行处理、确定性时序和灵活接口能力,常被用作编码器与 Resolver 的接口核心,完成信号采集、解码、角度计算、速度估计和故障检测,并把结果送给 MCU、DSP 或运动控制算法。

本课程围绕“FPGA 编码器与 Resolver 接口”展开,目标不是只讲某一个 IP 核,而是建立从物理信号到数字角度、从接口时序到控制闭环的完整认知。学完本课程后,你应当能够读懂编码器与 Resolver 的电气接口,理解 FPGA 侧解码与计算的实现路径,能够根据系统指标选择接口方案,并具备基本的调试与排障能力。

本节核心问题:为什么位置反馈需要 FPGA?编码器和 Resolver 分别输出什么信号?FPGA 在其中承担哪些角色?后续 30 章将如何一步步展开?

一、学习目标

本课程的学习目标分为四个层次。第一层是“看得懂”:能够识别增量编码器 A/B/Z 信号、绝对编码器 BiSS/SSI/EnDat 等串行协议、Resolver 的 SIN/COS/EXC 三组模拟信号,理解其电气特性和时序关系。第二层是“算得清”:掌握四倍频鉴相、位置计数、串行帧解析、Resolver 反正切解调、角度跟踪观测器(Angle Tracking Observer)等核心算法。第三层是“做得出”:能够用 Verilog/SystemVerilog 或 HLS 构建可综合的接口模块,完成跨时钟域处理、滤波、标定和误差补偿。第四层是“调得动”:能够使用示波器、逻辑分析仪、ILA 和上位机工具定位信号完整性、时序违例、角度跳变和速度噪声等问题。

  • 理解编码器与 Resolver 的物理原理与输出信号形式;
  • 掌握 FPGA 侧接口的采样、解码、计数、角度解算与速度估计方法;
  • 熟悉 A/B/Z、SSI、BiSS、EnDat、PWM 激励、ADC 采样等关键接口;
  • 能够分析分辨率、带宽、延迟、噪声和误差对控制性能的影响;
  • 具备从需求到方案、从代码到板级调试的工程实践能力。

二、核心概念

编码器(Encoder):把机械角位移转换为数字量的传感器。增量式编码器输出 A、B 两路正交脉冲和 Z 路零位脉冲,通过计数和鉴相获得相对位置;绝对式编码器通过并行或串行接口直接输出唯一位置码,上电即知绝对角度。

旋转变压器(Resolver):一种模拟式角度传感器,由激励绕组和两组正交输出绕组构成。转子旋转时,SIN 与 COS 绕组感应出包络随角度变化的调制信号,通常表示为 SIN=sin(θ)·sin(ωt),COS=cos(θ)·sin(ωt)。FPGA 通过激励生成、同步采样和反正切运算解出 θ。

角度跟踪观测器(ATO):Resolver 解码中常用的闭环角度估计结构。它把 SIN/COS 采样值与当前估计角度的正余弦相乘作差,得到误差信号,再经 PI 调节器和积分器输出角度与速度,具有平滑、抗噪和可输出速度的优点。

跨时钟域(CDC):编码器或 ADC 采样时钟与 FPGA 系统时钟往往不同源,需要在 FPGA 内做同步、握手或异步 FIFO 处理,避免亚稳态和计数错误。

分辨率、精度与重复性:分辨率是最小可分辨角度,精度是测量值与真实值的偏差,重复性是多次测量的一致性。三者不能混为一谈,选型时要同时关注。

三、整体框架

本课程按“信号—接口—算法—实现—调试—应用”的主线组织,共 30 章。前段建立传感器与信号基础,中段深入编码器接口和 Resolver 解码,后段进入 FPGA 实现、验证、标定与系统集成。下图给出课程整体知识框架与信号链路关系。

FPGA 编码器与 Resolver 接口:整体框架与信号链路 传感器层 增量/绝对编码器 旋转变压器 Resolver 霍尔/磁编码器 模拟前端与接口 差分接收/电平转换 激励放大/ADC 采样 隔离与保护 FPGA 处理层 解码/计数/帧解析 反正切/ATO/滤波 速度估计/故障检测 控制层 MCU/DSP 电流环/速度环 位置环 课程 30 章知识主线 基础篇 原理/信号/选型 编码器接口篇 A/B/Z/SSI/BiSS/EnDat Resolver 解码篇 激励/采样/ATO/标定 实现与调试篇 RTL/验证/ILA/系统集成 关键信号与数据流 A/B/Z 脉冲 正交/零位 串行帧 SSI/BiSS/EnDat SIN/COS 模拟调制信号 角度/速度 数字量输出 故障/状态 报警/诊断

从图中可以看到,传感器层输出的是物理信号,模拟前端负责把信号变成 FPGA 可采样的电平或数字码,FPGA 处理层完成解码、角度解算和速度估计,最终把角度、速度、状态送给控制层。课程后续章节会沿着这条链路逐段展开。

四、典型场景与案例

以伺服驱动器为例:电机轴上安装一台 Resolver,驱动器输出 10 kHz 正弦激励,Resolver 的 SIN/COS 反馈经隔离放大后送入 ADC,FPGA 以 1 MSPS 同步采样两路信号,在片内完成数字解调与 ATO 角度跟踪,输出 16 位角度和 16 位速度给 DSP。DSP 用该角度做 Park/Clarke 变换和电流环控制。若角度延迟过大,电流环相位裕度下降,电机发热和噪声增加;若速度估计噪声大,速度环会抖动。因此,FPGA 接口的延迟、分辨率和噪声直接决定控制性能。

另一个场景是增量编码器接口:编码器输出 5 V 差分 A/B/Z,FPGA 通过差分接收器转换为 3.3 V 单端信号,先做数字滤波和毛刺抑制,再进行四倍频鉴相和 32 位位置计数。Z 信号用于每转清零或校准。若 A/B 走线不等长或滤波过强,会出现丢脉冲或方向误判,导致位置漂移。

五、常见误区与复盘

误区一:只看分辨率,不看精度和延迟。高分辨率编码器如果安装偏心或信号噪声大,实际精度可能很差。

误区二:Resolver 解码只做开环反正切。开环反正切对噪声和采样误差敏感,高速时角度抖动明显,工程上更常用 ATO 闭环跟踪。

误区三:忽略跨时钟域。编码器脉冲或 ADC 数据未做同步,可能产生亚稳态和计数错误,且问题偶发、难复现。

误区四:不做标定和补偿。Resolver 的正余弦幅值不平衡、相位不正交、偏置误差都会引入角度误差,必须通过标定修正。

六、关键参数速查清单

参数/概念 典型范围 对系统的影响 关注点
编码器分辨率 1024~23 bit 决定最小角度步进 与精度区分
Resolver 激励频率 1~20 kHz 影响带宽与采样设计 与转速匹配
ADC 采样率 100 kSPS~5 MSPS 影响解调信噪比 同步采样
角度延迟 1~50 μs 影响电流环稳定 滤波与 ATO 带宽
速度估计带宽 100 Hz~2 kHz 影响速度环抖动 噪声与延迟折中
接口电平 RS-422/5 V/TTL 影响抗扰与距离 差分与隔离

七、FPGA 接口的典型代码结构

后续章节会给出完整 RTL,这里先建立顶层模块的划分概念。一个典型的编码器/Resolver 接口顶层通常包含时钟管理、输入同步、协议解码、角度计算、速度估计和寄存器接口。

module feedback_top (
    input  wire        sys_clk,        // FPGA 系统时钟
    input  wire        adc_clk,        // ADC 采样时钟
    input  wire        rst_n,
    input  wire [15:0] adc_sin,        // SIN 采样值
    input  wire [15:0] adc_cos,        // COS 采样值
    input  wire        enc_a,          // 编码器 A 相
    input  wire        enc_b,          // 编码器 B 相
    input  wire        enc_z,          // 编码器 Z 相
    output wire [31:0] position,       // 位置输出
    output wire [15:0] angle,          // 角度输出
    output wire [15:0] speed,          // 速度输出
    output wire        fault           // 故障标志
);
    // 1. 时钟与复位管理
    // 2. 输入同步与数字滤波
    // 3. 编码器四倍频鉴相与计数
    // 4. Resolver 解调与 ATO 角度跟踪
    // 5. 速度估计与故障检测
    // 6. 寄存器接口与输出选择
endmodule

这段结构不是最终实现,而是帮助你在学习每一章时知道“当前知识落在哪个模块”。例如学习 A/B/Z 时对应第 3 部分,学习 Resolver 时对应第 4 部分,学习跨时钟域时对应第 2 部分。带着模块位置去学,知识不会散。

学习建议:每学完一章,回到本节的框架图,标出该章对应的信号节点或处理模块。把“传感器—接口—算法—FPGA—控制”这条链路反复走通,比孤立记忆协议细节更有效。