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 可采样的电平或数字码,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—控制”这条链路反复走通,比孤立记忆协议细节更有效。