我们队已经能跑通单路电机PWM调速,但一上双闭环(速度环+电流环)就出现积分饱和、采样抖动,仿真能过、上板就震荡。现在纠结是回头补自动控制原理,还是先把Verilog里的定点乘加、饱和截断、流水线打拍写扎实?想听听有电赛控制题拿奖经验的人怎么排优先级,时间只剩两个月。
2026年电赛FPGA控制题备赛,队伍卡在「多路编码器测速+串级PID」上不去,该先补控制理论还是先把Verilog定点运算写稳?
6 个回答

先把结论放前面:两个月时间,别纠结「理论还是代码」,先做一件事——把采样周期和定点位宽定死,再谈环路。你们仿真过、上板震荡,八成不是PID公式不会推,而是采样节奏和数值范围没对齐。速度环采样周期一般是电流环的5到10倍,电流环建议跟PWM同频或分频到10k到20kHz这个量级;编码器测速用M/T法还是固定周期计数,直接决定你速度反馈的量化噪声。位宽上,先估算每级乘加后的最大绝对值,留够整数位,再决定小数位,别等溢出截断才回头改。至于理论,够用就行:把积分抗饱和(clamping或反算)和微分先行这两条补上,比通读教材快得多。Verilog侧同步练定点乘加流水线,用ILA抓实际波形跟仿真对齐。你们现在板子上是单路还是双路一起跑?先确认这个,再排下一步。

如果让我给一个偏工程视角的判断:这两个方向不是二选一,而是有先后依赖的。Verilog定点运算写不稳,你补再多控制理论也没法验证——因为震荡到底是控制器参数不对,还是乘法截断引入的直流偏置,你根本分不清。所以我建议前两周集中把数值通路做扎实:定点乘法的位宽推导、饱和截断的边界处理、流水线打拍后的时序对齐,这三样做透,你才有资格去调参数。具体可以这样做:先写一个纯组合的定点乘加模块,用仿真穷举几个极端值看截断行为;再插两级流水,确认延迟和你的环路时序对得上;最后上ILA,把电流环的给定、反馈、输出三条波形一起抓,跟仿真逐拍比。这一步过了,你会发现很多「震荡」其实是数值问题,不是控制问题。
反过来,理论也不能完全放。但优先级是:先搞懂采样周期怎么定、积分饱和怎么限、微分项为什么要滞后一拍或加低通。这三条是电赛双闭环的命门,剩下的频域设计、根轨迹那些,备赛阶段可以先放。风险在于:如果你只补理论不碰代码,两个月后大概率还是卡在「知道该怎么做但写不出来」;如果只写代码不补这三条控制常识,参数一调就发散,时间全浪费在试错上。所以我的排序是:数值通路两周打底,控制三要素同步穿插,最后四周合起来联调。你们电流环现在用的是硬件采样还是软件估算?这个决定了采样抖动的主要来源。

我按一条主线往下说,因为这个问题本质上是「先修哪段路」的问题,而不是「学什么」的问题。
先看因果链。双闭环上板震荡,可能的根因有三层:最上层是控制参数和环路结构,中间层是采样与执行的时间对齐,最底层是定点数值的精度与饱和行为。仿真能过、上板炸,说明最上层大概率没错——仿真里你用的是浮点、理想采样、零延迟,这些条件上板全变了。所以真正要先动的是中间层和底层,也就是采样周期、定点位宽、流水线延迟这三件事。理论不是不重要,而是它解决的是「参数该往哪调」,可你现在连「反馈值是不是准的」都没确认,调参就是盲调。
那具体怎么排?我的建议是前十天只做一件事:把电流环单独拎出来,固定一个简单给定,用ILA抓给定、反馈、输出、以及乘法器输入输出这几个点,确认从采样到PWM更新这条链路的延迟是确定且已知的。定点乘加的位宽推导要写下来,每一级小数位多少、什么时候饱和、饱和后是钳位还是回绕,都要有明确约定。这一步做完,你会发现「震荡」很多时候是延迟不对齐或者截断偏置造成的,跟PID参数关系不大。
接下来两周补控制三件事:积分抗饱和用反算或钳位实现,微分项加一阶低通或者干脆用微分先行,速度环和电流环的采样比定在5到10之间。这三条补完,你再去调参数,才有意义。剩下的时间做联调和鲁棒性测试,比如突加负载、给定阶跃、堵转恢复。
取舍上要清醒:自动控制原理那本书里,频域校正、根轨迹、状态空间这些,电赛控制题基本用不到,别被「补理论」三个字吓住,以为要系统重学。真正要补的就是采样、饱和、微分这几块,两三天足够。Verilog定点运算反而是硬功夫,流水线打拍、饱和截断、位宽推导,这些写不稳,后面所有调试都是空中楼阁。所以优先级很清楚:先稳数值通路,再补控制三要素,最后联调。你们现在编码器是增量式还是绝对式?这个会影响测速方案的选择,值得先确认一下。

先别急着啃自控教材。上板震荡十有八九是采样周期和定点位宽没定死,仿真浮点理想、上板定点有延迟,参数再对也白搭。先拿ILA把给定、反馈、输出三条波形抓出来,确认采样到PWM更新这条链路的延迟是固定的,再谈调参。Verilog定点乘加和饱和截断练扎实,比多背两章根轨迹有用得多。你们电流环采样是跟PWM同频还是分频?这个先确认。

我倾向先花一周半把数值通路钉死,再回头补控制理论,理由很实在:仿真过、上板炸,说明你根本分不清震荡是控制器参数问题还是截断引入的直流偏置——这两种故障现象长得一模一样,但修法完全不同。具体做法是先写纯组合的定点乘加模块,穷举几个极端值看截断和溢出的行为,心里有数之后再插两级流水,确认延迟跟你的环路时序对得上。这一步做完你会发现,很多所谓「震荡」其实是数值问题。
补理论也别通读教材,只挑三条:采样周期怎么定(速度环一般是电流环的5到10倍)、积分抗饱和用clamping还是反算、微分项为什么要滞后一拍或加低通。这三条是电赛双闭环的命门,其他章节等比赛完再看也不迟。
有个风险要提醒:如果你们把电流环采样和PWM更新放在同一个always块里,或者反馈值没做跨时钟域处理,那无论位宽算得多准都会抖。所以抓波形时务必把采样时刻和PWM更新时刻一起标出来,逐拍跟仿真对。两个月时间够用,但别两头都浅尝辄止。你们现在编码器测速用的是M/T法还是固定周期计数?这个直接决定速度反馈的量化噪声,值得先定下来。

个人感觉优先级很清楚:先把Verilog定点运算写稳,理论够用就行。因为定点写不稳,你连「反馈值准不准」都确认不了,调参就是盲调。重点练三样——定点乘加的位宽推导、饱和截断的边界处理、流水线打拍后的时序对齐。理论只补积分抗饱和和微分先行这两条,比通读教材快得多。等数值通路扎实了,再回头看控制参数该往哪调,那时候你才有判断依据。
发表回答
登录后可在本页底部提交回答