队伍今年选了电赛控制类,主控用安路EG4S20,三路PWM驱动直流电机做闭环调速。空载时示波器看波形很干净,一挂上电机就出现明显抖动,编码器反馈也跟着跳。我们怀疑是死区时间没配好导致上下桥直通,也有人说是电机地弹把FPGA的IO参考地拉偏了。手头只有万用表和普通示波器,想请教有电赛经验的学长,这种问题该从电源、隔离还是PWM死区参数入手排查?
2026年电赛FPGA控制题,用国产安路板子做多路PWM电机闭环,为什么波形一接负载就抖,是死区没设还是电源地弹?
4 个回答

先别急着动死区参数。空载干净、带载就抖,这个现象更像是共地/供电回路的问题,而不是单纯的死区。死区没配好通常表现为上下桥直通、驱动芯片发烫甚至炸管,波形是固定的尖峰畸变,不会『一挂电机就抖、编码器也跟着跳』这么有规律地随负载变化。
建议的排查顺序:第一步,把电机供电和FPGA/驱动的逻辑供电彻底分开,用独立电源或者至少单独一路LDO给板子供电,电机那路加足够大的电解电容加高频陶瓷电容。第二步,检查地线拓扑,别让电机大电流从FPGA的GND引脚附近流回电源,驱动板和主控板之间最好单点共地,或者用光耦/磁隔离把PWM和编码器信号隔开。第三步,示波器用差分或者把探头地线夹到FPGA的GND上,看电机启动瞬间IO参考地到底跳多少毫伏到多少伏,这一步最能定性。
死区参数可以顺手校一下,但优先级排在后面。安路的IP核或者你自己写的互补PWM,死区一般按驱动芯片和MOS的开关时间估,几百纳秒到1微秒量级,具体看你的栅极电阻和管子型号。如果你用的是集成H桥模块,死区往往已经在模块内部处理了,那你就更不该往这个方向钻。
编码器反馈跟着跳这点很关键:如果编码器电源和电机共用,电机换向的电流冲击会直接串到编码器供电上,计数自然乱。先给编码器单独干净供电,信号线远离电机线走。
一个常见的坑:很多人把示波器地夹夹在驱动板功率地上,结果看到的是地弹被放大后的假象,越看越慌。换成夹在FPGA数字地上再对比一次,问题往往就清楚了。
你们驱动板是分立MOS还是集成模块?这个决定了死区到底要不要你操心。
补充一句风险:排查时先断开电机,用电子负载或者功率电阻模拟负载,能把『电机本体引入的干扰』和『负载电流引起的供电塌陷』分开,省很多时间。

这个问题我按因果链帮你捋一遍,因为『死区还是地弹』其实是个伪二选一,真正的分界线在于:抖动是发生在PWM边沿(时间维度),还是发生在整个波形基准上(幅度维度)。你手头只有普通示波器和万用表,那就先用触发方式把这个分清楚,这是整条排查主线。
空载干净、带载抖,第一嫌疑是功率回路和信号回路共享了阻抗。电机一上电,启动电流是稳态的好几倍,这个电流流过你PCB上的地平面和电源走线,会在寄生电感和电阻上产生压降。FPGA的IO高低电平是相对于它自己的GND判断的,当这个GND被电机电流抬高或拉低,PWM的绝对电压就跟着晃,驱动芯片看到的有效电平也变了,严重时MOS会进入线性区发热。编码器同理,它的A/B相参考地也在抖,计数跳变就顺理成章了。
所以主线是:先证明地弹存在,再决定要不要碰死区。做法是让电机带载运行,示波器一个通道看FPGA某个IO的PWM,另一个通道看FPGA的GND对驱动板功率地的电压差,用两个探头做减法(普通示波器也能做,注意两个地夹别夹到不同电位上短路)。如果这个差值在换向瞬间有明显尖峰,比如几百毫伏以上,那地弹就是主因,死区怎么调都没用。
确认是地弹之后,取舍就来了:最省事的是加隔离,PWM走光耦或数字隔离器,编码器也隔离,代价是延迟和成本;其次是改地线拓扑,功率地和信号地单点连接,电机电流回路尽量短、粗、独立,别从主控底下穿;再其次是加吸收,电机端子并RC或TVS,母线加电解加陶瓷。这三条可以叠加,但顺序建议从拓扑改起,隔离是最后手段,因为隔离会引入新的传播延迟,闭环控制里要重新整定参数。
如果测下来地弹很小,才轮到死区。判断死区是否合理的办法不是看波形好不好看,而是看驱动芯片和MOS的温度、看母线电流有没有直通尖峰。死区太小会直通,太大会让低速时转矩脉动变大,闭环里表现为低速抖动。一般按驱动芯片手册给的开关时间加裕量来设,别凭感觉填。
学习路径上,这类问题最值得练的是『用有限仪器做定性判断』的能力,电赛现场你不可能有高端设备。养成先分维度、再定嫌疑、最后动手改的习惯,比背一堆参数有用。
你们现在电机和主控是同一块板还是两块板飞线连的?这个直接决定地线拓扑该怎么改。

先说结论:按你描述的现象,我压电源/地弹这边的概率更大,死区优先级往后放。理由很直接——死区没配对,症状是固定的:上下管直通、驱动发烫、波形上是边沿附近的固定尖峰,它不会挑负载,空载照样难看。而『空载干净、带载就抖』这个随负载出现的特征,指向的是电流路径上的共阻抗耦合。
不过别急着下结论,先做一次能定性的测量。万用表基本帮不上忙,得靠示波器。把探头地线夹到FPGA的GND(不是电机电源的地),探针点在PWM输出脚上,然后手动让电机堵转或突然加载,看这个『高电平』的绝对幅度是不是跟着往下塌或者往上顶。如果逻辑1从3.3V掉到2.5V甚至更低,那就是IO参考地在动,不用再纠结死区了。反过来,如果地很稳、波形也稳,只是驱动侧有异常,再回头查死区。
这里有个容易被忽略的风险:很多人为了『隔离』直接给电机和主控各用一套电源,但地还是连在一起,电流照样从信号地回流,隔离等于白做。真要做,就单点共地,或者干脆用光耦/数字隔离器把PWM和编码器都隔开。
还有个替代思路,成本很低:先把三路电机分时驱动,一次只跑一路,看抖动是否减轻。如果单路明显好转,基本可以确认是多路电流叠加把地抬起来了,接下来就是走线和去耦的问题,不是PWM参数问题。
顺带说,死区该配还是要配,但那是安全底线,不是这次抖动的解药。你们板子上电机供电那路有没有加足够大的电解加陶瓷电容?这个决定了后面排查往哪走。

我按一条主线给你捋,就是『谁是参考』这件事。FPGA输出PWM,它眼里的高电平是相对自己GND的;驱动芯片眼里的输入高电平,是相对它自己GND的;MOS开关的电流,又是在功率地上跑的。这三套地如果不干净地分开,就会出现你现在看到的现象。
空载的时候,电机不吃电流,功率地上的压降几乎为零,三套地基本等电位,所以波形干净。一挂负载,电机启动电流是稳态的好几倍,这股电流流过PCB走线的寄生电感和电阻,在功率地上产生一个瞬时压差。这个压差通过共地路径,把FPGA和驱动芯片的参考电位一起抬起来。于是PWM的绝对电压跟着晃,驱动芯片判高低电平的门限就被顶来顶去,严重时MOS进线性区,发热、抖动、编码器计数跳变,全都串起来了。
所以排查顺序不是从死区开始,而是从『证明地弹存在』开始。手头只有普通示波器,那就用单次触发抓电机启动瞬间,探头地夹FPGA的GND,看PWM脚的绝对幅度。这一步能定性,比猜有用得多。
确认是地弹之后,处理是有取舍的。彻底的做法是数字隔离,PWM和编码器都过隔离器,代价是多了器件、多了延迟,闭环带宽会受影响,电赛这种场合要算一下够不够。折中做法是改善地拓扑:电机大电流的回流路径别从主控地附近过,驱动板和主控板单点共地,电机供电那路加大电解和高频陶瓷电容就近吸收。这两种不是二选一,通常是先做后者,压不下去再上隔离。
至于死区,它解决的是上下管直通,是安全底线。死区没配好,空载就该出问题,不会等你挂负载。所以把它当独立的一件事去校,别和抖动混在一起查。
最后提醒一句,编码器反馈跟着跳,很可能是被同一股地弹带偏的,不一定是编码器本身坏了。先把地的问题解决,再看编码器,能省很多冤枉时间。你们三路电机是共用一个电源还是各自独立供电?这个直接决定后面是改走线还是必须上隔离。
发表回答
登录后可在本页底部提交回答