智能车竞赛电路开源实战:信号链路、电源与调试全解析
每年智能车竞赛结束后总有队伍把代码往GitHub上一放就算“开源”了但电路部分要么只有一张最终PCB截图要么就是“原理图在QQ群文件里”这种永远不会真正公开的东西。Soberup战队在第二十一届智能车竞赛疯狂电路组赛后整理的这份开源目录算是我见过的少数真正能复现的智能车电路开源之一——不光给了原理图和PCB连信号链路推导、电源树设计、调试踩坑记录都归档了。这篇文章就围绕这份开源目录把里面最核心的电路设计思路、关键参数计算、以及那些不跑赛道根本发现不了的坑一次讲清楚。如果你正在备赛、或者打算明年接手电路组这篇内容应该能帮你少走至少三个月的弯路。1. 开源目录里到底交付了什么从仓库结构到六块核心板卡先别急着看电路图。打开Soberup的开源仓库你第一眼看到的是文档在先、硬件次之、软件垫后的目录结构这个顺序本身就是他们踩过坑之后总结出来的。1.1 仓库顶层结构设计与各板卡职责划分这套开源目录的顶层结构大概是这样的Soberup-Circuit/ ├── docs/ │ ├── 01-系统总体设计.md │ ├── 02-电源树与可靠性设计.md │ ├── 03-信号链路设计说明.md │ └── 04-调试记录与Bug复盘.md ├── hardware/ │ ├── power_board/ 电源板 │ ├── sensor_board/ 电磁传感器板 │ ├── main_board/ 主控板 │ ├── motor_board/ 驱动板 │ └── debug_board/ 调试板 ├── software/ │ ├── firmware/ 主控固件 │ └── tools/ 调试上位机脚本 └── README.md每块板卡的定位都非常干净利落。电源板是整车的“心脏”从电池输入到多路DCDC再到防倒灌和EMI滤波全在这块板上传感器板负责前端的咪头差分放大、带通滤波和正交信号生成主控板承载主控芯片、复位电路、看门狗以及对外接口驱动板专门处理电机驱动、电流采样和编码器接口调试板集成按键、LED、OLED和串口方便现场调参。我个人特别喜欢他们把docs放在最前面的做法。很多队伍开源就是丢一堆工程文件别人根本不知道从哪看起。Soberup在README里写了一段话这套资料按“先读文档、再仿电路、最后改代码”的顺序使用任何一块板卡改动了记录的调试文档也要同步更新。这其实是研发流程规范问题跟电路本身同样重要。1.2 为什么电路开源比代码开源更稀缺很多参赛队伍愿意分享代码因为代码本身就是一行一行写出来的贴出来不心疼。但电路不一样一套原理图背后是几十个版本的迭代、几片烧掉的芯片、反复优化的走线和布局。愿意把这些完全公开的队伍确实不多。Soberup开源目录里最值钱的部分其实不是最终的原理图PDF而是docs/04-调试记录与Bug复盘.md——里面记录了每一块板卡从第一版到最终版之间发生了什么。比如电源板第一版的DCDC反馈电阻布局不合理导致纹波偏大、传感器板咪头差分走线不等长导致共模干扰、主控板复位引脚被看门狗毛刺误触发等等。这些内容普通教程里根本找不到只有在实际调车过程中才会碰到。2. 电磁信号链路的完整设计咪头差分、带通滤波与正交信号生成疯狂电路组或者说电磁组的核心问题就是怎么把赛道上的电磁信号“干净地”送进单片机ADC。这听起来简单实际上信号链路上任何一个环节处理不好车都会“发疯”——要么过弯识别不到信号要么直线误判为弯道。2.1 咪头差分放大电路的偏置与增益设计先说传感器前端。赛道信号是20kHz左右的正弦电磁波接收端可以用工字电感也可以用咪头。Soberup在21届选择了咪头方案并且做了差分结构这是有讲究的。差分放大的核心优势就是抑制共模干扰。赛道上同时存在电机PWM辐射、电源纹波、日光灯干扰等大量共模噪声如果用单端放大这些噪声会直接叠加在信号上差分结构下两条输入线上的共模噪声经过运放相减后被抵消掉了剩下的是有用的差模信号。具体电路上他们选用了一颗低成本双运放做两级放大。第一级是差分转单端第二级是同相放大。整个电路的关键是给运放提供合适的工作点和放大倍数。以常见的3.3V供电轨为例运放同相端的虚拟地设置在1.65V——这样输出可以在0~3.3V范围内摆幅最大化不至于过早削顶。放大倍数的选择取决于咪头或电感输出的原始信号幅度。实测中离赛道中心线越近感应信号越大越远越小。以他们的车为例传感器距离赛道导线垂直距离约10cm中心线上测到的原始信号峰值大约5~10mV而最小可识别的偏移信号可能只有几百微伏。如果总增益设计为100倍那么中心线上输出大约0.5~1V峰值边缘输出几十毫伏单片机ADC读起来动态范围比较合适。分别用10k和1k的电阻配置第一级增益11倍、第二级增益10倍两级串联后理论总增益110倍基本落在预期范围内。计算公式就是常见的同相放大器G 1 Rf/Rg。但这里有一个我在实际中反复强调的点放大倍数不是越大越好。增益过高时运放输出很快饱和而饱和后信号会变成“方波”——单片机拿到的是一个失真的信号反而丢失了距离信息。所以合适的AGC策略是先让增益大概适配最大信号其余的靠软件归一化处理。2.2 带通滤波与正交信号生成的实现细节信号经过放大后还不能直接进ADC必须经过带通滤波。20kHz是电磁组赛道的标准信号频率带通滤波的作用就是把其他频率的干扰全部压下去只留下20kHz附近的有用信号。Soberup在文档里用了多反馈带通滤波器MFB结构中心频率f0 20kHz品质因数Q大概取1.5。Q值决定了通带宽度Q太大带宽太窄信号频率稍有偏差衰减就很大Q太小滤波效果不明显。Q1.5时带宽约13kHz既能抑制掉电机PWM的低频干扰又不会对20kHz信号造成太大衰减。MFB带通滤波器的元件计算可以直接套公式。选C1nF然后算R1、R2、R3R1 Q / (ω0 * C * Av)ω0 2πf0 ≈ 125664 rad/sR2 Q / (ω0 * C * (2Q² - Av))注意分子分母关系要保证Av 2Q²R3 2Q / (ω0 * C)按照Av1、Q1.5计算R1约12kR2约2.4kR3约23.8k实际用标称值近似替代。这个计算过程在开源文档里写得很完整读起来像是一份标准的滤波器设计教程。正交信号生成是电磁组进阶玩法。单纯用一个传感器只能知道信号强弱不知道车在赛道中心线左边还是右边。Soberup的做法是使用两路传感器一路作为基准信号另一路经过90°移相利用相位差判断车体的横向偏移方向。移相网络用的是全通滤波器结构参数针对20kHz精确设计。正交信号进入单片机后用定时器捕获相位差或者用硬件比较器做过零检测从而输出左右偏移量和方向。实际调车的时候你会发现正交相位法的抗干扰能力比单纯幅值法强很多因为幅值容易受路面高度、供电电压波动影响而相位差相对稳定。这也是他们21届在电路组能跑出稳定成绩的核心原因之一。2.3 电流采样与输入滤波的耦合问题信号链路上还有一个容易被忽略的环节——电流采样。电机电流采样不是直接给ADC中间要加RC低通滤波。Soberup文档里有个很典型的例子采样电阻是0.01Ω电流信号经过INA240放大INA240输出接到主控ADC之前加了一级RC低通滤波截止频率约100kHzR1kC1.5nF。这里需要特别注意RC滤波的电容一定要靠近ADC引脚放置如果放在运放输出端而走线很长寄生电感会和电容形成谐振反而引入高频噪声。电流采样最容易翻车的地方恰恰是这个小细节。3. 电源与可靠性设计DCDC多路供电、防倒灌、看门狗复位与TVS保护电源是智能车里最不性感但最致命的部分。Soberup这套开源目录在电源设计上的投入明显比一般战队高一个量级。他们的电源板经历了三次大改版最终稳定版几乎是把所有曾经导致整车宕机的因素都堵死了。3.1 从4.2V锂电池到多路电源轨的供电架构整车用单节4.2V锂电池供电但主控需要3.3V、传感器需要5V、电机驱动需要6~7V平台这中间的电压转换全靠电源板完成。Soberup的电源树大致是电池→DCDC升压到8V→DCDC降压5V→LDO出3.3V。很多人不理解为什么中间要升压再降压直接电池5V不行吗原因是电池电压会从4.2V一路掉到3.3V左右如果直接做5V降压低电量时根本稳不住而电机驱动需要的电压往往高于电池电压升压到8V后即使电池掉到3.4V驱动平台依然稳定。8V再降压5V输入输出压差足够DCDC工作效率高5V纹波也小。DCDC选型上他们用的是集成MOS的同步降压方案500kHz开关频率。这类芯片外围简单电感选值直接按芯片数据手册推荐即可。以5V输出、最大2A负载为例电感纹波电流取最大负载的30%约0.6A按公式L (Vin-Vout)×Vout / (Vin×f×ΔI)估算输入8V、输出5V、频率500kHz时L ≈ (8-5)×5 / (8×500k×0.6) ≈ 6.25μH实际取6.8μH标称值。3.3V直接用一颗低噪声LDO从5V取电因为主控ADC的参考电压对纹波敏感LDO比DCDC干净得多。3.2 PMOS防倒灌电路与反接保护的实际接法智能车电池插拔频繁接口抖动、接反是家常便饭。Soberup电源板上有两道防线一是电池输入口的TVS二极管瞬态抑制二极管吸收反接瞬间的尖峰二是PMOS管防倒灌电路防止电流从电源系统“倒灌”回电池。PMOS防倒灌的接法其实不复杂PMOS的S极接电池正极D极接负载端G极通过一个电阻拉到电池正极同时G极接一个控制信号。正常上电时控制信号把G极拉低PMOS导通当电池反接或掉电时G极为高电平PMOS关闭负载端无法向电池端倒灌电流。这里有一个细节G极下拉控制信号的电平要与电池正极电压匹配如果控制信号来自3.3V单片机需要用三极管或MOS管做电平转换直接拉会有风险。Soberup的方案是用一颗小NPN三极管做反相驱动三极管导通时PMOS的G极被拉到地PMOS导通三极管截止时PMOS的G极经上拉电阻回到电池电压PMOS关断。这个小电路整车上电时序、断电时序都靠它保证。3.3 Buck电路EMI滤波与布局心得Buck电路是整车噪声的主要来源之一。开关节点上有高频方波如果布局不好传导干扰和辐射干扰会直接影响传感器信号。Soberup在电源板上的EMI处理有几个可复用的做法输入侧放π型滤波电解电容磁珠陶瓷电容的组合把电池线上的高频噪声挡在Buck外面开关节点尽量短粗减小辐射环路面积反馈电阻采样点从输出电容正极单独走线而不是从电感后面直接取——这条走线离开关节点越远越安全输出端加大容量陶瓷电容同时并联一颗小电容吸收高频尖峰他们在调试文档里记录了这样一个过程电机转起来后单片机ADC采样值波动加剧示波器看到3.3V上有约200mV的开关纹波。排查后发现是一款Buck芯片的布局中反馈网络走线穿过了开关节点下方拾取了高频干扰。重新布局、把反馈走线绕开后纹波降到20mV以内。这就是EMI布局的价值——看得见的干扰都是小问题看不见的耦合才是大问题。3.4 看门狗、复位电路与TVS保护三者如何协同单片机跑飞在赛场上时有发生Soberup主控板上把看门狗和复位电路做成了“双保险”。独立看门狗超时后触发芯片复位这是第一层外部复位芯片监测3.3V电压当电压低于2.93V阈值时强制拉低复位脚这是第二层。两层结合起来既防程序死循环又防电源跌落时MCU处在不确定状态。复位电路用的是经典架构复位芯片加手动复位按键按键并联100nF电容做防抖复位芯片输出端到MCU复位脚串一个100Ω电阻做限流。这个100Ω电阻很多人忽略其实它很有用——能抑制复位线上的高频毛刺还可以在调试时用飞线直接拉低复位脚而不影响芯片输出有源器件。TVS保护主要放在对外接口上。电池输入端、电机输出端、RS485接口、按键接口都放了TVS管。TVS选型原则反向击穿电压要高于正常工作最高电压但低于被保护器件的极限耐压。比如3.3V系统选SMBJ3.3A或类似型号电池端选Vrwm 5V、击穿电压6.4V的型号。这样正常工作时TVS不导通关断异常尖峰来临时快速钳位。4. 执行与通信RS485自动收发、电机驱动和HX711采样的实现细节电路组的新人经常扎在传感器上出不来把电机驱动和通信当成“能用就行”。但Soberup这套开源目录里执行层的设计其实占了相当大的篇幅因为车“跑得快但不听话”的根源几乎都在这里。4.1 RS485自动收发电路两种方案对比整车需要和调试上位机通信赛道上也常需要发送状态数据。RS485是竞赛圈的标配协议但很多队伍栽在方向控制上——收发切换不及时就会丢帧或者半双工冲突。Soberup文档里对比了两种方案第一种是传统方案MAX3485外设方向控制脚DE/RE由单片机IO控制收发方向。优点是电路直观可控缺点是每次发送前要先拉高DE、发完再拉低如果程序里漏了一条延时指令总线就会冲突。第二种是全自动方案用带自动方向功能的芯片比如MAX13487E系列。芯片内部自动检测发送数据和总线状态不需要MCU干预对程序极其友好。Soberup最终选了自动方向方案电路上省去了方向控制IO固件也更简洁。自动化方案还有一些细节要注意总线端要接终端匹配电阻120Ω并且在A/B线上各接一个偏置电阻典型10k保证总线空闲时电平确定。否则空闲状态下总线电平不定接收端会收到乱码。4.2 电机驱动电路中的死区时间与电流采样电机驱动是另一个重灾区。Soberup驱动板用的是栅极驱动芯片加外部N沟道MOS的H桥结构。栅极驱动的死区时间设置非常关键如果上下桥臂同时导通就是直通短路瞬间烧毁MOS或者拉垮电源。一般栅极驱动芯片都有死区时间引脚或者通过外围电阻设定。如果不支持硬件死区配置在单片机PWM输出端做软件死区——两个PWM通道输出波形加一段互锁延时。我的建议是能硬件死区就不要依赖软件因为程序跑飞时软件死区就失效了。电流采样用低边采样采样电阻0.01Ω经过差分放大器放大后接ADC。这里有个容易踩的坑低边采样电阻的地必须单独走线回到电源负极不能在主控地平面里绕一圈否则大电流在地线上产生压降采出来的电流误差很大。Soberup调试记录里专门有一条电机堵转时ADC读数比实际电流偏大15%原因就是地线走线太长。4.3 HX711电路在电池电压监测中的应用HX711通常被用在称重模块上但Soberup把它用在了电池电压的精确采集上。整车动态电流很大电池电压瞬态波动非常明显而ADC直接采集电压时如果参考电源本身不稳读数会跟着漂。HX711是一个24位高精度ADC差分输入、自带低噪声放大器用来做高精度电压测量很合适。HX711与MCU接口只需要两根线SCK和DOUT。时序是DOUT拉低表示数据就绪然后MCU给出24个SCK脉冲每来一个脉冲读出一位数据最高位在前。第25个脉冲切换通道/增益。Soberup文档里专门提醒读取HX711时要注意连续两次读取之间的时间间隔太快会读到旧数据或噪声正确的做法是等DOUT再次拉低再读。电池电压数据经过校准后可以用来估算剩余电量并且在电压低于阈值时让车进入“降功率保护模式”——不至于因为电池掉压导致转向突然失灵。这个小功能帮他们在赛场上避免了一次因电池老化的意外。5. 从原理图到赛道一套可复用的电路调试思路开源目录里除了电路图还沉淀了一套方法论。这套方法不是他们原创的但难得之处在于把每一步都落到了纸上形成了可执行的调试流程。5.1 信号链路排查的三步法Soberup在调试文档里总结了一套“三步定位法”先查电源再查信号源最后查MCU配置。第一步查电源用示波器测各级电源轨的上电波形和纹波。电源轨如果没有起来或者有跌落毛刺后面的一切都无从谈起。很多所谓的“信号全无”问题最后都归结到某一颗LDO没输出了。第二步查信号源把传感器输出用示波器直接测量确认信号幅度、频率和形状符合设计预期。如果传感器本身没有输出那就没必要继续往后查。这里要特别注意示波器探头用1x挡还是10x挡微弱信号必须用1x挡或者加有源探头否则探头本身的衰减会让信号看起来“好像没信号”。第三步才查MCU配置。ADC通道有没有配错、定时器是否启动、DMA中断是否开启——这些软件层面问题反而最后查。Soberup的排查顺序是硬件优先、软件次之因为硬件问题往往会导致软件问题假象在根子上把水电煤解决了很多“程序跑飞”的假象会自动消失。5.2 故障现象与排查手段对照表调试文档里有一张典型的故障对照表直接引用现象可能原因排查手段上电电流异常偏大DCDC输出短路、MOS直通、电池接反断开负载逐级上电热成像仪看发热点传感器信号全无咪头损坏、运放供电缺失、信号被EMI压制示波器测咪头输出和运放输出单片机反复复位复位芯片误触发、看门狗超时、电源跌落逻辑分析仪抓复位引脚波形查喂狗代码RS485通信乱码A/B线接反、终端电阻缺失、波特率误差示波器看总线波形核对收发线路电机堵转电流不准地线走线过长、采样电容过大检查低边采样地线核对RC滤波参数这张表最实用之处在于每条都给出了“下一步动作”而不是抽象描述。调试时最怕的就是停留在“好像哪里不对”的阶段真正有效的排查一定是把现象转化成具体的测试动作。5.3 示波器测量中的常见误区智能车调试中用示波器最容易犯的错误有三个。第一个是探头地线夹子夹得离测试点太远。探头地线本身有电感高频信号下会形成LC谐振在波形上叠加振铃干扰。正确做法是地线尽量短最好用地线弹簧直接压在测试点附近。第二个是用10x挡测微弱信号。10x挡会衰减信号幅度看起来像没有输出。测信号链路时先用1x挡确认幅度再切换到10x挡看细节。第三个是忽略了示波器带宽限制。测20kHz的传感器信号200MHz带宽完全够用但如果你想看DCDC开关节点的高频振铃带宽不够的话振铃会被滤掉你就看不到真实的问题。Soberup的文档里建议至少准备一台100MHz以上的示波器四通道更佳同时抓电源和信号两条线。6. 复盘21届比赛中最容易翻车的几个电路节点这一章是在写的时候有意加进来的因为21届Soberup的开源目录里最打动我的就是那份血泪史。几乎每一块板卡都有一段“本来以为没问题结果上了赛道就炸”的记录。6.1 看门狗与复位协同失效的典型案例他们遇到的一个最闹心的问题车在直线段突然失去转向响应随即系统自动重启。一开始怀疑是电源跌落但示波器抓电源很稳后来用逻辑分析仪抓复位脚发现MCU的复位脚每隔几十秒被拉低一次持续约2ms随即恢复。而外部复位芯片的输出并不是这个频率说明MCU是被内部看门狗触发的复位的。进一步查才发现程序在跑正交信号相位差计算时偶尔会进入一个长达几十毫秒的阻塞等待——传感器数据异常时用了while轮询等待没有超时退出导致主循环喂狗间隔超过看门狗超时时间。而看门狗触发复位后电机驱动PWM在这个瞬间仍在输出状态车就猛地冲了一下。修复方案有两个层面硬件上在MCU复位期间给电机驱动使能脚加一个下拉电阻确保复位时驱动默认关闭软件上把阻塞等待改为带超时判断的状态机喂狗只在主循环固定位置执行。双重保障之后这个故障基本绝迹。这个故事也说明一个道理可靠性设计永远不要只依赖软件硬件上的失败默认状态比程序逻辑更可靠。6.2 拨码开关防抖电路的RC取值实测Soberup调试板用了四路拨码开关来切换运行模式结果赛前实测时发现拨动开关的瞬间MCU经常读到两次跳变导致模式切换逻辑错乱。这就是典型的机械抖动问题。拨码开关内部簧片在闭合瞬间会反弹产生一串几十微秒到几毫秒宽的脉冲。他们的第一版电路只在开关输出端加了一个10nF电容实际测试抖动仍然存在。后来按经验值调整串1k电阻、对地并100nF电容RC时间常数约100μs实测抖动完全消除。这个参数其实不算很保守——如果你希望更强的防抖效果可以用10k1μF但RC常数过大会导致响应变慢拨码后需要等待几百毫秒才被识别。智能车上切换模式要求不苛刻100μs级别的防抖已经完全够用。6.3 咪头差分电路的焊接与屏蔽细节传感器板最精贵的是咪头差分走线。Soberup在文档里特别叮嘱咪头本身是极化电容结构焊接时间过长或者温度过高会损坏内部振膜导致灵敏度下降甚至完全无声。建议用恒温烙铁350℃以下每个焊点尽量控制在2秒内完成。走线方面差分对的两根线必须紧密等间距走如果走线不等长或者被地线隔断了回流路径共模噪声就会转换成差模干扰直接进入运放输入端。他们还建议把咪头差分部分用铺铜包起来形成一个近似屏蔽罩的效果。实际测试中这一步做与不做在电机高速运转时传感器输出的噪声底噪能差三倍以上。6.4 对使用者的三点建议如果你准备照着这份开源目录抄板子我有几个基于他们文档的实际建议第一不要直接照搬参数先跑通自己的电源树。不同电池、不同电机、不同主控芯片的功耗差异很大Soberup的参数是基于他们的负载算出来的你换个大功率电机或者换了主控电流需求一变电感、电容、LDO型号都要重新验算。第二至少画一版自己的PCB。抄板子只能让你复现画板子才能让你真正理解为什么反馈电阻要这样走、为什么开关节点要短粗、为什么地平面要分区。就算画错了犯了他们犯过的错也比拿现成板子强。第三把调试记录当成电路设计的一部分。Soberup能整理出这份开源目录靠的不是最后的成果而是过程中写下的每一笔记录。建议从现在开始建一个Bug文件夹每次遇到问题都记下现象、排查过程、根因和修复方法赛后你会有可能也产出一份让下一届人受益的开源文档。我在实际带队伍过程中的体会是智能车电路组真正考验人的不是会算几个公式而是能在令人崩溃的噪声和异常之间找到那条通往稳定信号的窄路。Soberup这套开源目录把那条路摊开了接下来就看你怎么走了。