ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

智能车竞赛电路设计全复盘:从BUCK电源到电机驱动的实战经验

智能车竞赛电路设计全复盘:从BUCK电源到电机驱动的实战经验

1. 写在前面:这个开源目录到底能给你什么

21届智能车竞赛结束后,我们Soberup战队的“疯狂电路组”把整套电路设计放到了开源社区。说实话,最初发这个开源目录时没指望有多少人看,结果陆陆续续有几十个学弟学妹私信,问的问题从“你们那个BUCK电感是多大”到“IR2110为什么总炸管”都有。与其一个个回复,不如把设计思路、关键计算和踩过的坑整理成一篇完整的复盘,就是你现在看到的这篇。

“疯狂电路组”是队员们对21届智能车竞赛里一个强电弱电混合组别的叫法。别的组可能一块板子就完事了,这个组不行,至少需要两套电源域、电机驱动、信号调理、通信接口、冗余保护这一大堆电路叠在一起。电磁信号弱到毫伏级,电机电流大到几安培,两者待在同一块板子甚至同一根线束里,这就是“疯狂”的来源。所以这个开源目录里不只有原理图和PCB,还有我们当时画的BUCK电源、IR2110半桥驱动、差分放大电路、RC滤波与防抖电路、看门狗和复位电路、RS485通信电路等等,目标是让后来的人少走点弯路。

如果你是在校生准备参加全国大学生智能车竞赛,或者对嵌入式电源设计、电机驱动、传感器信号调理感兴趣,这份目录和这篇博客应该能帮到你。我会先讲整体设计思路,再逐个拆电路细节,然后讲打样、焊接、联调的真实过程,最后给一份常见问题速查表。建议你先把开源目录的README通读一遍,再对照本博客一起看,收获会大得多。

1.1 开源目录结构一览

很多人对“开源”有误解,以为丢一个GitHub仓库链接就算开源了。实际上能复现、能维护、能看懂才是真开源。我们整理目录时花了不少力气,最终结构类似这样(各版本略有调整):

Soberup_21_Circuit/ ├── README.md # 项目总览,环境要求,文件导航 ├── doc/ │ ├── 设计文档.md # 整体架构、方案选型、关键计算 │ ├── 调试记录.md # 每次实测的现象记录、波形图和结论 │ └── 比赛现场问题清单.md # 比赛现场踩过的坑,以及应急处理 ├── hardware/ │ ├── sch/ # 原理图源工程 │ ├── pcb/ # 布局布线源工程 │ └── fab/ # 打样输出文件(Gerber、BOM、位号图) └── firmware/ ├── driver/ # 硬件底层驱动 ├── algorithm/ # PID、滤波、图像处理等核心算法 └── debug_tools/ # 上位机调试脚本、串口解析协议

这个结构是我们踩过一次大坑之后才定型的。21届赛前中期,电路组只有一个人,图纸和代码散在各处。后来队友接手,发现“文件不在了”比“电路炸了”还可怕——原理图在某台笔记本上,PCB工程在另一个网盘里,BOM表是一张手写纸。后来我们强制约定:每周五晚上把当天所有改动同步到仓库,硬件设计文档里必须写上“为什么这么做”而不是只写“怎么做”。坚持了三周之后,团队协作效率明显提升。这也是为什么我强烈建议你们开源目录从一开始就做好结构,而不是等比赛结束了才整理。

1.2 这份开源目录适合谁读

一句话:只要你准备碰智能车竞赛里的硬件电路,或者对低功耗电源管理、电机驱动、模拟信号处理有好奇,都可以从里面找到能直接抄的作业。

具体来说,可能有几类人:

  • 第一次参加智能车竞赛的学生,需要一块“抄完能跑”的电路板作为起点;
  • 已经有一定的单片机基础,但不太清楚电源、驱动这些大功率电路怎么入手;
  • 对差分放大、滤波、看门狗这些基本电路模块感兴趣,想看看它们在真实场景里怎么组合;
  • 甚至是被队友拉来负责焊接和调试的同学,也可以参考我们的焊接顺序和上电检查清单,避免第一次上电就冒烟。

我自己就是从“照着别人的板子抄,然后一步步改成适合自己的”这条路走过来的,所以特别理解新手拿到一个陌生原理图时的茫然。这也是我把每块电路背后的计算过程和选型理由都写进文档的原因。

2. 整体设计思路:把比赛规则翻译成电路需求

智能车竞赛里有一个被说烂了但真的很重要的道理:先写需求,再画电路。我们“疯狂电路组”之所以叫疯狂,是因为比赛要求车跑得快,但赛道电磁环境极差、电池电压波动大、机械振动强、比赛现场甚至有其他队的无线干扰源。不把需求拆清楚,后面每一个电路模块都会改来改去。

2.1 需求拆解:从赛道到电路

当时拿到21届赛题,我们第一件事不是画原理图,而是拉了一张表格,把所有“电路相关”的需求列出来:

  • 动力系统:电机堵转电流5A以上,正常平均电流2~3A,需要驱动电路能承受短时大电流,且开关频率不能太低以免啸叫和发热;
  • 电源系统:电池电压7.2~8.4V(我们用的2S锂电),要给MCU、传感器、电机驱动、通信模块分别供电,5V和3.3V必须稳定,纹波尽量控制在50mV以内;
  • 传感系统:电磁信号幅度只有几十毫伏,极易受电机PWM噪声干扰,需要对信号做差分放大和滤波;若组别需要用摄像头,还要保证视频信号供电的稳定和防抖;
  • 控制系统:速度环需要高频PWM通道,陀螺仪的角速度数据通过I2C/SPI读取,受干扰时会出现异常跳变,因此电源和地线必须干净;
  • 通信系统:车上板子和代码调试需要随时改参数,采用RS485有线调试,传输距离够长且抗干扰比串口直连强;
  • 可靠性:比赛经常出现电池电压瞬间跌落、程序跑飞等情况,必须外加看门狗和可靠的复位电路。

把这些需求翻译成硬件,自然就变成了“BUCK电源 + 半桥驱动 + 差分放大 + 滤波防抖 + 看门狗 + RS485通信”这套组合。很多人画电路时喜欢“想到什么加什么”,最后板子上堆了一堆没用的电路,反而把基础供电搞得特别脏。我们被教训过好几次,所以现在设计的第一步永远是写需求,做减法。

2.2 电源拓扑选型:为什么选BUCK而不是LDO

这是新手最容易纠结的问题。用LDO确实简单,比如电池7.4V直接经过一个AMS1117输出5V,但算一下账就明白了:AMS1117压差约1.8V,如果整机电流2A,LDO自身功率损耗是3.6W,这热量足以烫到手,更不用说比赛时车还在跑。BUCK开关电源的效率一般在85%以上,7.4V转5V、电流2A时,实际损耗不到1W,而且不会因为发热导致降额或保护。

BUCK电路里最关键的无非是电感、电容、开关管、续流二极管和PWM控制芯片。我们用的方案是集成同步BUCK和外围分立BUCK结合:主控5V和传感器模拟5V用同步BUCK(方便、效率高),给电机驱动逻辑供电的12V用BUCK-BOOST或专门驱动电压轨(因为需要稳定驱动上管)。注意BUCK-BOOST的引入时机:如果电池电压会低于目标电压,或者电机驱动需要12V而电池只有7.4V,只靠BUCK是做不到的。这是我们第二次改版才加进去的教训,具体计算后面再展开说。

2.3 强弱电分区:抗干扰不是玄学,是布局

关于抗干扰,网上能搜到一堆“经验”,但真正落地的是布局走线。强电(电机电源线、驱动输出线)和弱电(MCU、I2C、串口、电磁传感器)如果混在一起,再高级的滤波器也救不回来。

我们的做法是:板子物理分区,左边全是功率电路(驱动MOS、电感、大电容),右边全是控制电路(MCU、传感器接口),中间用铺铜和地沟隔开,只留一根窄的模拟地/功率地连接点,也就是单点接地。传感器的排线尽量远离PWM和电机电源线,并且采用双绞结构。实测下来,同一个电磁信号在“布局混乱”和“分区合理”两种情况下,噪声幅度差了一倍以上。不要小看这一点,比赛差距就是一点点抠出来的。

有一点要特别提醒:很多队伍喜欢用大面积铺铜来解决地线问题,但如果对模拟地和数字地不做区分,噪声会沿着铺铜面跑到敏感信号的参考地,造成所谓“地弹”。我们最终是在原理图阶段就把地的网络名分开,PCB布局时再把模拟地与数字地用磁珠或0欧电阻单点连接,效果比后期贴铜皮补救强得多。

2.4 赛前迭代:V1.0到V1.3的版本故事

提到设计思路,就不能不提我们板子的迭代过程。V1.0基本是照抄参考设计的“验证板”,主要为了确认BUCK电源和驱动能不能稳定工作。V1.1加入了IR2110半桥驱动和自举电路,结果发现没有注意自举电容的ESR和容量,电机高速时上管驱动不足,驱动管发热严重。V1.2加了BUCK-BOOST给驱动板独立供电,同时修正了差分放大电路的参考电压设计,这时候电磁信号终于稳定下来。V1.3算是比赛定稿版本,改进了RS485终端电阻的切换方式、增加了硬件看门狗、把复位电路换成专用复位芯片,也大量优化了走线。

每一次版本迭代,我们都在调试记录里写了“为什么改”。如果你去看开源目录,会发现V1.0到V1.3之间不是简单的“板子换了”,更像是一份电路设计成长史。这也是开源项目最有价值的部分:你看到的不是最终结果,而是思考轨迹。

3. 核心电路细节解析:每一块电路都踩过坑

这是全文最硬核的部分。我会尽量把选择依据、参数计算和实操注意点都写清楚,即便你不完全理解公式,照着“结论+操作建议”来做也大概率稳。

3.1 BUCK与BUCK-BOOST电源:纹波、电感与电容的账

先看BUCK。设计一台BUCK电源,首先要算占空比。对于连续导通模式,近似有:

D ≈ Vout / Vin

例如输入7.4V,输出5V,D≈0.68。实际还要考虑开关管压降和续流管压降,同步BUCK这个值会更接近0.68,非同步BUCK有时会到0.72甚至更高。

电感电流纹波公式是:

ΔI_L = (Vin - Vout) × D / (f × L)

我们还是用7.4V转5V,f=500kHz,L=10μH,算出来:

ΔI_L = (7.4 - 5) × 0.68 / (500k × 10μ) = 2.4 × 0.68 / 5 ≈ 0.326A

如果我们负载电流是2A,峰值电流约2.16A。所以电感饱和电流至少要选3A以上,留1.5倍余量。否则电感饱和后纹波电流会指数级上升,轻则输出发热,重则烧MOS管。

输出电容的选择主要看ESR对纹波的贡献。粗略估算:

ΔVout ≈ ΔI_L × ESR + ΔI_L / (8 × f × Cout)

假设ESR=20mΩ,Cout=47μF: 第一项:0.326 × 0.02 ≈ 6.5mV 第二项:0.326 / (8 × 500k × 47μ) ≈ 1.7mV 总纹波约8.2mV,还在可接受范围。如果想压到5mV以内,要么换更大容量的输出电容,要么选ESR更低的多层陶瓷电容,而不是单纯堆电容数量。

我记得初版图用的是电解电容,实际纹波比估算大了三倍,后来换成两颗陶瓷电容并联,效果立竿见影。选陶瓷电容时一定注意直流偏压特性,X5R/X7R在直流偏压下容值会下降,标称47μF实际可能只剩30μF。这个坑很容易踩,尤其是大容量0805封装电容。

那什么时候需要BUCK-BOOST?我们的主控5V其实不需要,但电机驱动芯片的供电轨需要12V,而电池只有7.4V,就必须升压。另外有的组别用单节锂电池供电,要升压到5V给整个系统,这时用BUCK-BOOST比Boost更合适,因为当电池电压高于5V时也能降压输出,整个电量区间都能工作。BUCK-BOOST的典型芯片我们选了一颗集成FET的同步升降压芯片,外围很小,但要注意它的开关频率和电感选择范围窄,照着手册的推荐参数来最稳,不要盲目改大电感。

3.2 IR2110半桥驱动:自举电容、死区时间和炸管总结

电机驱动我们最终用的IR2110驱动半桥NMOS结构:两个NMOS管串联构成半桥,上管由自举供电,下管直接由逻辑电源驱动。IR2110的优势是自带电平移位,用一片芯片就能同时驱动高低侧MOS,外围简单,价格也不贵。

自举电容是关键。它的作用是当低侧管导通时,给高侧驱动电路充电储能,让高侧导通时栅源电压足够。自举电容容值可以参考:

C_boot ≥ Qt / ΔV_boot

其中Qt是MOS栅极总电荷,ΔV_boot是允许的电压跌落。实际我们常用0.1μF到4.7μF的陶瓷电容,但注意:必须选低ESR,而且要用X7R或C0G。容量太小的后果是高压侧无法完全导通,MOS管线性区工作,直接变成电阻发热,轻则驱动无力,重则炸管。自举二极管要用快恢复或超快恢复管,耐压按母线电压的两倍留余量。

死区时间为什么重要?如果上管关断和下管导通之间没有足够间隔,会出现半桥直通:电源正负极之间瞬间有极大电流,电流一路飙升,MOS管没来得及完全导通就烧了。IR2110本身有匹配死区,但在极限负载下并不保险。我曾经遇到过把软件PWM从10kHz调到20kHz后,占空比调到90%以上,结果连续炸了三个驱动管。后来在示波器上看到栅极波形存在交叉导通时间,才想到是死区不够,于是在PWM通道上增加RC延时电路,人为把死区拉宽到300ns左右,问题解决。

因为炸管太常见,我在开源目录的调试记录里专门写了一段总结:

  • 电源电压过高,超过MOS耐压:一定要看母线上是否有尖峰,加吸收电容或TVS;
  • 自举电容容量不足:表现为MOS管发热严重但PWM正常;
  • 死区时间过短:波形出现重叠,电流异常大;
  • 驱动供电电压过低:IR2110的欠压锁定会让高低侧输出异常,需要单独稳压或加监控;
  • 电机堵转导致大电流冲击:需要加电流检测和过流保护逻辑。

这里特别提一句,半桥电路和推挽电路的差别很多初学者搞混。推挽一般指两个晶体管一个推一个拉,用于信号放大或低压驱动;而半桥是功率交换电路,侧重于电流方向控制。我们的驱动板里,PWM信号到MOS栅极之间也有一级三极管推挽,那个是为了增强栅极驱动能力,真正做功率转换的是半桥结构。

3.3 差分放大电路:从毫伏电磁信号到ADC满量程

智能车电磁组的传感器采集到的感应电动势非常微弱,大约只有几毫伏到几十毫伏,要直接给ADC用是不可能的。差分放大电路的作用是把“两根导线之间的有用差模信号”从“共模干扰和噪声”里挑出来放大。

我们的基本结构是:传感器输出信号先经过一个RC低通滤波,再进入仪表放大器或普通运放组成的差分放大电路,最后经过可调增益级给ADC。用普通运放搭差分放大时,增益等于Rf/R1。比如R1=1k,Rf=10k,增益就是10倍。注意输入阻抗问题:两个输入端看到的阻抗要尽量对称,否则共模抑制比会下降。

另一个容易被忽略的是参考电压。运放输出以0V为参考只能输出0到3.3V,但电磁信号经过放大后可能是负的。为了避免负信号被电路削底,我们会把运放同相端拉到一个1.65V的中点电位。这样差分信号可以从-100mV放大到±1V,叠加到1.65V上,正好落在ADC量程中间。这个参考电平要由分压电阻加电压跟随器生成,不要直接拿电阻分压接进去,否则负载会改变电位,导致参考电压漂移。

有段时间我们在重新铺铜之后电磁信号依然抖动,最后换用高共模抑制比的仪表放大器,虽然贵几块钱,但效果立竿见影。对于追求性价比的入门队伍,用带修调电阻的仪表放大器,或者普通运放加四个高精度电阻,也能达到不错的性能。

还可以提一句PNP电流镜与差分放大的关系。在教科书里电流镜常常作为有源负载,可以提高差分放大器的增益和对称性。比赛板子里我们用到的运放内部就有电流镜结构,这部分不需要自己搭,但了解原理能帮助你理解为什么运放的输入电流、失调电压会影响精度,以及为什么低偏置电流的运放更适合微弱信号采集。

再说低通滤波。截止频率fc=1/(2πRC)。如果噪声主要来自PWM的几百kHz开关频率,那RC低通截止频率设在10kHz到30kHz,既能保留电磁信号的动态变化(赛道信号频率通常不到几百赫兹),又能干掉大部分高频噪声。当时我们给电磁信号加了二阶低通,波形明显更干净。后来发现传感器离电机太近,PWM噪声直接耦合进信号线,单纯滤波不够,又把传感器线换成屏蔽线并单点接地才算安稳。

3.4 滤波与防抖:硬件上解决“信号跳变”的老大难

滤波电路不仅仅是低通,还包括防抖。比赛时经常遇到传感器信号在阈值附近反复跳动,比如电磁信号刚好在判定的阈值附近,或者按键开关接触不良引起重复触发。这时候有两个处理方向:软件上做延时、滤波和滞回,硬件上加RC和迟滞比较器。

迟滞比较器是一个经典防抖电路。它有两个阈值,根据输出状态自动切换比较电平。例如一个信号在1.0V附近抖动,你把高阈值设为1.2V,低阈值设为0.8V,输出一旦变化就不会因为细微抖动变回来。这个电路在光电传感器、红外对管、编码器信号上都能用。比较器加正反馈电阻就能实现迟滞,反馈电阻的比例决定了回差宽度,具体参数可以根据需要计算。

还有一个常见的坑是复位电路。MCU在上电瞬间电源还没稳定,如果复位引脚跟着电源一起爬升,有可能导致MCU在欠压状态下启动,程序初始化到一半就卡死。所以我们用了专用复位芯片而不是简单RC复位。比如复位阈值选2.93V的芯片,当电源电压低于2.93V时强制保持复位,高于阈值并经过一段时间后才释放复位。同时,电源输入端还要加去耦电容,防止电源启动时的毛刺直接打到复位引脚上。其实质是电源监控加上电时序控制,这套思路在电池供电的车载系统里非常必要。

说到RC防抖,很多人会问:为什么不用软件滤波?我的经验是软件能做,但硬件防抖能减少MCU的中断负载。比如编码器信号抖动,如果软件里每个脉冲都要做滤波判断,高速时MCU会在中断里花掉大量时间,反而影响PID控制周期。硬件上一级施密特触发器整形,软件里只做简单计数,效果稳定很多。

3.5 可靠性设计:看门狗电路、复位电路与电源监控的取舍

看门狗是嵌入式系统最后的防线。有人只依赖MCU内置看门狗,但内置看门狗在MCU自身彻底跑飞、时钟异常时也可能失效。比赛环境电池电压跌落、电机堵转是家常便饭,硬件看门狗更可靠。我们用的是MAX706这类带看门狗功能的电源监控芯片,它的两个功能是:监测电源阈值、定时喂狗,如果没有定时喂狗则强制复位。

但看门狗也有坑。最常见的是“误复位”:主程序因为某个阻塞操作(比如等待某传感器超时)超过喂狗间隔,看门狗以为程序跑飞就复位了。所以我们把喂狗放在一个高优先级定时中断里,只判断“系统是否还有心跳”,而不是放在任意的循环中。另外,喂狗时间不能太短,要留足传感器初始化、通信等待的时间;也不能太长,否则真死机了要等好几秒才发现。我们当时把看门狗超时设置为500ms,兼顾安全性和容错空间。

关于复位电路,前面提到专用复位芯片,这里再补充一点:复位芯片的推挽输出和开漏输出有区别。如果MCU复位引脚本身是开漏的,需要外部上拉电阻;复位释放延时一般在200ms左右,刚好等电源稳定。焊接时要注意复位芯片和去耦电容的距离,太远会导致电源毛刺直接打在复位引脚上,造成莫名复位。另外,掉电检测也很重要,有些复位芯片带低电压检测功能,可以在电池电压下降到危险值之前提前触发停车逻辑,保护驱动管不被过放损坏。

3.6 通信与调试接口:RS485电路和电平转换的细节

大多数队伍的调试上位机用的是USB-TTL直连,车载MCU端就一个串口。这样做方便,但线长一点容易受干扰。我们因为需要经常在车跑动的状态下实时改参数,所以换成了RS485总线。RS485是差分信号,抗共模干扰能力强,传输距离几十米都没问题。电路上用一片MAX3485或者SP3485,注意终端电阻:总线两端各接一个120Ω电阻做阻抗匹配。如果不接,长距离通信在高速率下会出现反射,数据乱码。

RS485还有一个方向控制问题。半双工485,同一时刻只能收或者发,控制收发切换的DE/RE引脚如果切换不及时,最后一个字节就可能丢失。我们在收发函数里特意加了几个微秒的延时,让方向切换稳定后再操作,之后再也没有丢过最后一个字节。

另外还遇到过电平不匹配的问题。平时用TTL串口时,MCU的3.3V和PC端USB转串口的5V电平不匹配,只靠串口芯片内部的上拉钳位有时不可靠。我们常用三极管做电平转换,比如NPN三极管加集电极上拉的电路,可以实现3.3V逻辑和5V逻辑双向转换。原理很简单:3.3V侧输出低电平时三极管导通,5V侧被拉低;3.3V侧输出高电平时三极管截止,5V侧通过上拉电阻到高。电阻一般选10k左右,速度足够覆盖115200波特率。对于想要更高速度或更稳定的场景,可以用2N7002等MOS管代替三极管。电平转换电路在很多嵌入式板卡上都有,但这些细节往往不会写进课本,却是实战中非常常见的需求。

如果只是MCU单板和调试器之间通信,也可以直接参考我们V1.3版的做法:在板子上预留一组3.3V串口、一组RS485,通过跳线帽选择。这样前期调试用串口,后期跑车时用485,免去反复焊线。

3.7 EMI滤波与整体抗干扰设计

最后说EMI滤波。电机是车上最大的干扰源,电刷火花会产生宽带噪声,通过电源线传导到各个电路。我们在电池入口处加了共模电感和π型LC滤波,实测摄像头画面的水波纹下降了不少。虽然我们的组别不是摄像头组,但模拟视频信号受电源干扰的影响我们也有体会:电源越是干净,信号越好。

具体做法是:电池正负极进来先经过一个共模电感,再并上高频瓷片电容和大的电解电容,形成一个多级滤波网络。此外还要考虑反向电动势保护:电机停机时会产生很大的反向电压,如果驱动板的MOS管吸收能力不足,会在母线上产生尖峰,击穿控制芯片。我们在母线两端并联了TVS管和RC吸收网络,同时在电机两端也并联了续流二极管或RC吸收,双重保护。

4. 从原理图到真车:打样、焊接、联调实录

再好的设计,最终都要变成一块能跑的板子。这一章我按时间顺序复盘从打样到联调的完整流程,每个步骤都是真实操作记录。

4.1 打样前的检查清单:十个问了自己一遍的问题

画完原理图和PCB之后,不要急着点“下单”。我们当时整理了一个检查清单,事后看来救了不少板子:

  • 电源输入极性是否正确,有没有防反接电路;
  • 所有芯片的电源引脚是否有去耦电容,去耦电容是否靠近引脚;
  • BUCK的SW节点铜皮是否够宽,是否远离反馈线;
  • IR2110的自举二极管方向对不对,漏了必炸;
  • 差分放大参考电压部分的电阻分压是否有跟随器;
  • RS485的A/B线接线标识是否容易识别;
  • 所有按键、拨码开关是否加上拉或下拉,防止悬空;
  • 板边是否留了安装孔,能否与车模底盘配合;
  • 测试点是否足够多,特别是电源轨和PWM信号点;
  • 丝印是否清晰,注释是否标全,后期调试时要能快速找到关键器件。

其中第一项防反接最容易被忽略。比赛现场大家共用一个电源柜,万一接错正负极,整个板子可能瞬间冒烟。我们在电源入口串联了一个P沟道MOS管做防反接,压降小,发热不明显。

4.2 焊接与上电顺序:第一次上电别直接插电池

焊接是整个项目里最容易出现“低级错误”的环节。我们总结的要点是:先焊电源部分,再焊控制部分;分段上电调试。

流程是这样的:

  1. 焊好电源部分,不装MCU和IR2110;
  2. 用可调稳压电源限流上电,先把限流值调到0.2A,防止短路烧板;
  3. 用万用表测量各路输出电压是否正常,用示波器看纹波;
  4. 电源确认没问题后,再焊MCU最小系统,烧录一个LED闪烁程序;
  5. 确认MCU能启动后,才焊电机驱动部分和传感器,接上电池前再次测一遍电源对地阻抗;
  6. 电机部分先给10%占空比,用手转电机确认方向,再逐步增加。

为什么强调不直接插电池?因为电池电压高、内阻低,一旦短路或焊错,几十安培电流瞬间流过,元件能直接炸开。可调电源限流则能控制风险,即使短路也只是电流被限制住。如果你是刚接触焊接,强烈建议按这个顺序来。

4.3 电路与算法的配合:PID输出角速度对电路提出的要求

很多队伍觉得算法是软件的事,与电路无关。但实际经验告诉我,PID调不好的一大半原因是“电路给你的反馈不对”。以角速度环为例,陀螺仪输出通过I2C读取,如果主控电源纹波大,I2C上拉电阻不够强,或者地线上干扰严重,读回来的角速度就会跳变,PID调节器会把这些噪声放大,最后车摆个不停,看起来像参数没调好,其实是硬件在拖后腿。

我们解决的方式是:

  • 陀螺仪和MCU共用同一个3.3V LDO输出,在靠近陀螺仪的地方加10μF+100nF去耦;
  • I2C上拉电阻从2.2k调到4.7k,降低信号边沿速度,减少振铃;
  • 示波器看陀螺仪数据引脚是否干净,必要时加RC滤波;
  • 电机驱动的PWM频率统一,避免不同频率叠加产生拍频噪声;
  • 编码器信号进入MCU前先经过施密特整形和低通滤波。

速度环对电路还有另一个要求:PWM频率和死区不能随负载变化太大。如果驱动电路在轻载和重载下波形畸变,电机的响应曲线就会非线性,PID参数就很难在整段速度范围内都有效。这也是我们坚持用IR2110配大电流MOS管的原因之一,驱动能力充足,波形更干净。

4.4 现场抗干扰:为什么很多“漂亮的车”输给“稳定的车”

比赛现场有几十辆车同时跑,电磁环境不可控。有的车电路设计看着很好,但现场还是出问题,多半是留给抗干扰的余量不够。我们比赛前特意做了几项压力测试:

  • 满载跑两分钟看电源温度;
  • PWM占空比拉满看驱动波形是否失真;
  • 用对讲机在车旁边发射,看看会不会影响传感器数据;
  • 把通信线拉得很长再快速发数据,测误码率;
  • 反复拔插电池,模拟现场换电流程。

这些测试不一定能完全模拟现场状况,但至少能逼出大部分隐患。我还记得一次赛前测试,跑了两圈后MCU突然复位,排查了好久才发现是电池插头接触不良,在急加速时产生了短暂断电。后来我们在电源输入端加大电容,并且把电池接头换成带锁扣的型号,问题彻底解决。赛前一定要做“跑动断电测试”,这个细节很多队伍都会忽略。

还有一条很实在的经验:比赛前不要临时改板。我们上一届有一个组赛前两天改了电源电容,结果现场莫名其妙复位,问题最后才查出来是焊盘冷焊。赛前改板的风险远大于收益,除非你是真正的老手并且有足够时间做完整测试。实在要做小改动,也要预留至少一天做完整跑测。

5. 常见问题与排查技巧实录

这一章是给备赛同学准备的速查表。我按模块整理了我们在调试中遇到的高频问题、可能原因和排查动作,你们可以对照自己的情况快速定位。

5.1 电源类:电压跌落、纹波超标、电池不一致

现象可能原因检查手段
电机启动时MCU复位电池内阻大、输入电容不足示波器看电池电压跌落,加大输入电容或做软启动
5V纹波很大,传感器抖动输出电容ESR大、布局不当换低ESR陶瓷电容,检查反馈走线是否靠近电感
电池电压下降很快驱动效率低或电源电路短路测量各路电流,检查MOS管栅极波形是否失真
上电打火防反接失效或电容充电电流过大检查电源入口电路,预充电电阻是否损坏

排查电源问题,我习惯先把负载断开,只测空载波形。如果空载时纹波就很大,说明是电源本身设计问题;如果空载正常、带载后变差,多半是负载侧去耦不足或布局不合理。这个思路能帮你快速缩小范围。

5.2 电机驱动类:IR2110炸管、自举失败、半桥直通

现象可能原因检查手段
上电即炸管自举电容焊错、方向反、短路过流测自举电容两端电压,检查栅极波形
电机无力、MOS发烫自举电容容量太小、开关频率过高加大自举电容,降低PWM频率
占空比高时炸管死区不足、上下管直通示波器看上下管栅极波形,增加RC延时死区
电机抖动驱动信号有毛刺或供电不稳定检查栅极驱动波形,电源端加吸收电容

炸管之后先别急着换新管子,一定要找到根因,否则换一片炸一片。我们经常是先测电源和驱动波形,确认没问题再换MOS。为了节省成本,可以先把PWM占空比限制在50%以内做静载测试,跑通了再逐步放开。

5.3 信号类:电磁值跳变、差分放大漂移

现象可能原因检查手段
传感器数值随电机转速波动电机噪声耦合到信号线屏蔽线、双绞走线、加滤波
差分输出漂移严重参考电压不稳定、运放输入偏置用低漂移运放或软件校准
信号在阈值附近反复跳变周围干扰、无迟滞加迟滞比较器,软件加阈值滞回
传感器信号整体衰减滤波截止频率设置过低或传感器安装不当用信号发生器扫频,测幅频响应

我印象最深的一次排查,是电磁信号隔一段时间就跳一下,怀疑是板子自激或者电源干扰,最后发现是传感器排线经过电机线束时产生了串扰。把排线走向改掉之后问题立刻消失。这说明了走线的重要性,很多时候不是芯片不好,而是安装位置和走线方式不对。

5.4 逻辑类:看门狗误复位、复位电路失效

现象可能原因检查手段
程序莫名复位喂狗超时、电源跌落检查复位引脚波形,缩短阻塞操作时间
上电启动进不了主程序复位时间不足、电源爬升慢换专用复位芯片,调整复位延时
复位后状态不对没有区分复位原因程序里读取复位原因寄存器,区分上电复位、看门狗复位、欠压复位
手动按键复位无效按键去抖电容过大或接线错误检查RC参数,测按键两端波形

看门狗排查时有个小技巧:如果怀疑是电源跌落导致复位,在复位引脚和电源轨上同时挂示波器,比对时间戳。如果复位引脚的电平变化和电源跌落发生在同一时刻,那大概率是电源问题;如果复位引脚先出现低电平,电源却没变化,那就要检查看门狗和喂狗逻辑了。

还有一个通用技巧:示波器永远是第一工具,不是万用表。看到异常,第一件事是同时看电源波形和信号波形,判断是电源问题还是信号本身被干扰。万用表只能告诉你“有没有电”,示波器才告诉你“电干不干净”。如果条件有限,也要学会用MCU内置ADC和串口打印,用软件记录采样波形,再离线分析。

6. 最后想说的话

写完这篇复盘,我重新看了一遍开源目录,想起了当时为了选一个BUCK电感容量,和队友争论到晚上十一点;也想起了为了IR2110炸管问题,连续换了四片驱动管才找到死区设置的原因。我现在最大的体会是:竞赛电路设计没有一个模块是“写好就完事”的。电源给信号注入噪声,噪声把算法带飞,算法反过来又要求电源更稳定,整个系统环环相扣。

如果你们照着开源目录做板子,我一定劝你多做压力测试,留足余量,尤其是电源和地线部分。不要迷信“高级芯片”,把基础电路做扎实,比堆料更有用。一块板子稳定可靠,远比账面参数好看重要,比赛比的不是谁用的芯片贵,而是谁的车能在混乱的现场稳定跑完。

最后再分享一个小技巧:开源目录里的调试记录文件非常有用。它记录了我们每一次现象、猜测、验证过程和最终结论,很多坑隔了两个月就忘了,但记录下来,就等于给自己和其他同学留了一本“错题集”。如果你们队伍也要做开源,请一定把“调试记录”和“设计思路”一起放出来,因为原理图只能告诉别人“是什么”,文档才能告诉别人“为什么”。希望这份开源目录能帮到更多人,也期待看到你们做出比我更稳的车。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进