我们队报的是电赛控制类,主控用安路EG4S20,方案是6路舵机加激光测距做闭环。之前一直按50MHz晶振写分频和PWM周期,板子焊回来才发现是25MHz。现在改PLL倍频到100MHz后,舵机抖动明显、串口也偶发丢包。想问有经验的同学:赛前两周是该统一改成25MHz基准重算所有时序,还是用PLL倍频硬扛?改的时候哪些模块最容易连带出错?
2026年电赛FPGA控制题,队伍用安路EG4S20做「多路舵机+激光测距闭环」,赛前两周才发现板上晶振是25MHz不是50MHz,重写PLL和所有计数器来得及吗?
5 个回答

先说结论:两周时间,统一改成25MHz基准重算,比用PLL倍频硬扛稳得多。
你们现在的抖动和丢包,八成不是PLL本身不行,而是倍频之后时序约束没重做、串口采样点和舵机死区全被压缩了。安路EG4S20的PLL倍到100MHz一般能跑,但你要重新给时钟加约束、跑时序报告,还得确认全局时钟资源够用。两周内做这个,风险不小。
更省事的路径是:所有计数器直接按25MHz重算。PWM周期寄存器值翻倍,串口分频系数翻倍,激光测距的计时基准也翻倍。逻辑上只是常数变了,改起来快,而且时序余量比100MHz宽松,抖动会立刻好转。
优先动三处:PWM周期与死区、串口波特率分频、测距模块的计数基准。改完先单独测串口回环,再测单路舵机,最后合起来跑闭环。你们板子上的PLL现在具体是几路输出、锁相环有没有留裕量?这个确认下再动手比较稳。

两周时间,我的建议就一条:别跟PLL较劲,直接统一按25MHz重算。你们现在串口丢包、舵机抖,大概率不是倍频本身跑不动,而是倍到100MHz之后原来的约束没重做,采样点和死区全被压扁了。改法很土但快:PWM周期寄存器值乘2、波特率分频系数乘2、测距计时基准乘2,逻辑上只是常数变,时序余量反而比100MHz宽松。改完按串口回环、单路舵机、六路闭环的顺序单独验,别一上来就整机跑。你们板上PLL现在几路输出、有没有留裕量,确认下再动手更稳。

先说个容易被忽略的点:25MHz和50MHz差的不只是频率,是你整套时序的『基准尺』。很多人第一反应是PLL倍回去,觉得改一个参数最省事,但倍频等于把原来50MHz下的时序预算重新压一遍,约束、全局时钟资源、跨时钟域全得重看,两周内返工风险比改常数大得多。所以主思路还是统一用25MHz基准重算,PWM周期和死区值翻倍,串口分频翻倍,测距计数基准翻倍。
具体最容易连带出错的地方有三块。第一是串口采样点,分频系数改了之后采样时刻会偏,偶发丢包往往出在这;第二是舵机死区,原来按50MHz算的死区时间减半后,舵机可能出现轻微抖动或发热,别只盯着PWM占空比;第三是激光测距的计时基准,闭环里这个偏差会直接体现成距离跳变。
如果非要保留PLL,那至少得重新加时钟约束、跑一遍时序报告,确认建立保持都过,再留点裕量。但说实话赛前两周不建议赌这个。你们现在闭环是几路同时跑、测距更新率多少?这个决定了先改哪块。

这个问题其实暴露了一个更本质的习惯:做FPGA项目时,很多人把『时钟频率』当成一个可以随手改的全局参数,但它其实是所有时序逻辑的隐含前提。你们从50MHz切到25MHz,等于整个设计的『时间标尺』变了,所有基于周期数写死的逻辑都跟着漂移。
先看两条路。倍频到100MHz看起来改动最小,实际上代价最大:PLL要重新配、要重新约束,100MHz下原本宽松的路径可能变成关键路径,舵机抖动和串口丢包就是时序紧张的典型症状。而且倍频之后你面对的是『50MHz的逻辑跑在100MHz时钟下』,采样点、死区、计数溢出全变了,排查面反而更大。另一条路是接受25MHz,把所有常数重算。这条路改动点多但每一处都是确定的、可验证的,时序余量还更宽。
赛前两周,选确定的路。具体顺序我建议这样:先把PWM周期和死区按25MHz重算,单独测一路舵机看抖动是否消失;再改串口分频,做回环测试确认不丢包;最后改测距计时基准,跑单模块闭环。三块都稳了再上六路。这里的关键不是『改得快』,而是『每改一块能立刻判断对错』,否则出问题你分不清是时钟还是逻辑。
再往深一层说,这次踩坑值得记下来:以后任何项目,第一件事是确认板上晶振实际频率,并在代码里用一个统一的参数或宏定义时钟基准,而不是到处散落魔数。这样换板子、换频率时,改一个地方就能全局生效。你们现在的分频系数是散在各模块里,还是已经有统一参数了?如果是散的,趁这两周顺手收敛一下,比单纯救火更值。

先说个容易被忽略的事:你们现在遇到的抖动和丢包,很可能不是25MHz晶振的锅,而是『50MHz的逻辑被搬到了100MHz时钟下跑』。这句话听起来绕,但意思很直白——原来按50MHz写的分频系数、死区计数、采样点,全都隐含着一个时间单位。你把时钟倍到100MHz,这些常数没跟着改,等于每个时间量都被砍了一半。舵机抖动是死区被压扁的典型症状,串口丢包多半是采样点偏了。所以问题不在PLL能不能倍频,而在于你倍频之后整套时序基准全错位了。
那两周时间怎么排?我个人感觉统一回到25MHz重算更稳。理由很简单:改常数是确定性的工作,每一处改完都能单独验;倍频到100MHz则要重做时钟约束、跑时序报告、看全局时钟资源够不够,还要担心原来宽松的路径突然变成关键路径。两周里做这种不确定性的事,风险划不来。
具体排序上,先动PWM周期和死区——六路舵机是闭环的执行端,抖动不解决后面全白搭;再动串口波特率分频,改完拿回环测一遍,别急着接上位机;最后是激光测距的计时基准,这个偏差会直接体现成距离跳变,闭环里看着像传感器坏了,其实只是计数尺子变了。
补一个维度:如果你们非想保留PLL,也不是不行,但前提是先把时钟约束补上、跑一遍时序报告确认建立保持都过、再留点裕量。只是我不建议在赛前两周赌这个。
你们板上PLL现在配了几路输出、有没有额外裕量?这个确认下再决定要不要动它。
发表回答
登录后可在本页底部提交回答