2026年电赛控制题用国产高云FPGA做多路舵机机械臂,为什么角度抖动大、上电还会乱动一下?

开放6 回答 46 浏览

我们队今年电赛控制题准备用高云GW2A做六自由度机械臂,舵机PWM用50Hz、0.5~2.5ms脉宽。现在问题是:上电瞬间舵机会猛地抽一下,运行中角度也有肉眼可见抖动。队友说可能是复位没处理好,也有人说是PWM计数器初值问题,还有人说国产FPGA上电IO状态和Xilinx不一样。想请教做过舵机控制的前辈,这种上电乱动和抖动到底该从哪几个方向排查?

分享:

6 个回答

  • CoderBegin

    上电抽一下,八成是IO在配置完成前不是你想要的状态。高云这类FPGA在配置阶段IO通常是高阻或弱上拉,舵机信号线悬空时,舵机内部会把它当无效电平,有的舵机就直接往一个方向冲。最直接的办法是加一个外部上拉或下拉电阻,让信号线在FPGA没接管前有个确定电平;软件上再让PWM模块复位后先输出固定1.5ms中位,等配置完成、时钟锁定后再逐步放开。抖动那块先别急着怪FPGA,拿示波器量一下PWM高电平宽度,看是计数器本身在跳还是电源被舵机拉塌了。六路舵机同时动,电流峰值很吓人,建议舵机电源和FPGA电源分开走,共地但别共用一条细线。你们现在舵机是直接吃板子上的5V,还是单独供电的?

  • EE专业新生

    先说结论:上电抽一下基本不是PWM计数器的问题,是配置阶段IO没被接管。GW2A在上电到配置完成这段时间,IO通常是高阻或者弱上拉,你的舵机信号线等于悬空,舵机内部把它当无效输入,有的就直接往一边冲。解决顺序是先硬件后逻辑:信号线上加下拉电阻(常见4.7k到10k),保证FPGA没接管前是确定低电平;然后逻辑里让PWM模块复位后先输出1.5ms中位,等时钟锁定、配置完成再逐步放开。抖动那块别急着改代码,拿示波器量PWM高电平宽度,看是计数器在跳还是电源被舵机拉塌。六路同时动电流峰值很吓人,舵机电源和FPGA供电分开走、共地但不共用细线,这一步不做,代码怎么调都白搭。你们舵机现在是直接吃板子5V还是单独供电的?

  • FPGA学习ing

    上电抽一下和运行抖动其实是两个独立问题,别混在一起查。舵机上电乱动,核心是FPGA配置完成前信号线处于悬空状态,舵机把悬空当成无效输入就往一边冲。GW2A这类国产FPGA上电到配置完成期间IO通常是高阻或弱上拉,和你熟悉的Xilinx行为不完全一样,所以队友说的方向是对的。最省事的做法是在舵机信号线上加个下拉电阻,几k到十k都行,保证FPGA接管前是确定低电平;然后PWM模块复位后先输出1.5ms中位,等配置完成再放开。抖动那块先别改代码,拿示波器量高电平宽度,看是计数器在跳还是电源被舵机拉塌了。六路同时动电流峰值很吓人,舵机供电和FPGA供电分开走、共地别共用细线这一步不做,代码怎么调都白搭。你们舵机现在是吃板子5V还是单独供电的?

  • ScriptBoy

    先分清楚两件事:上电抽一下是配置阶段IO没接管,运行抖动多半是电源或地的问题,不要指望改计数器初值能一次解决两个。

    上电乱动:GW2A配置完成前IO是高阻或弱上拉,舵机信号悬空就被当成无效电平,有的舵机直接往一边冲。硬件上在信号线加下拉电阻让悬空时是确定低电平,逻辑上让PWM复位后先输出1.5ms中位,等时钟锁定、配置完成再逐步放开。这是最低成本的保险。

    运行抖动:拿示波器直接量PWM高电平宽度。如果宽度本身在跳,那是计数器或时钟问题;如果宽度很稳但舵机还抖,基本就是电源被拉塌了。六路舵机同时启动的峰值电流很容易把板子5V拉下去,FPGA和舵机共用一条细线时尤其明显。常见做法是舵机单独供电、和FPGA共地但不共电源线,舵机侧加大电容。

    还有个容易忽略的点:舵机对PWM周期其实没你想的那么严格,50Hz只要不太离谱都行,但对脉宽抖动很敏感。如果你用的是分频出来的低频时钟直接驱动计数器,分频比没对齐会引入周期性抖动,建议用主时钟计数、比较值方式生成脉宽。

    排查顺序建议先硬件后逻辑:先示波器看波形,再加下拉和独立供电,最后才动代码。你们现在六路是一起动的还是逐个动的?

  • 硬件小白

    这个问题我建议你按一条主线往深处想,就是「FPGA输出的信号,在舵机看来到底是不是它以为的那个信号」。上电抽一下和运行抖动,表面是两个现象,本质是同一件事的两端:舵机接收到的电平在你没打算控制它的时候也发生了变化。

    先说上电。GW2A从供电到配置完成有一段时间,这段时间IO不受你的逻辑控制,通常是高阻或弱上拉。舵机信号线如果悬空,舵机内部电路会把它判成某种无效或默认状态,很多舵机就直接往极限位置冲。有人会说加个下拉电阻不就完了,对,这是最直接的办法,几k到十k把悬空钳到低电平。但更深一层,你要想清楚配置完成那一刻IO从下拉变成你的PWM输出,中间有没有一个跳变。如果PWM模块复位后第一个周期不是1.5ms中位,而是从0或者某个随机值开始,舵机还是会抽。所以逻辑侧要做的是:复位后先稳定输出中位脉宽,等内部锁相环锁定、配置完成信号有效,再让上位机或状态机逐步给角度。

    再说抖动。很多人第一反应是计数器初值或者复位没处理好,但实际做下来,六自由度机械臂同时动作时,抖动的大头往往是电源和地。舵机堵转或启动瞬间电流能到安培级,如果舵机电源和FPGA共用一条走线或一个稳压芯片,FPGA的IO电平参考地会被抬起来,PWM高电平宽度在示波器上看着可能没变,但舵机看到的是被污染的信号。分开供电、共地、舵机侧加储能电容,这几步做完再回头看代码。

    还有一个取舍:电赛时间紧,别一上来就追求完美的软启动和滤波算法。先把硬件下拉、独立供电、复位后中位输出这三件事做扎实,你会发现抖动已经小了一大半。剩下的才是考虑PWM分辨率、死区、多路调度这些细节。你们现在用的是板载LDO给舵机供电,还是已经单独接了电池或稳压模块?

  • FPGA学员3

    先别急着把锅扣在计数器初值上,我建议你们先把「舵机看到的信号」和「FPGA想给的信号」这两条线分开想。

    上电抽那一下,多半发生在配置阶段。GW2A上电到配置完成之间,IO不是你的逻辑在管,常见是高阻或弱上拉,舵机信号线这时候等于悬空,舵机内部判成无效输入,很多就直接往一端冲。加个下拉电阻(4.7k到10k都行)把悬空钳到确定低电平,是最便宜的保险。但只做这一步还不够:配置完成那一刻IO从下拉切到你的PWM输出,如果PWM复位后第一个周期不是1.5ms中位,而是从0或某个随机值起步,照样抽。所以逻辑侧让PWM复位后先稳定输出中位,等时钟锁定、配置完成再逐步放开。

    抖动就另说了,别和上电问题混着查。拿示波器直接量PWM高电平宽度:如果宽度本身在跳,那是计数器、时钟或复位的问题;如果宽度很稳舵机还抖,基本是电源被拉塌了。六路舵机同时启动的峰值电流很吓人,舵机和FPGA共用一条细5V线时尤其明显,常见做法是舵机单独供电、和FPGA共地但不共电源线,舵机侧并个大电容。

    顺带提个风险:如果你们为了省事让六路PWM共用一个计数器分时输出,相位一错开,舵机感受到的周期就不均匀,也会表现为抖动。个人感觉电赛现场最怕的就是电源和地没规划好,代码写得再漂亮都救不回来。你们现在舵机是直接吃板子上的5V,还是单独一路供电的?

登录后可在本页底部提交回答

提问者

数字电路学习者查看主页
浏览「其他」

描述场景与已尝试方案,更容易获得有效解答

相关问题

同分类

提问建议

  • 标题写清核心疑问,避免「求助」「请问」等空泛用语
  • 正文补充环境、版本、报错信息或截图
  • 先搜索本站是否已有相近问题,减少重复提问
  • 若与课程相关,请标明课时或章节便于讲师定位