今年电赛控制题大概率还是多电机协同,我们队用安路EG4做舵机+编码器闭环,ModelSim仿真波形完美,上板后电机一加载就抖。怀疑是编码器信号没做同步、PWM死区没留够,也可能是电源噪声耦合进IO。想问问有电赛经验的人,这种仿真对、上板抖的典型坑一般怎么定位?逻辑分析仪抓哪些信号最快?
2026年电赛FPGA控制题,用国产安路EG4做多路舵机+编码器闭环,为什么仿真全对但上板就抖?
4 个回答

仿真全对说明逻辑本身大概率没问题,上板抖先怀疑三件事:编码器有没有做两级同步打拍、PWM死区够不够、地弹和电源噪声。抓波形的话,ILA挂编码器A/B相原始输入、同步后信号、PWM输出边沿,先看边沿有没有毛刺和相位差。个人感觉编码器没同步最常见。你们舵机供电是单独一路吗?

先别急着改RTL,直接在ILA上把编码器A/B相原始脚和同步打拍后的信号一起抓,看边沿是不是差了一拍或带毛刺。多半是没做两级同步,或者PWM死区没留够。顺手量下舵机供电和FPGA是不是共地。你们编码器信号是差分还是单端?

仿真全对、上板就抖,这个现象在电赛里太经典了,先别急着改逻辑。我的习惯是先分两类:一类是时序/跨时钟域问题,一类是电源和地的问题,这两类在ModelSim里都看不见。
第一类重点看编码器。编码器A/B相是从外部进来的异步信号,如果你的计数模块直接用系统时钟采它,边沿附近很容易采到亚稳态,仿真里因为没有真实的建立保持时间,永远不会复现。稳妥做法是两级打拍同步后再做边沿检测,有条件的话再滤几个周期的毛刺。
第二类看PWM和供电。舵机是感性负载,堵转或换向瞬间电流很大,如果舵机和FPGA共用一路电源、共地处理不好,地弹会把IO电平顶得乱七八糟。先量舵机供电和FPGA的GND之间有没有压差,再确认PWM死区够不够,多路舵机同时动作时尤其明显。
抓信号的话,ILA优先挂:编码器A/B原始输入、同步后信号、PWM输出边沿、以及一个软件计数器的值。看原始脚有没有毛刺,看同步前后差几拍,看PWM边沿有没有被干扰。一般一轮就能把范围缩小到某一类,然后再针对性改。

先说一个容易被忽略的点:安路的EG4和Xilinx那套在工具链上差别不小,很多人拿Vivado的习惯直接套,时序约束和IO配置没做全,结果也是「仿真对、上板抖」。所以除了大家都会提的编码器同步和死区,我建议你先确认两件事:一是时序约束里有没有把系统时钟、PWM相关时钟都约束到位,二是IO的驱动强度和上下拉配置,尤其是编码器输入脚,如果默认驱动太弱或者悬空没上拉,边沿会很脏。
排查顺序我一般这么走。第一步,先不动RTL,用ILA或者外接逻辑分析仪同时抓三组:编码器A/B的原始脚、打两拍之后的信号、PWM输出脚。看原始边沿是不是有毛刺、抖动,看同步后的信号有没有丢边沿或多计数。这一步能快速区分是输入脏还是逻辑错。第二步,如果编码器没问题,就把舵机单独拉出来,给它固定占空比、空载跑,看还抖不抖;如果空载稳、加载才抖,那基本就是电源和地的问题,重点量舵机供电和FPGA的GND之间有没有压差,多路同时动作时地弹会很明显。
死区这块提醒一下,舵机PWM其实死区要求不高,真正吃死区的是H桥驱动直流电机那种场景。如果你控制的是舵机,抖更可能是PWM频率或者分辨率不够,导致低速时占空比量化太粗,表现出来就是一顿一顿的。可以试试把PWM频率提到50Hz以上但别太高,同时提高计数分辨率。
还有个风险点:多路舵机一起动的时候电流峰值叠加,如果共用一个LDO,压降会让FPGA复位或者IO电平漂移。稳妥做法是舵机单独供电、单点共地。你们现在舵机和FPGA是共用一路电源,还是分开的?
发表回答
登录后可在本页底部提交回答