21届智能车竞赛结束到现在,我整理开源仓库的时候翻完整个工程,还是想说一句话:疯狂电路组真正检验人的地方,不在赛道上,而在你焊的每一块板子、调的每一路电源、写的每一行注释里。我们Soberup战队在21届把整套电路方案完整开源了,包括原理图、PCB、核心电路模块说明、调试记录和踩坑总结。这篇博文就是那个开源目录的深度导读,我会结合我们当时的选型思路和实测数据,把电源、信号采集、通信、抗干扰这几个核心模块拆开讲清楚。
不管你是准备参加22届、23届的参赛队员,还是单纯对智能车硬件设计感兴趣的嵌入式爱好者,这篇文章都能给你一套可以直接抄作业的电路设计框架。文章不会只贴一个目录了事,而是把每个模块“为什么这样做”“参数怎么算”“实测遇到什么问题”全部交代清楚。
1. 开源目录里藏着什么:先看懂我们整套方案的骨架
1.1 战队定位与开源思路
先说下我们战队的定位。21届智能车竞赛的电路组(也就是部分赛区所称的“疯狂电路组”),核心任务是设计一套完整的车模硬件平台,包括传感器采集、主控最小系统、电机驱动、电源管理、通信交互等。我们Soberup战队在赛区内的优势并不是算法跑得有多花哨,而是硬件底子扎实——整辆车用到的PCB全部自研,从低压差电源到电机驱动桥,从咪头采样到485通信,每一块都是自己画板、自己调试、自己踩坑填平的。
开源这个目录,初衷很简单:智能车竞赛的硬件设计资料在网络上其实非常碎片化,官方文档给的是原理框架,各赛区群里流传的又往往是截图和半句话。我们想做一份“完整到可以让下一届队伍照着画板就能跑”的硬件参考设计。所以开源目录里不只是放了Gerber文件和BOM表,还附带每块电路的设计说明、实测波形、更换替代料时的注意事项。这份目录整理的工程量其实比画板还大,但我觉得值得,因为硬件设计的经验如果不沉淀成文档,换一届人就是从头再来。
1.2 目录结构与核心模块划分
我们的开源目录按功能模块划分,主要包含以下部分:
| 模块 | 核心功能 | 关键电路类型 |
|---|---|---|
| 电源系统 | 电池输入保护、多路降压、逻辑电源隔离 | BUCK电路、PMOS防倒灌、复位与看门狗 |
| 传感器采样 | 摄像头/咪头信号调理、电流采样 | 差分放大、咪头差分电路、RC低通滤波 |
| 通信接口 | 与上位机/裁判系统数据交互 | 485自动收发电路、串口电平转换 |
| 执行机构 | 电机驱动与舵机控制 | 直流电机驱动、图腾柱电路 |
| 抗干扰设计 | 提升系统稳定性 | EMI滤波、防抖电路、PCB布局规范 |
这套目录结构不是我们一开始就规划好的,而是边调车边补出来的。到后期我们形成了一个习惯:每改一次板子,必须把改动原因和测量结果同步更新到对应模块的说明文档里。这让我们在赛前最后两周系统跑飞时,能快速定位到是电源纹波问题还是采样链路饱和问题,而不是盲猜。
2. 电源系统是整个车模的命脉:BUCK、防倒灌、复位与看门狗
2.1 动力电源与逻辑电源的隔离设计
21届规则使用的是2S锂电池组(典型电压7.4V,满电8.4V),电机驱动和逻辑电路共用电池。很多队伍第一版板子直接把电池电压分两路,一路给电机,一路给LDO降压到5V和3.3V,结果舵机一打角,单片机就复位。问题根源在于电机瞬时电流可以达到好几安培,电池内阻和导线电感会把母线电压拉出一个很大的毛刺,数字电路最怕这个。
我们当时把电源分成了动力电源和逻辑电源两个域:动力电源直接进电机驱动,逻辑电源通过BUCK先降到5V,再经LDO降到3.3V给MCU和传感器使用。BUCK负责把8.4V的粗糙输入变成5V的“半干净”电源,LDO再做一次低频纹波抑制,给MCU一个尽可能干净的3.3V。这样一个两级结构的成本增加不了多少,但对系统稳定性的提升是质变。
2.2 BUCK选型与参数计算
BUCK降压芯片我推荐用同步整流的型号,比如TPS5430或者国产替代的MP2315之类,效率比非同步整流的肖特基二极管方案高不少,发热也小。这里给一个参数计算的实例,以输入8.4V、输出5V、最大负载电流2A为例:
- 开关频率选500kHz,电感纹波电流取最大负载电流的30%,即ΔIL=0.6A。
- 占空比D≈Vout/Vin=5/8.4≈0.595。
- 电感量L=(Vin-Vout)×D/(f×ΔIL)=(8.4-5)×0.595/(500000×0.6)≈6.7μH。
实际选型我建议取稍大一级的10μH,纹波更小,而且电感的饱和电流要留至少1.5倍裕量,也就是别低于3A。BUCK的输出电容直接影响瞬态响应,我用了两颗22μF的X7R陶瓷电容并联,ESR比较低,实测在电机堵转瞬间压降能控制在200mV以内。
注意:陶瓷电容在DC偏压下实际容量会衰减,X7R在20V额定电压下打到8.4V时容量可能只剩标称的60%左右,所以选输出电容时别卡着理论值选,要留出足够的余量。
2.3 PMOS防倒灌电路原理
有一个很容易被忽略的细节是电池反接保护。车模装电池的位置在比赛现场往往手忙脚乱,正负极插错一次,板子上的电解电容直接炸。简单的做法是串联一颗二极管,但二极管有0.4V左右的正向压降,对于本来就吃电流的电机驱动,这0.4V就是白白损失的动力。
我们的做法是用一颗PMOS做防倒灌开关,电路接法是:PMOS的S极接电池正极,D极接负载,G极通过一个10kΩ电阻接地。正常接法时,Vgs为负,PMOS导通,压降只有I×Rds(on),以AOD4184为例,Rds(on)约20mΩ,2A电流下压降只有40mV。反接时,GS电压为正,PMOS截止,整个系统断开。这种电路在电池供电的产品里非常常见,成本只比防反二极管贵一块钱,效果却好得多。
2.4 复位电路与外部看门狗
MCU复位电路方面,很多人直接用芯片数据手册里的最小电路——一颗10kΩ上拉加一颗100nF电容到地。但智能车运行环境里干扰源多,电机火花、舵机大电流切换都会在复位引脚上耦合出毛刺,导致单片机频繁复位或者进入异常状态。我们做法是在复位引脚上并联一颗100nF电容之外,再加了一颗ESD保护二极管,并且在PCB布局时让复位引脚走线尽量短且远离电机驱动部分的功率走线。
关于看门狗,我想多说一句。STM32内部的IWDG(独立看门狗)虽然方便,但它依赖内部LSI时钟,一旦芯片死机到时钟系统都紊乱的程度,内部看门狗也可能失效。所以我们在主控板上专门挂了一颗外部看门狗芯片,选的型号是MAX809或者国产的类似复位芯片,喂狗信号直接接MCU的一个GPIO。程序里在主循环和关键中断里都要喂狗,如果代码跑飞,外部看门狗在1.6秒内强制复位MCU,让车模至少还能在赛道上恢复,而不是直接冲出边界。
2.5 电源调试中的坑
这里整理一下我们调试电源时踩过最典型的几个问题:
- BUCK空载输出正常,带载后电压跌到4V以内。大概率是电感饱和了,换饱和电流更大的电感。
- 单片机一上电就发热。电源引脚焊反或LDO输入输出接反,这个只能靠焊板前的仔细核对来避免。
- 电池电压8.4V,5V输出纹波有100mV以上。排查BUCK补偿网络,另外确认输出电容是不是被手贴成小封装贴错了,我们干过把0805的22μF贴成0603的1μF这种事。
3. 传感器信号链:咪头差分、电流采样与滤波优化
3.1 咪头差分放大电路设计
21届有很多队伍用了电磁检测方案,也就是通过线圈感应赛道下方的交变磁场来巡线。咪头(驻极体麦克风)差分电路放在这里其实有点跨界的意思,但原理是通用的——微弱信号放大与共模抑制。
我们用的核心是仪表放大器INA128或AD620这类差分放大芯片,也可以用运放搭建三运放仪表放大器,关键在于输入信号的采集方式。电磁线圈的两个输出端分别接运放的同相和反相输入端,而不是一端接地。这样赛道工频干扰、电机产生的共模噪声会同时出现在两个输入端上,被差分放大器天然抑制掉。实测下来同样一段赛道,单端采集的波形信噪比差到没法看,换成差分接法后信号干净得可以直接送ADC。
咪头差分电路在处理音频类信号时,还要注意给咪头提供合适的偏置。驻极体麦克风内部有FET,需要一个上拉到电源的电阻提供偏置电流,这个电阻的取值决定了灵敏度和静态工作点。通常2.2kΩ到4.7kΩ都可以,但实际要根据咪头型号和放大倍数去调,过大灵敏度高但容易自激,过小信号弱。
3.2 电流采样与输入滤波
电流采样分两条链路:电池总电流采样和电机相电流采样。电池总电流用来做低电量保护,电机相电流用来做堵转检测,这两个信号都是进MCU ADC的。采样用的都是低阻值采样电阻加差分放大器,但采样电阻选取时有讲究——阻值太大会造成明显的压降损失,太小了信号太小信噪比差。
我们用的是5mΩ合金采样电阻配INA240这类带PWM抑制的电流放大器,放大倍数20倍。这里说一个计算:5mΩ电阻流过5A电流时压降为25mV,经INA240放大20倍后是500mV,完全落在中国ADC的输入范围里。采样电阻的功率额定值也要注意,5A×0.005Ω=0.125W,留2倍以上余量至少要选0.25W以上的功率电阻。
输入滤波我们加了一级RC低通,截止频率设置为1kHz左右。计算公式是f_c=1/(2πRC),取R=1kΩ、C=220nF时,f_c≈723Hz,如果觉得还是太灵敏,可以换成C=470nF,截止频率降到338Hz。RC滤波会带来相位延迟,用于电流环这种高频控制链路时要注意校准延迟对环路稳定性的影响,我们是在算法里补偿了一个固定延迟。
3.3 防抖与去毛刺电路
按键防抖在智能车上也是常态问题。赛前调试时总会遇到启动按键按一下没反应、按两下变三下的情况,本质是机械触点机械抖动产生多个脉冲。硬件上最简单的做法是RC低通滤波加施密特触发器,用RC把电平变化时的毛刺吸收掉,再用施密特触发器恢复出边沿陡峭的干净信号。
我们用的是一颗单路的施密特触发器芯片SN74LVC1G17,前面接一个10kΩ电阻和100nF电容到地组成的低通滤波。这个组合的关键参数是时间常数τ=RC=1ms,机械抖动一般在5~10ms内结束,所以这个时间常数可以滤掉大部分抖动。如果按键距离MCU引脚较远,可以适当把这个电阻调小、电容调大,增强抗干扰能力。
防抖电路不是越“干净”越好,如果RC时间常数太大,按键的响应速度就会变慢,急停按钮延迟100ms那就是事故。防抖参数要结合触发场景的实时性要求来平衡。
4. 通信接口:485自动收发与电平转换实战
4.1 485自动收发电路的原理与参数
智能车竞赛的场地里,裁判系统和车模之间的通信非常关键,很多队伍用RS485做有线通信,因为它抗干扰能力强、支持一主多从。传统485电路要用MCU的一个IO来做收发方向控制,每次发送前拉高、发送完拉低,如果时序控制有偏差,就会出现收发冲突。
我们用的方案是485自动收发电路,核心原理是用三极管或MOS管根据TX信号的电平变化自动切换收发状态,省掉一个GPIO。经典接法是用一颗PNP三极管与电阻配合:TX空闲时为高电平,三极管截止,RE和DE被上拉到高,485芯片处于接收状态;TX发送低电平时,三极管导通,RE和DE被拉低,芯片自动切换为发送状态。
这种电路设计时最关键的参数是TX到RE/DE切换的延时,推荐在RE/DE引脚加一个10nF左右的电容,用来吸收切换瞬间的毛刺,但别加太大,否则收发切换延时增大,波特率高了会丢字节。实测效果很好,整场比赛我们只用了一套485总线与上位机通信,没出现过一次收发卡死的情况。
4.2 3.3V转1.8V电平转换电路
21届的摄像头模块有不少是1.8V电平的I/O,MCU是3.3V,直接连接会损坏摄像头的IO口。最简单的方案是电阻分压,但分压电路的驱动能力差,在信号频率高的时候边沿会变缓。更好的方案是用两到三颗三极管组成推挽式的电平转换电路,或者用支持双向电平转换的芯片如TXS0108E。
我们最后用的是一颗专门的双向电平转换芯片TXS0102(两路版本)来接摄像头信号线,同时给I2C总线也留了一个通道。这个芯片和用三极管搭的电路相比,不需要关心方向控制信号,任何一路拉低都会导通通路。它的自动方向感应的原理很适合I2C这种双向数据线。如果只看单向UART信号,用一颗NPN三极管加两个电阻也能完成电平转换,性价比最高,但要注意三极管的开关速度,波特率115200时用2N7000 MOSFET会更好。
5. 抗干扰、EMI与PCB设计实战
5.1 EMI滤波与电源入口处理
车模电机是一个巨大的电磁干扰源。换向火花会辐射宽带噪声,同时电池线缆又是天线,干扰直接耦合进整个系统。我们在电池入口处加了一级EMI滤波电路,常见拓扑是共模电感加X电容加Y电容,但在小车这种空间有限的地方,没法用完整的EMI滤波网络,折中方案是:
- 靠近电池入口并联一颗100μF电解电容和一颗100nF陶瓷电容,分别吸收低频纹波和高频噪声。
- 电池正负线上套一个磁环,能明显抑制共模干扰传导。
- 在电机驱动板上,靠近电机的地方加一组100nF陶瓷电容加10nF电容的组合,把火花噪声就近旁路。
实测在最严酷的电机PWM负载下,逻辑电源纹波从加装前的80mV降到了30mV以内,这个变化直接反映在了摄像头画面上——原来图像会有微弱的横纹干扰,加了滤波之后画面干净多了。
5.2 布线布局的实战心得
PCB布局布线这块,想写的东西太多了。先说一个很多队伍都会犯的错:信号线从电机驱动下方穿过,或者和电机驱动共用一个过孔回流。我建议PCB布局时采用分区布局,把电源、模拟、数字、功率四个区域明确分开。
- 功率区放在板子一侧,电机驱动芯片和采样电阻就近放置,走线短粗。
- 模拟区(传感器信号调理)远离功率区至少5mm以上,周围用地包起来。
- 数字区(MCU和通信芯片)放在中间,方便走线但不要让数字信号线横跨模拟区。
- 地平面尽量完整,不要在模拟区下方开槽,回流路径被切断会让噪声问题恶化。
还有一条经验:采样信号走差分对时,两根线要等长且紧耦合,可以用3W原则控制线间距(即线距是线宽的三倍)。我们第一版板子就是嫌麻烦,把差分线的两根走了板子的两端,结果共模抑制比大大下降,本来以为是运放的问题,后来重新布线就好了。
6. 开源背后的工程管理经验
6.1 开源仓库怎么组织
很多队伍说“我们也会开源”,结果打开仓库一看,一个压缩包扔在那里,里面是AD工程文件加一堆无命名PCB。这种开源对别人帮助非常有限。我们开源目录的组织经过了思考,核心原则是“让别人从头到尾不用问你一句话也能看懂”。
仓库结构大致这样:
Soberup-21届疯狂电路组开源/ ├── README.md 项目说明、硬件架构图、版本记录 ├── datasheet/ 所有芯片的数据手册和封转资料 ├── hardware/ │ ├── schematics/ 原理图PDF和源工程 │ ├── pcbs/ PCB源工程和Gerber文件 │ └── docs/ 每个模块的设计说明文档 ├── firmware/ │ ├── mcu_core/ MCU底层驱动 │ └── control_loop/ 控制算法相关代码 └── tools/ 调试脚本和计算表格目录文档的每一篇设计说明都包含背景、原理、参数计算、实测波形和问题记录五个章节。参数计算里为什么要选这个值、哪些参数可以调、调了有什么影响,全都写清楚。这样下一届队伍拿到这个目录,不是拿到一个死电路,而是拿到一个可以按需演进的活方案。
6.2 文档化与版本管理心得
我用Git管理整个开源项目,包括硬件工程文件。很多人觉得Git只适合代码,其实硬件工程文件同样需要版本控制——当你改了一版PCB之后发现还是上一版好用的时刻,没有版本管理就只能欲哭无泪。我们在每次打板前都会打个tag,标记“V2.3 赛前备用板”“V3.0 决赛版”这样的标签,配合Git的提交记录能快速定位改动。
文档更新也遵循一个固定节奏:每调通一个模块,当天就把笔记更新进对应文档。隔天再写就会丢掉很多细节,比如“当时换了哪颗R21,现象是什么,为什么这么改”,这些细节是写在朋友圈里的,不是存在脑子里的。我自己习惯用Markdown写技术笔记,然后统一push到仓库的docs目录,这样从原理说明到调试记录,所有内容都沉淀在项目里,随时可以回溯。
6.3 给下一届队伍的建议
如果要我提炼几条最有价值的经验给下一届队伍:
第一,硬件设计不要把希望寄托在“某个芯片很强”上,电源、采样、通信这些基本功过不了关,再好的车模算法也白搭。要舍得在最基础的电路模块上花大量时间调试和优化。
第二,开源不是比赛结束后的任务,而是整个备赛过程中的伴随产物。把每次改版、每次实测、每个问题记录下来,赛后再整理成开源文档,工作量只是把所有笔记归个类而已。如果比赛结束后才开始回忆和整理,很多珍贵的细节早就丢了。
第三,选型时不要迷信进口高端料,不少国产芯片的性能和稳定性完全够用。我们电源部分用的BUCK芯片和LDO,后来都换成了国产替代,实测参数几乎一致,但成本和供货稳定性好很多。
第四,遇到奇怪的问题,先怀疑电源,再怀疑接触不良,最后才怀疑芯片。这是我在整个21届备赛过程中最深刻的体会——80%的硬件谜团都可以追溯到供电纹波、地弹或者接触电阻上。
我个人在实际操作中还有一个很深的体会:智能车硬件设计的价值不只是那张能跑的车模,而是你在这个过程中形成的系统思维能力。从一块裸板到一套稳定运行的嵌入式系统,需要的是供电、采样、通信、软件、机械等所有环节的协同认知。我整理这份开源目录,本质上就是想把这些认知尽可能完整地传递下去。如果你也是准备参赛的电子爱好者,希望这篇导读能帮你少走一些我们走过的弯路。