第三章 FPGA在伺服控制中的角色:为什么用FPGA、FPGA vs MCU/DSP、FPGA的并行优势

3.1 为什么伺服控制需要FPGA?

做伺服控制这么多年,我经常被问到这个问题:「用MCU或者DSP不香吗?干嘛非得用FPGA?」

说实话,十年前我自己也这么想。那时候我刚入行,觉得STM32加个定时器就能搞定位置比较。结果呢?项目做到一半,客户要求把比较精度从1us提升到100ns。MCU的中断响应时间本身就几百纳秒了,根本扛不住。

伺服控制的核心痛点,说白了就三个字:快、准、稳

  • :位置比较的响应时间,要求纳秒级
  • :触发输出的抖动(jitter),要求皮秒级
  • :无论CPU负载多高,比较逻辑不能受影响

你想想看,MCU再快也是串行执行的。一个中断进来,要压栈、查表、比较、输出。这一套下来,几百纳秒就没了。FPGA呢?比较逻辑是硬件电路,信号从输入到输出,就几个门延迟的事。

核心结论:FPGA在伺服控制中的不可替代性,来自于它的硬件并行性和确定性延迟。

3.2 FPGA vs MCU/DSP:一场不公平的较量

我习惯把这三者的关系比作交通工具:

  • MCU 像自行车——灵活、便宜,但跑不快
  • DSP 像小轿车——专门为算法优化,跑得挺快
  • FPGA 像高铁——专线专用,准时准点

咱们直接看数据,这是我做的一个对比表:

对比项 MCU DSP FPGA
执行方式 串行(取指→译码→执行) 串行+硬件加速 全并行硬件
位置比较延迟 500ns~2us(含中断响应) 200ns~1us 5ns~20ns(纯门延迟)
触发输出抖动 ±50ns(受中断影响) ±20ns ±50ps(时钟抖动)
多轴扩展 需外扩芯片 有限(2~4轴) 轻松8轴以上
开发难度

看到这个表,你可能觉得FPGA完胜。但别急,我踩过坑——FPGA不是万能的

避坑指南:我曾经在一个项目中,试图用纯FPGA实现伺服控制环路(位置环+速度环+电流环)。结果呢?开发周期翻了三倍,调试到崩溃。后来改成「FPGA做位置比较+触发输出,DSP做控制算法」的架构,两周就搞定了。

3.3 FPGA的并行优势:到底「并行」在哪?

很多新手对「并行」的理解就是「同时干多件事」。嗯,这个说法没错,但太笼统了。咱们具体看看FPGA在伺服控制中到底并行在哪。

3.3.1 多通道并行比较

假设你有4个伺服轴,每个轴需要同时进行位置比较。用MCU的话,你得轮询4个编码器值,一个一个比较。FPGA呢?

// 这是4个并行的比较器,在FPGA中同时工作
always @(posedge clk) begin
    // 轴1比较
    if (encoder_pos_1 == compare_value_1)
        trigger_out_1 <= 1'b1;
    
    // 轴2比较(与轴1同时执行)
    if (encoder_pos_2 == compare_value_2)
        trigger_out_2 <= 1'b1;
    
    // 轴3比较(与轴1、2同时执行)
    if (encoder_pos_3 == compare_value_3)
        trigger_out_3 <= 1'b1;
    
    // 轴4比较(与轴1、2、3同时执行)
    if (encoder_pos_4 == compare_value_4)
        trigger_out_4 <= 1'b1;
end

你看,这4个if语句在FPGA里是同时执行的。每个比较器都是独立的硬件电路,互不干扰。

3.3.2 比较与输出并行

更关键的是,FPGA可以在同一个时钟周期内完成「读取编码器→比较→输出触发信号」的全流程。这在MCU/DSP里是不可能的——它们必须分步执行。

个人经验:我习惯把位置比较逻辑放在FPGA的「高速区域」,用200MHz以上的时钟驱动。这样每个比较周期只有5ns,触发输出的抖动可以控制在±50ps以内。这个精度,MCU想都别想。

3.3.3 流水线并行

除了空间上的并行,FPGA还能做时间上的流水线并行。比如:

  1. 第1个时钟:读取编码器值
  2. 第2个时钟:进行位置比较
  3. 第3个时钟:生成触发输出
  4. 第4个时钟:更新比较值(准备下一次比较)

这4个阶段在FPGA里是流水线执行的。每个时钟周期,都有一个新的编码器值进入流水线,同时有一个触发信号从流水线输出。吞吐量是单周期执行的4倍。

3.4 什么时候该用FPGA?

说了这么多,我总结一下我的判断标准:

  • 必须用FPGA的场景
    • 位置比较精度要求 < 100ns
    • 触发输出抖动要求 < 1ns
    • 同时控制4轴以上
    • 需要纳秒级响应的硬件保护
  • 可以考虑MCU/DSP的场景
    • 位置比较精度 > 1us
    • 单轴或双轴控制
    • 对抖动不敏感
    • 开发周期紧、预算有限

我的建议:别把FPGA当万能药。我见过太多人「为了用FPGA而用FPGA」,结果把简单问题复杂化了。记住:FPGA是手术刀,不是砍刀。用在刀刃上,它锋利无比;用错了地方,反而伤手。

3.5 本章知识体系

下面这张图,是我梳理的本章核心逻辑。你可以把它当作一个「决策地图」:

FPGA在伺服控制中的角色:知识体系 FPGA伺服控制 为什么用FPGA? 核心痛点:快、准、稳 硬件并行性 + 确定性延迟 纳秒级响应,皮秒级抖动 FPGA vs MCU/DSP 执行方式:串行 vs 并行 延迟:500ns vs 5ns 抖动:±50ns vs ±50ps 多轴扩展:2轴 vs 8轴+ FPGA并行优势 多通道并行比较 比较与输出并行 流水线并行 结论:FPGA是手术刀,不是砍刀 用在刀刃上锋利无比,用错了地方反而伤手

一个小技巧:如果你不确定项目该不该用FPGA,先问自己三个问题:1)延迟要求是否低于100ns?2)抖动要求是否低于1ns?3)轴数是否超过4个?只要有一个「是」,FPGA就是你的首选。

专注资料整理