机器人关节控制为什么绕不开 FPGA?ZYNQ 实时闭环拆解
先说清一句话,免得这个标题被当成口号:关节控制不是非 FPGA 不可。桌面级机械臂、低速协作机器人,用 MCU 加专用驱动芯片就能做得很稳。真正"绕不开"的,是一组具体指标——电流环跑到 20kHz、六轴共用一个控制周期、同步抖动要求压在 1μs 以内。到了这一档,MCU 的定时器和中断响应开始成为瓶颈。
这篇拆的就是这一档:一块 ZYNQ 上,实时闭环的每一段分别落在 PS 还是 PL,50μs 的控制周期里各段各占多少时间,抖动从哪里来、又怎么被压下去。
顺带说明一句:同一块 ZYNQ 平台,前面聊工业相机那篇算的是带宽账(几路相机、多少像素、DDR 够不够),这篇算的是时序账(周期、抖动、相位对齐)。同一块板子,两种完全不同的算法。
一、先把"绕不开"限定在指标上
一句话结论:判断需不需要 FPGA,看的是控制周期和抖动预算,不是看关节有几个。
不同档位的关节控制,对实时性的要求差异很大:
| 应用档位 | 电流环频率 | 控制周期 | 抖动预算 | 常见平台 |
|---|---|---|---|---|
| 桌面级、教学机械臂 | 5~10kHz | 100~200μs | 10μs 级 | MCU + 集成驱动 |
| 协作机器人、轻载 | 10~16kHz | 60~100μs | 2~5μs | 高性能 MCU / MCU+DSP |
| 六轴工业臂、力控 | 20kHz | 50μs | 1μs 以内 | FPGA 或 SoC 的 PL 侧 |
| 高动态、双编码器、拖动示教 | 20kHz 以上 | 50μs 以内 | 亚微秒 | FPGA + 硬实时总线 |
差别不在"算得多快",而在"每一次都必须在同一时刻算完"。MCU 的平均性能往往够,问题出在最坏情况:中断被更高优先级任务插队、Cache 未命中、DMA 抢总线,任何一次延迟超标,都会在 PWM 上留下一个畸变的周期。
所以判断标准可以写得很具体:如果电流环周期是 50μs、允许的周期偏差不超过 1μs,也就是 2%,那就该把这一段放进逻辑里做,而不是靠调度去赌。
二、四层闭环,分别落在谁身上
一句话结论:关节控制不是一个环,是四个时间尺度差两个数量级的环,必须分层落位。
| 控制环 | 典型频率 | 周期 | 执行位置 | 关键约束 |
|---|---|---|---|---|
| 电流环 | 20kHz | 50μs | PL(逻辑) | 与 PWM 中心对齐采样 |
| 速度环 | 1~2kHz | 500~1000μs | PL 或 PS | 用电流环的输出做内环 |
| 位置环 | 500Hz~1kHz | 1~2ms | PS | 受编码器时延影响 |
| 轨迹规划 | 100~500Hz | 2~10ms | PS | 与上位机、示教器通信 |
分层的原因是时间尺度:电流环要处理的是毫秒以下的电磁动态,位置环处理的是机械动态,两者混在一个循环里,要么电流环被拖慢,要么位置环被切得太碎。
工程上常见的错误是把四层都塞进一个 1ms 的任务里,看起来"统一调度很简洁",实际结果是电流环的有效频率只有 1kHz,力矩纹波明显,关节低速爬行时能听出抖动。
还有一个常被混用的概念要拆开:控制频率和闭环带宽不是一回事。20kHz 的控制频率,对应的电流环闭环带宽通常在 1~2kHz,大致是 PWM 频率的 1/10 到 1/20。带宽决定力矩响应有多快,控制频率只决定"多久算一次"。想把带宽提上去,靠的是提高 PWM 频率、压缩采样与计算的延迟,而不是把循环跑得更密——这一点在调机阶段特别容易被搞反。
三、50μs 里到底要干多少活
一句话结论:算力不是瓶颈,时间预算和并行度才是,先把 50μs 拆开看。
以六轴、每轴三相电流采样、20kHz 电流环为例,一个周期内的动作大致是:
| 环节 | 耗时(单轴) | 可否并行 | 说明 |
|---|---|---|---|
| 三相电流 ADC 采样与转换 | 1~2μs | 六轴可并行 | 采样点须在 PWM 中心 |
| Clarke / Park 变换 | 0.2~0.5μs | 是 | 用 DSP 切片流水实现 |
| 电流 PI 调节(d/q 双轴) | 0.3~0.8μs | 是 | 含抗积分饱和与解耦 |
| 反变换 + SVPWM 计算 | 0.3~0.6μs | 是 | 含死区补偿 |
| 编码器协议解码 | 2~3μs | 与上面并行 | 见第五节 |
| 保护判决(过流/过压) | <0.2μs | 是 | 与 PWM 同步 |
| 与上位机/总线交换数据 | 不定 | 后台 | 不能占用周期内时间 |
单轴串行做下来大约 3~5μs,六轴串行就是 20~30μs,占掉 50μs 的一半以上,余量很薄。改成六轴完全并行后,逻辑资源按六份复制,周期内占用可以压到 5μs 以内,剩下 90% 的时间是余量。
这就是 PL 的第一个价值:并行是空间换时间,不是靠更快的时钟。六路电流环同时跑,天然比一个循环轮流跑更确定。
顺便算一笔很多人误判的账:六轴 × 三相 × 16bit × 20kHz,数据量是 5.76Mbps,也就是约 0.72MB/s。这个量级对任何总线都算不上压力。所以关节控制的主要矛盾从来不是带宽,而是时序——这也正是它和相机、采集类应用的差别所在。
四、抖动:平均延迟可以补,抖动补不了
一句话结论:控制系统的死敌不是延迟,是延迟的不确定性。
平均延迟是可以通过前馈、相位补偿、延时观测器去修的。抖动不行,因为下一次抖多少、往哪抖,事先不知道。
几个量级的对比:
- 通用操作系统下的中断响应,抖动在几十微秒量级;
- 实时操作系统(RTOS)下,可以压到几微秒;
- 逻辑电路里,路径延迟是确定的,抖动通常是几个时钟周期,100MHz 时钟下就是几十纳秒。
50μs 的周期里,5μs 的抖动意味着 10% 的周期偏差。这个偏差会直接变成 PWM 占空比的误差,进而变成力矩纹波。表现出来就是:低速时关节爬行、静止时有轻微嗡鸣、力控时接触力不稳。
所以讨论"要不要 FPGA",更准确的说法是讨论"能不能接受这种抖动"。接受不了,就只能把时间敏感的部分下放到逻辑里。
五、编码器反馈:时延藏在协议里
一句话结论:编码器不是"读一个数",它的时延、分辨率、协议解码方式都会进控制环。
工业关节常用绝对式编码器,接口以 BiSS-C、EnDat 2.2、多摩川为主。以 BiSS-C 为例,常见时钟 10MHz、单圈 23 位:一帧包括起始位、ACK、23 位数据和 6 位 CRC,合计 33 位左右,传输时间约 3.3μs;如果还带 12 位多圈信息,数据位变成 35 位,一帧约 4.6μs。
这个三四微秒不是小事:
- 它意味着位置数据天然滞后于采样时刻,位置环设计时必须把这个滞后算进去;
- 如果多轴共用一条编码器总线轮流读,时延会累积,六轴就是十几微秒;
- 解码放在 PL 里,可以多路并行,每轴独立时钟,时延固定可预测。
双编码器(电机端 + 关节端)是另一个话题:两个编码器的差值能观测出减速器的柔度与回差,用于力矩前馈和振动抑制。但它要求两路数据在同一时刻对齐,这对采样触发和时戳的要求又高一层。
工程上有个容易被忽略的点:解码出来的位置值要带时间戳,控制算法用的是"这个值是什么时候的",不是"什么时候读到的"。没有时戳,补偿就无从谈起。
六、多轴同步:EtherCAT 的 125μs 与相位对齐
一句话结论:多轴同步的关键不是通信速率,是所有轴在同一条时间基准上采样和执行。
工业机器人常用 EtherCAT 做关节伺服总线,典型周期 125μs,六轴加 IO 从站在一个周期内完成数据交换。100Mbps 的物理层,一帧几百字节,传输本身只占几十微秒,剩下的都是处理与转发。
真正决定同步质量的是分布式时钟(DC):
- 从站的本地时钟与主站基准对齐,偏差控制在亚微秒级;
- 采样时刻按 DC 基准对齐,而不是"收到帧就采样";
- 控制周期的起点、采样点、PWM 更新点,三者在同一条时间轴上。
如果这三者不对齐,会出现一种很难查的故障:单轴看指标正常,六轴联动时轨迹有微小畸变。原因是各轴的动作在时间上错开了几微秒,叠加到末端就是毫米级偏差。
这也是 PL 侧的第二个价值:它能提供一条确定的时间轴,让采样、计算、输出都挂在这条轴上,而不是挂在"任务什么时候被调度到"上。
七、保护:毫秒级的软件保护挡不住短路
一句话结论:过流、编码器断线这类故障,必须在逻辑里用微秒级响应切断,不能等软件巡检。
功率器件短路时,电流上升速度可以用 di/dt = U/L 估:以 400V 母线、0.5~1mH 的伺服电机电感算,大约是每微秒 0.4~0.8A;低电感的盘式或空心杯电机能把这一项抬到每微秒数安甚至十几安。而功率器件的短路耐受时间通常只有 10μs 量级——软件巡检周期如果是 1ms,等它发现,已经晚了两个数量级。
逻辑里的保护通常是这样的:
| 故障类型 | 检测方式 | 响应时间 | 动作 |
|---|---|---|---|
| 相电流过流 | 比较器 + 逻辑判决 | <1μs | 封锁 PWM 输出 |
| 母线过压 | 分压采样 + 阈值 | 几微秒 | 封锁 + 泄放 |
| 编码器断线/CRC 错 | 协议层校验 | 一个帧周期 | 停机并上报 |
| 过温 | 传感器采样 | 毫秒级 | 降额或停机 |
要注意的是,硬件保护和安全功能(如 STO 安全转矩关断)是两层不同的东西:前者是保护设备,后者是保护人,后者需要独立的安全链路和认证,不能拿普通逻辑的保护当安全功能用。
八、分工:整机厂定什么,板卡方定什么
一句话结论:整机厂定关节指标与控制策略,板卡方定时序实现与硬件边界。
| 事项 | 整机厂定死 | 板卡/核心板方来定 |
|---|---|---|
| 关节指标 | 额定与峰值力矩、转速、带宽、过载倍数 | 电流采样方案、PWM 频率上限、驱动接口 |
| 控制结构 | 四层闭环的频率分配、是否要力控 | 逻辑流水划分、时序约束、资源分配 |
| 反馈方案 | 编码器类型、分辨率、是否双编码器 | 协议解码实现、多路并行、时戳机制 |
| 总线 | EtherCAT/其他、周期、从站数量 | 接口实现、DC 同步、周期内时序 |
| 安全 | 安全等级、STO 是否必需 | 保护判决逻辑、故障上报路径 |
这张表里最容易扯皮的是"控制结构"那一行。整机厂通常只给"电流环 20kHz",不说四层怎么分;板卡方按自己的经验分了,最后发现和整机厂的轨迹规划节奏对不上,返工。
九、落到平台:ZYNQ 上怎么切
一句话结论:ZYNQ 的价值在于把"确定的时间"和"灵活的逻辑"放在一颗芯片里,PS 管规划、PL 管时序。
以 ZYNQ 的典型切分为例:
- PL 侧:三相电流采样触发、Clarke/Park 变换、电流 PI、SVPWM、死区补偿、编码器协议解码、过流保护、PWM 输出。这些都必须挂在同一条时钟与同一条时间轴上。
- PS 侧:轨迹插补、状态机、故障处理策略、EtherCAT 协议栈或主站、参数管理与上位机通信。
这样切的好处是故障域清楚:PL 挂了,PWM 立刻封锁;PS 挂了,PL 还能维持最后一拍的安全状态。
资源上,六轴 FOC 加上编码器解码和保护逻辑,在 7Z020 这一档(资源量级约为 8.5 万逻辑单元、220 个 DSP,具体以所用器件手册为准)上是可以放下的,前提是流水设计合理、不做过度并行。如果还要叠力控、视觉或更复杂的振动抑制,就得往上走一档平台。
笃远电子的 ZYNQ 核心板方案是 PBC7Z020G,采用 JFM7Z020,管脚兼容原 XC7Z020,工业温域设计。对做关节控制器的团队来说,这类核心板解决的是供电、DDR、时钟树和接口电平这些基础问题,省下来的时间可以放在时序约束和闭环调试上——而后者恰恰是这类项目真正花时间的地方。
需要说清的是:核心板保证"平台能承载",保证不了"闭环调得稳"。电流环的带宽、抖动的抑制、编码器时延的补偿,这些都要在整机上一点点调出来。
十、几个常被问到的问题
问:六轴关节控制需要多大的逻辑资源?
按 20kHz 电流环、每轴独立流水来算,六轴 FOC 加编码器解码和保护逻辑,7Z020 这一档能放下。资源紧张的是并行度——想要每轴完全独立、不留共享,就要按六份复制 DSP 与乘法器。
问:能不能用高性能 MCU 直接做 20kHz 电流环?
能做,但要接受抖动。MCU 在无中断干扰、代码与数据都放 TCM、DMA 不抢总线的前提下,周期偏差可以做到几微秒;一旦叠加通信、文件系统或其他中断,最坏情况就不可控。要求 1μs 以内,通常要上逻辑。
问:EtherCAT 主站放在 PS 还是 PL?
看周期。125μs 周期、六从站,PS 上的协议栈配合专用 MAC 通常够用;如果要压到 62.5μs 或更短,且要求抖动极小,主站的收发与调度放进 PL 更稳。
问:双编码器是必须的吗?
不是必须,但它是解决"减速器柔度导致的位置误差"和"末端振动"的有效手段。单编码器方案要靠模型补偿,参数随温度、磨损变化;双编码器直接测出差值,补偿更直接。
问:为什么工业相机那篇讲带宽,这篇讲抖动?
因为瓶颈不同。相机是多路数据涌入,算的是 DDR 与接口带宽;关节控制是每一次都要准时,算的是周期与抖动。同一块 ZYNQ,PL 在前者做预处理,在后者做硬实时,两者的设计重点几乎没有重叠。
十一、收尾
回到标题那句话:关节控制"绕不开"的不是 FPGA 这个器件,而是"确定性"这件事。
当电流环要跑到 20kHz、六轴要在同一条时间轴上动作、抖动要压进 1μs,确定性就只能从逻辑里拿。ZYNQ 这类平台之所以常用,是因为它把 PS 的灵活和 PL 的确定放在一起,规划归规划,时序归时序。
判断一个方案行不行,问三个问题就够:电流环周期多少、最坏抖动多少、六轴采样是否同一时刻。三个数答得出来,方案就是可信的;答不出来,后面调机时一定会补上这一课。
相关平台规格与资料,可以在笃远电子官网查阅。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)