
第二十一届全国大学生智能车竞赛的备赛季已经陆续开始了。这个时间点上一支自嘲“疯狂电路组”的队伍 soberup 把自家电路组的开源目录放了出来目录里是他们在硬件方向上的整套设计资料。对准备参赛的队伍来说这相当于提前拿到一份“已经踩完坑”的路线图对做嵌入式硬件、想上手智能车的学生来说这份目录又像一本活电路教科书从电源到驱动再到信号调理几乎覆盖了智能车硬件的主干。先说点泼冷水的话很多人以为电路组就是画两块板子、焊几排线实际上从原理图到能稳定跑完全程中间隔着的坑比想象中多得多。soberup 的目录之所以值得逐项拆开看是因为它把“电路”这件事做成了可以复制的工程流程。这篇文章就顺着这个目录把设计逻辑、实操步骤和隐藏经验摊开讲一讲。1. 开源目录的结构一支队伍应有的“知识交付物”1.1 目录里真正值钱的东西不只是原理图和源码我见过不少所谓开源项目最后成果丢出来代码一个压缩包原理图一个 PDF就完事了。这种开源对后来者的价值会缩水一大半。soberup 的目录组织方式比较有代表性它把交付物分成四块每一块都有明确用途硬件工程原理图源文件、PCB 源文件、BOM 表、光绘文件、位号图。固件工程编译器工程、外设初始化代码、版本对应关系、烧录说明。调试资料上位机、串口解析脚本、调参记录、采集数据的处理脚本。文档笔记设计说明、测试记录、踩坑清单、赛后的复盘总结。这四块缺哪一块都会让复现成本陡增。就拿 BOM 表来说很多队伍只写“电阻 10k、电容 0.1uF”不标封装、不标耐压、不标电流等级也没写替代料。结果后来者画板子的时候自己去猜封装贴片 0603 和 0805 混在一起回来焊不上或者载流不够这才发现原版设计根本没法照抄。一份合格的 BOM 应该带上位号、型号、封装、数量、单价、替代型号这样别人才能真正做到“按单采购、按图施工”。固件工程和硬件必须对应起来这一点尤其容易被忽视。同一块板子V1.0 和 V1.1 的引脚定义可能都变了代码却还沿用旧版本最后点灯不亮排查半天发现是 GPIO 写错。开源目录里把“硬件版本”和“固件版本”的对应关系写清楚能省掉后来者大量无意义的时间消耗。还有一类资产容易被低估调试记录和踩坑清单。原理图只会告诉你“这里连了一个 100nF 电容”不会告诉你“这个电容是某次上电复位后加上的因为电机启动瞬间电源被拉低导致 MCU 掉电重启”。这种从现象到根因的笔记才是开源目录里最值钱的部分。1.2 版本与文档管理决定开源价值的隐形工作看一个开源目录的专业程度看它的版本管理方式就够了。我比较推荐的做法是硬件、软件同步编号比如 v1.0_0520、v1.1_0603每次改版都记清楚改了什么、为什么改。这样比赛结束三个月后你翻回来看目录还能想起来当时为什么要把电感从车头挪到车尾而不是对着两块几乎一样的板子发呆。改动记录不用搞得很复杂一张表就够了时间改动内容原因影响范围验证结果06-03R12 由 10k 改为 22k电磁信号放大倍数过高近线时饱和运放增益、ADC 数值直道弯道各测 5 圈稳定06-10电机驱动 H 桥自举电容换 1uF高占空比下上管驱动不足MOS 发热电机驱动、PWM 频率满载 10 分钟温度正常这种表格每一次改动其实都在回答一个“为什么”。真正有价值的开源不是把成品放出来而是把决策过程放出来。很多队伍只顾着赶进度从不记录比完赛想开源的时候发现自己根本讲不清当初为什么这么设计。所以如果你明年还想再战我的建议是从备赛第一天就建立版本管理和调试记录的习惯比赛结束时的“开源目录”就是你这几个月最完整的成长档案。2. 核心电路逐块拆解电路组的硬实力藏在哪2.1 电源系统buck 电路的选型逻辑与效率账智能车整车的能量来源是一块锂电常见的是 2S 7.4V 或者 3S 11.1V具体看赛题规定。问题在于电池并不是理想电压源电机启动、急刹瞬间电池电压会被拉低一截。电源模块的任务不是“输出 5V”这么简单而是在各种瞬态下稳住输出。车载上需要供电的东西大致分三类MCU 与传感器3.3V、5V、电机驱动逻辑部分12V 或电池直供、屏幕和扩展外设5V。如果全用一个 LDO 从 7.4V 降到 5V电流一大热耗会非常夸张。算一笔账压差 2.4V电流 0.5A线性稳压上的损耗就是 1.2W够把一个 SOT-23 封装的片子烤到烫手换成同步整流 buck效率按 90% 算同样条件下损耗大概只有 0.3W 左右差出 4 倍量级。所以大电流路径用 buck小电流模拟电路用 LDO是智能车主电源架构的一个基本共识。常见方案是选一颗同步整流 buck比如 MP2315、TPS563200、SY8303 这一档持续电流 2A 到 3A封装小外围简单。选型时留足裕量持续电流按负载峰值电流的 1.5 倍以上选别卡着极限算。这里有个容易踩的坑buck 输出电压纹波并不小如果不加处理直接给摄像头供电画面上很容易出现滚动横条。经验做法是 buck 输出之后再加一级 LC 滤波或者对噪声敏感的模拟电路用二级 LDO 单独供电。摄像头这种数字模拟混合的设备最好独立一路低噪声电源别和舵机、电机驱动逻辑电混在一起。方案效率纹波适用场景Buck高80%~95%较大需要后级滤波电机驱动逻辑电、摄像头主供电、舵机LDO低压差越大损耗越高低运放供电、小电流 MCU 供电电荷泵中等中等电流能力小产生负压、辅助供电2.2 电机驱动半桥、IR2110、图腾柱之间的那点事有刷直流电机是典型的感性负载峰值电流大还要频繁正反转和刹车。控制电机本质上是用 PWM 控制 MOSFET 的开关但 MOSFET 的栅极有米勒电容直接拿 MCU 的 GPIO 去推上升沿拖得又长又难看开关损耗和发热都上去了。所以栅极驱动级一定要有足够的灌电流和拉电流能力。这里就涉及到“图腾柱”这个概念所谓图腾柱输出就是两个三极管一个负责拉高、一个负责拉低一个推一个挽输出级驱动能力很强。你可以把它理解成水龙头开阀一个负责充水一个负责放水阀门开得才利索。很多队伍用的是 IR2110 这类半桥栅极驱动芯片内部已经把图腾柱输出和自举电路集成了。IR2110 驱动一个半桥两个半桥拼成全桥就能做电机正反转和刹车。用 IR2110 时有几个细节值得注意自举电容的选择要配合 PWM 频率。常用 0.1uF 到 1uF频率高取小值、频率低取大值容值太小上管维持不住容值太大会影响自举充电速度。栅极电阻一般在 10Ω 到 22Ω调这个电阻可以控制开关速度也能缓解振铃。这里不要照抄别人参数得匹配自己的 MOSFET 栅极电荷量。死区必须处理。上下管同时导通就是直通短路管子瞬间冒烟。IR2110 内部有一定死区但软件上也要尽量保证 PWM 互补输出时有合理的空档时间。半桥驱动这块最小系统大概就这些件IR2110 芯片、两颗 MOSFET、自举电容、栅极电阻再加续流路径。电机是感性负载PWM 关断瞬间电流不会突变为零如果没有续流通道反电动势直接打在 MOSFET 上一次就能打穿。这也是很多队伍“一上电电机转两下管子就炸”的常见原因之一。续流可以用功率二极管也可以依赖 MOS 管内部的体二极管但要确认其电流和时间参数足够。2.3 传感信号链运放经典电路和差分放大怎么落到智能车上智能车感知主要分两路摄像头组看图像电磁组读电感。无论哪一路信号调理都是电路组的重点。电磁组的经典方案是空心电感 谐振电容谐振频率对准赛场电磁线的激励频率。电感感应出来的信号是正弦波幅值能反映车和电磁线的相对位置关系但这个信号非常微弱必须放大。于是运放就登场了。很多人问“运算放大器 11 种经典电路”到底学哪些真正常用的其实就四板斧经典电路作用智能车里的典型位置电压跟随器提高输入阻抗隔离前后级高阻抗传感器输出避免信号衰减同相放大器放大微弱信号输入阻抗高单个电感信号的增益放大差分放大器两路信号做差抑制共模干扰左右电感偏差提取有源低通滤波器滤除高频噪声和 PWM 干扰传感器输出、运放输出后端差分放大器在智能车上非常重要的原因是车上的电磁干扰源实在太多。电机 PWM、buck 开关节点、电源走线都会通过空间辐射和地线耦合到传感器回路上形成严重的共模干扰。差分放大天然对两条输入线上“同向同幅”的干扰不敏感只放大两路信号之间的差值这就把噪声抵消掉一大半。如果你用单端放大去处理长距离传输过来的微弱电感信号PWM 噪声会一起被放大ADC 数值跳得跟心电图一样算法根本没法用。这里再补一个滤波的计算方法。一阶 RC 低通截止频率 f 1 / (2πRC)比如 10kΩ 电阻配 0.1uF 电容截止频率差不多 159Hz既能保留电磁信号的低频变化又能滤掉高频噪声。想滤得更多就加大电阻电容乘积但也要小心把有用的信号边沿滤没响应变迟钝。传感器信号线上的防抖其实分两层电路层的 RC 滤波、施密特触发器去抖和软件层的滑动平均、卡尔曼滤波。只靠软件硬扛扛不住硬件带来的周期性干扰只靠硬件滤又容易把关键跳变磨平。两边配合才是正路。2.4 可靠性设计看门狗、复位与电源保护赛场上 MCU 死机是特别要命的事车正在高速冲线突然失控轻则跑飞重则撞墙。看门狗在这里的作用不是触发一次就完事而是在程序跑飞后把车拉回可控状态。内部看门狗和外部看门狗芯片都可以用相对来说外部看门狗比如 MAX809、MAX823 这类更硬它不依赖 MCU 内部时钟还能顺带做欠压复位。喂狗的位置有讲究原则是放在主循环的关键控制路径上不能在中断里喂。因为程序跑飞时中断可能还在照常触发在中断里喂狗看门狗永远喂不饱也就失去了兜底意义。一个简单的示意while (1) { scheduler_run(); // 调度传感器采集与控制任务 if (ecu_ok()) { IWDG_ReloadCounter(); // 确认主流程正常走到这里再喂 } }复位电路也一样不要只放一个电容一个电阻完事。专用复位芯片能在上电瞬间给出可靠复位脉冲也能在电源低于阈值时强制复位比纯 RC 复位靠谱得多。电源保护方面反接保护很必要有极性防反接 MOS 管方案也有理想二极管控制器方案后者导通压降比肖特基二极管低很多功率损耗小。再就是 TVS 管和自恢复保险丝摄像头排线接口、下载器接口这些容易被静电和热插拔伤害的入口各放一颗做保护。无源蜂鸣器驱动这种小细节也很典型。蜂鸣器用三极管开关驱动反向并联续流二极管吸收关断尖峰不能直接拿 MCU 引脚硬推。这种电路很小但能在调试时省很多事——不同音调代表不同状态站在赛道边就能知道车现在卡在哪一步。3. 一套可以照抄的硬件制作流程3.1 从规则表到 BOM 表需求拆解与器件选型拿到赛题先不要急着开软件画原理图。先把规则里能影响硬件的点全部列出来赛道元素有什么、车辆是几轮驱动、用什么传感器、MCU 是哪颗、电池电压范围是多少。这些决定你要做几路电机驱动、几路信号采集、几个通信接口。很多队伍第一步就错了上来按网上模板画板结果规则一变又重新改版白白浪费两三周。需求拆完之后逐项列功能清单电机驱动 ×2、编码器接口 ×2、摄像头/电磁接口 ×1、电源输入 多路输出、调试串口、按键、LED、蜂鸣器。然后按功能分区在纸上画系统框图。这个时候再进 EDA 工具思路会非常清楚。选型阶段要守住一个原则留冗余、少堆料。以电机驱动半桥为例一颗 IR2110 加两颗 N-MOS再配几个阻容就能把一路半桥做扎实。位号型号封装数量说明U1IR2110SSOIC-161半桥栅极驱动Q1/Q2IRLR7843DPAK2低导通电阻 NMOSC11uF/25V X7R06031自举电容R1/R215Ω06032栅极电阻选型时边选边维护 BOM 表写上价格和替代料。到现场临时缺货这种事很常见替代料先写在表里真到焊板子那天能救你一命。还有一个小习惯每颗料的封装方向、引脚间距要对照 Datasheet 核对一遍画反二极管、画反 MOSFET 源漏都是新手翻车高发问题。3.2 PCB 布局布线的取舍与禁忌PCB 布局的核心就一句话把功能区块划清楚让大电流回路短而粗让敏感信号远离干扰源。电源入口放板边MCU 居中靠接口电机驱动靠近电机排线座传感器接口靠近板边方便走线。电源部分做一级局部铺铜Buck 开关节点底下尽量不要走长信号线。摄像头的数字信号线是高频数字信号最好加 33Ω 串阻抑制振铃排线不要太长否则信号完整性会明显变差。晶振底下不要走线晶振到 MCU 的走线要短周围用地过孔围起来。载流能力要算明白。1oz 铜厚下1mm 宽的铜箔大概能走 1A 电流长距离和高温环境下要加宽或者铺铜。电机驱动这类大电流路径单纯靠走线并不靠谱直接铺铜加多个过孔阵列过渡到另一面过孔不能只打一两个0.5mm 孔单孔载流有限并联三到五个才稳。两层板和四层板的选择我建议预算允许就尽量上四层。四层板中间一层完整地平面对摄像头高速信号和电源回路都有明显改善很多疑难干扰问题在两层板上是天生无解的。两层板不是不能用但布线和地线分割要多花很多心思。3.3 焊接、上电与分级调试焊接顺序要能保证每上一步电都能立刻验证结果。我的习惯是先焊电源部分再焊 MCU 最小系统最后焊外设接口和驱动。焊完电源只上电量 buck 和 LDO 的输出确认电压正常再继续。别等整板焊完再上电那样出了问题根本分不清是电源短路还是信号线连错。上电流程有一个非常实用的小经验第一次上电用可调电源电流限制设到 100mA 到 200mA电压调到额定值。如果电流瞬间顶到限流值立刻断电大概率有短路先拿万用表量电源对地电阻排查。这种“限流上电”能救下无数芯片和板子。焊接工具方面热风枪吹 QFN 这类引脚在底下的芯片时温度不要开太高350℃ 左右、风速三挡、距离两厘米顺着芯片周边小幅度画圈加热焊盘上的锡化了芯片自然坐下去。普通引脚芯片用烙铁拖焊助焊剂要舍得用拖完再洗板。系统联调也要分层验收顺序可以是上电点灯、串口打印、电机开环转、编码器读数、摄像头出图、电磁采集、闭环跑线。每过一层就在调试清单上打个勾哪一层没过就在那一层停下来查不要跨层排查。实际调车中最浪费时间的永远是“电机转得不错但是控制不稳”结果一查发现是编码器读数线程有问题这种低级问题越早暴露越好。4. 软硬联调控制量、信号与接口的正确打开方式4.1 把“PID 输出角速度”这个说法讲透搜智能车资料时常看到“PID 输出角速度”这种说法它其实把两个概念揉在一起了。PID 的输入永远是误差输出永远是控制量这个控制量到底是什么取决于你控制哪个对象。四轮车上常见的速度环输入是速度误差输出是 PWM 占空比编码器测回来的速度是反馈量不是 PID 的输出。如果你在某篇平衡车的文章里看到“PID 输出角速度”那通常是说外环角度环的输出作为内环角速度环的期望值角速度在这里是内环的给定不是 PID 计算出来的结果。把这层关系理顺看代码就不会被绕晕。一个基础的位置式 PID 实现大概是这个样子typedef struct { float kp, ki, kd; float integral, prev_error; float out_max, integ_max; } PID_t; float pid_update(PID_t *pid, float ref, float fb) { float err ref - fb; pid-integral err; if (pid-integral pid-integ_max) pid-integral pid-integ_max; if (pid-integral -pid-integ_max) pid-integral -pid-integ_max; float diff err - pid-prev_error; pid-prev_error err; float out pid-kp * err pid-ki * pid-integral pid-kd * diff; if (out pid-out_max) out pid-out_max; if (out -pid-out_max) out -pid-out_max; return out; }输出限幅、积分限幅必须写否则起步时积分疯狂累积超调会大得吓人。整定顺序一般先 P 后 I 再 DP 决定响应快慢I 消除稳态误差D 压制超调。每加一项之前都要在直道上测响应曲线不要凭感觉乱调。电机还有死区电压PWM 小到一定程度根本不转这个死区要在软件里做补偿硬件上很难完全消除。4.2 硬件与算法的接口设计从 PWM 频率到调试通道硬件和算法的配合体现在非常多细节里。PWM 频率建议放在 15kHz 到 20kHz 之间避开人耳可听范围也兼顾 MOSFET 开关损耗。频率太低电机啸叫频率太高栅极损耗增大。编码器接线的方向、相位都要核对如果 A/B 相接反了PID 会给反向控制量车一上电就往回窜。车上的接口类型大概就是这几类电机 PWM 和方向、编码器、摄像头并行/串行数据、电磁 ADC、串口/CAN/485 通信、SWD 下载。多板通信时比单串口更可靠的选择是 CAN 或者 485。485 的优势是长距离和抗干扰虽然车上板间距离不长但经过电机驱动和电源区域时普通 TTL 串口容易受干扰485 的差分特性会稳很多。用 485 时要注意收发方向切换一般用三极管或者 IO 控制收发使能别让收发同时打开。硬件一定要给软件留调试设施一个 LED 呼吸灯验证主循环一个按键切换菜单一个蜂鸣器播报状态一组空闲 IO 引出来备用。这些都是小成本但真到赛场上排障时每多一个观察口就少一次盲猜。5. 现场排查实录常见问题的根因与快速定位法5.1 一上电就发热、炸管、复位“通电摸芯片烫得缩手”是板上最经典的劝退场景。发热的常见原因有三类焊接短路、H 桥直通、驱动能力不足。排查顺序要固定下来先断电用万用表蜂鸣挡量电源对地电阻再限流上电看电流表有没有异常最后用示波器测关键波形比如 MOS 管栅极波形有没有“该关没关”的异常电平。MOS 炸管多半不是 MOS 本身质量问题。先看栅极驱动波形有没有振铃、有没有死区再看续流路径有没有接对最后才怀疑管子选型。很多时候驱动波形不对是栅极电阻阻值不合适换一个阻值问题就消失了。“电机一启动单片机就复位”这是电源被拉垮的典型症状。解决手段是三层并行输入侧加大容量电容PWM 做软启动让占空比从零缓加到目标逻辑电源和功率电源之间做好隔离。还有一个容易忽略的点就是复位芯片的阈值如果它比电源跌落谷值还高那每次大电流冲击都会触发复位这种问题光靠软件延时是救不回来的。5.2 图像抖动与信号毛刺摄像头画面出现斜纹、水波纹在电路组调试过程里几乎绕不开。根子大多是供电纹波叠到了传感器的模拟电源上或者地线形成了环路受到电机 PWM 电流的干扰。做法是给摄像头单独供电Buck 输出加 LC 滤波模拟地和数字地在主板上单点汇接。别小看“单点接地”这件事很多队伍的地线处处相连形成一个巨大的天线环路干扰信号全往里面灌。传感器信号毛刺可以从三个层面查电源噪声、走线串扰、接触不良。先看示波器探头点在传感器供电脚上的噪声再看信号线是否贴着大电流 PWM 走线最后排线座和接插件是否有氧化松动。排线过长、没有屏蔽也是常见原因把排线缩短并绞合效果立竿见影。5.3 跑飞、失控与“幽灵干扰”MCU 跑飞本质是程序计数器被干扰打飞。处理思路不是“加更厚的屏蔽”而是多层兜底看门狗强制复位、外部复位芯片预防欠压、IO 口配置成合适的上下拉、中断合理分配优先级。跑飞之后如果频繁重启说明不只是偶发干扰一定有持续的电源波动或者代码逻辑问题比如某条中断处理时间过长把主循环饿死了。失控这类问题很多时候不是算法写错而是传感器原始数值已经乱了。这正好接上前面差分放大和滤波的作用先看原始 ADC 数据在直道上稳不稳、过弯时变化是否连续再去动 PID。排查时给车上位机加了一个“安全模式”连续一段时间收不到有效传感器数据就自动刹车宁可原地停下也不横冲直撞。这个机制简单但非常管用不管在实验室还是赛场上都算一道保险。最后分享一点我的体会看 soberup 这个开源目录我最大的感受是它不只是把结果公开更是把整个“电路组”的工作方法公开了。文件名背后都是实打实的经历哪颗芯片在某次测试里烧了哪条走线改了三版哪个滤波参数在雨天赛道上飘了。这些内容比最终成型的原理图值钱得多。如果你正在备赛也想学着开源我的建议是不要等比赛结束才开始整理。从第一版原理图开始就建好文件夹写好改动记录拍下每次焊接调试的问题照片。等到赛季结束你手上就是一份天然完整的开源目录既帮了下一届的学弟学妹也是对自己几个月的交代。顺着这个方向还能继续往下走的内容其实还有不少比如把电源效率再压一压、把板子做成模块化便于换新、给整个硬件系统加自动化健康检测。总之不管这个赛季你能跑出什么成绩把工程习惯养成这本身就是赛场上最大的一项收获。