
21届智能车结束之后团队仓库里沉淀下来一批东西6块主控板、3版电机驱动、两代电磁传感器采集板再加上一堆调试用的转接小板最后整理成了一个完整的开源目录。这届我们内部筛了个“疯狂电路组”的名号Soberup战队旗号下面硬件部分全在这了。这篇算是给开源目录写一份人肉说明书也算给“疯狂电路组”从立项到跑赛道的过程做一次完整存档。先说我看到的情况好多做智能车的队伍资源倾斜都放在算法和控制上图像处理、路径规划这些自然是核心竞争力。但你真把车放到赛道上就会发现下地的第一道坎往往不是逻辑而是硬件。电机一转ADC数据能不能稳住电池电压从8.4V往下掉的时候Buck有没有在正常范围MOSFET在连续大电流工况下挂了没有这些问题不解决再漂亮的算法都是空中楼阁。所以第21届我们专门搞了一个硬件子团队名字就叫“疯狂电路组”。不是鼓励熬夜拼命而是想强调一个态度电路的坑只能用电路的方法去填。这次开源目录整理就是想把我们踩过的坑、验证过的方案、计算过的参数全部摊开。无论你是第一次摸智能车硬件的新生还是在其他队伍里负责打样的硬件同好甚至是做嵌入式开发但没见过竞赛电路的工程师这份目录应该都能让你少走几个月的弯路。1. 项目背景与开源初衷1.1 疯狂电路组在智能车竞赛里的岗位智能车是一个典型的软硬结合系统。感知、决策、执行链条上每一环出了问题整车都会体现在圈速上。我们这个“疯狂电路组”核心职责是把载具的电源系统、电机驱动、传感器采集、通信接口全部做成稳定可靠的硬件让上层软件能安心跑。有人觉得硬件工作就是画板、焊接、测电压门槛低、技术含量不如算法。实际完全不是一回事。一块主控板从原理图到跑起来中间隔着布局、叠层、电源完整性、信号完整性、热设计、可测试性设计。就拿一个最简单的问题举例为什么同样的原理图别人画出来纹波20mV你画出来80mV这不是玄学是布局和环路面积的问题具体内容后面章节我会展开讲。我们队伍的组别跨度挺大摄像头组、电磁组都有涉及。这两年竞赛规则一直在变但硬件上的底子其实完全可以复用。感知模块千差万别电源系统、电机驱动、采样调理、通信接口这几个块的结构是共通的。所以这次开源目录刻意做成了模块化每个子目录对应一个功能板块而不是绑定某个具体组别目的就是让不同赛道的队伍都能直接拿去做底子。1.2 开源目录的核心价值与目标读者很多队伍对开源相当纠结总觉得把电路图放出去优势就没了。我们一开始也这样想但最后一致认为硬件这碗饭没那么容易被人端走。原因有三原理图只能说明“电路应该是什么样”不能说明“电路实际能跑成什么样”。同样一张图换个人布局就是两种性能。调参和调试的经验藏在文档和代码里单纯抄板抄不到那些坑。竞赛真正的收获是你在自己动手过程中沉淀的问题意识。别人抄走的只是一块板带不走你的排查思路。所以这个开源目录给三类人看最合适。第一类是第一次做智能车硬件的学生可以从零开始按我们给的步骤复现第二类是已经在做硬件的同好可以参考我们的器件选型和布局方案省掉自己试错的时间第三类是做嵌入式开发的朋友智能车这种低压、大电流、强噪声环境本身就是很好的硬件设计实战案例。2. 全车硬件架构与电源系统设计2.1 电源树架构从电池到每一路负载电源设计是整个硬件系统的地基。我经常跟队员打比方电源树就是城市规划。电池是区域发电厂Buck是把高压电变成中转电压的变电站LDO是居民区旁边的变压器最后到每颗芯片就是送到户。规划不好后面所有负载都会出问题。我们车上的主电源是7.2V二节锂电满电8.4V标称7.4V。车跑起来负载变化非常剧烈电机启动瞬间可能抽走十几安培摄像头的功耗波动又很频繁。整个电源树我们是这样设计的首先做防反接和输入保护。电池接反是新手最容易犯的错误一次反接就能烧掉大半块板子。我们在输入端用了防反接MOS电路配合TVS管吸收浪涌。然后进输入EMI滤波器。很多人觉得车载竞赛环境不用搞EMI这个想法我后面会用实测数据反驳输入端的共模电感加差模电容成本不到几块钱带来的稳定性提升却非常明显。主电源树第一级用Buck把7.4V降到5V这一路负责所有数字电路和电机驱动逻辑供电。第二级用LDO从5V降到3.3V给MCU和传感器使用。模拟电路单独再拉一小路AVCC通过磁珠和模拟地隔离。选Buck芯片的时候我们试过MP1584、TPS562201、TPS563200这几个常见型号。对智能车来说5V一路的负载主要是驱动逻辑、传感器、无线模块稳态电流基本在1A以内瞬态会突然上到2A。TPS563200的3A输出能力足够同步整流效率也高价格还便宜。输出公式很简单芯片参考电压0.6V“Vout 0.6 × (1 R1/R2)”。要出5V可以选R188.7kΩR212.1kΩ这样计算值是“0.6 × (1 7.33) 4.998V”非常接近5V。这里有个重要提醒很多新手只关注Buck拓扑却忽略了输入电容。Buck的输入电容要承受高频脉冲电流不够的话输入端会有很大电压尖峰顺带把EMI问题搞严重。我们统一在输入端放22μF陶瓷电容加10μF电解电容的组合频率特性和容量都兼顾。2.2 最小系统板设计要点主控我们这届用了两颗不同的芯片主力是STM32H750备份方案是STM32F407。为什么选H750因为它的主频高做摄像头图像预处理的时候浮点算力更充裕。但H750有一个大家都知道的坑——内部Flash只有128KB没法存太复杂的代码所以必须在板子上设计外部Flash扩展。最小系统板看起来简单其实细节不少。8MHz晶振的匹配电容不是随便放的需要按芯片数据手册选12pF到18pF之间不然起振不稳定或者频率偏差大BOOT0一定要下拉否则上电可能进不了用户程序复位电路除了正常的RC复位我们还额外做了手动复位按键SWD调试口必须引出来而且最好把复位引脚也单独留出防止调试器连不上。外部看门狗是我强烈建议所有队伍加的。STM32内部IWDG虽然能用但有一个问题芯片本身死机的时候内部看门狗不一定可靠因为它依赖的还是芯片内部的时钟逻辑。外部看门狗用独立的RC或者独立晶振比如TP5010或者STWD100即使MCU内部时钟彻底乱掉照样能把它拉回来。我们在NPX板上试过程序陷入死循环外部看门狗能在1秒内强制复位非常稳。还有一个容易忽视的是ADC参考电压。许多新手直接把VREF接到3.3V电源问题在于3.3V供电同时还给其他数字芯片纹波直接耦合进ADC采样结果。我们在模拟参考电路上用了独立LDO和低噪声基准再配合钽电容滤波ADC采样稳定性肉眼可见地提升。3. 核心电路模块原理、参数与工程经验3.1 电磁传感交流激励与差分采集链路的实战设计电磁组的物理机制大家都清楚赛道中心埋设导线通以20kHz到100kHz的交流电流车上通过线圈感应磁场强度从而判断赛道位置。我们这届用的是100kHz方案这个频率在常见运放带宽里相对适中线圈尺寸也比较好匹配。先讲发射部分。赛道导线本身是有电阻和电感的为了在导线上获得较大的交流电流我们参考了交流法测电阻的思想用LC并联谐振网络来匹配赛道电感。谐振频率公式是f₀ 1 / (2π × √(L × C))如果目标频率是100kHzL取1mH那么C应该等于2533pF左右。这里有个常识要牢记实际元器件都有容差电感标称1mH可能实测只有0.95mH电容也有温度系数所以谐振电路必须上电后实际调不能只在纸上算完就完事。接收部分才是真正体现电路功力的地方。车上的传感器线圈感应到的信号非常微弱往往只有几毫伏到几十毫伏必须经过低噪声放大、带通滤波、检波最后送进ADC。这里牵扯到运放带宽选择的经典问题。有人直接拿LMV358这种单位增益带宽只有1MHz左右的运放来做100kHz十倍放大结果发现实际增益远不够。原因很简单运放的单位增益带宽有限开环增益在高频时会下降。100kHz下要稳定放大20倍按“增益带宽积”计算至少需要20MHz GBW的运放。我们最后选了MCP6022或OPA2350十倍二十倍放大都很稳。信号链路上我们做了两级处理第一级是差分放大直接对感应线圈两端的差分信号放大这能有效抑制共模干扰。第二级是带通滤波中心频率约100kHz带宽控制在10kHz左右把带外噪声压下去。如果想让幅值检测更精准还可以引入相敏解调本质上就是锁相放大思想跟信号源做乘法后低通滤波能极大提升信噪比。PCB布局上有一条必须说左右两侧的传感器线圈走线必须尽量对称。差分布线讲究的是“几何对称”不只是电气上对称。焊盘位置、过孔位置、覆铜包地面积都要一致这样才能保证共模抑制效果否则两路差分信号在源头就已经不对称了后续电路再强也修不回来。3.2 电机驱动与电流采样电路从分流电阻到隔离放大器电机驱动是整车上电流最大、开关噪声最强的地方。我们用的方案是分立MOSFET全桥栅极驱动芯片选的是FD6288和IR2104这一类的半桥驱动。主电机用全桥实现正反转和调速舵机则用H桥或者简单的电压调节方案。电流采样是电机驱动里最考验功底的部分。为了闭环控制必须实时知道母线电流或相电流。我们最常用的低侧采样结构是在低侧MOSFET和地之间串联一个精密分流电阻再用差分放大器或者隔离放大器放大分流电阻上的电压。AMC1301这颗隔离放大器在电机驱动里见得很多它的特点是输入输出之间有隔离能把高压侧的电流信号安全地送到低压侧MCU。以AMC1301为例它的差分增益大约是8.2倍。假设计划采集最大电流10A选分流电阻5mΩ那么满量程电压10A × 0.005Ω 50mVAMC1301输出差分电压50mV × 8.2 ≈ 410mV这个幅值对MCU的ADC来说信噪比已经相当好了。如果你希望进一步匹配量程还可以在AMC1301后级加一级可调增益放大。分流电阻的功率计算必须提前做。P I²R 100 × 0.005 0.5W这说的是连续工况。电机堵转或者启动瞬间电流可能短时冲到20A功率就到2W了。所以不能只选中0.5W的电阻至少选1W最好两个并联分担热量同时并联还能降低寄生电感。采样走线一定要用开尔文接法。什么意思就是采样电压线和功率电流线要分开走功率电流走粗线采样电压从电阻两端单独引出绝对不能把采样线的焊盘直接打在功率通路上否则铜箔的电阻压降会直接串进采样信号导致电流读数偏差很大。分流电阻到放大器之间我们加了一个低通RC滤波比如100Ω串联电阻加1nF电容。这个滤波器有两个作用一是防止开关噪声混入采样信号造成混叠二是限制高频尖峰进入放大器输入端。很多人忽略这个环节结果示波器一测采样波形毛刺多得没法看。3.3 通信接口485自动收发电路和无线模块布局整车调试和赛道通信都离不开接口电路。USB转串口用CH340这个大家都熟不多说。但485通信的“自动收发”电路要好好聊聊。所谓自动收发就是省掉一个MCU的GPIO来控制收发方向让收发器通过TXD电平的变化自动切换RE和DE。原理听起来很便利实际调试的时候自动收发电路在高波特率下的表现非常考验参数设置。网上的典型电路是TXD信号通过三极管或比较器控制DE再配合一个RC延时来保证最后一个字节能完整发出去。实跑中遇到的情况是115200波特率以下自动收发基本没问题上了更高的波特率如果RC时间常数不对总线就经常丢字节甚至卡死。所以我给队伍的建议是分两步走调试初期老老实实用一个GPIO控制方向逻辑简单可靠等系统稳定了再考虑换成自动收发并且必须用示波器实测最后几个字节是否完整。终端电阻别忘了RS-485总线两端各接一个120Ω电阻匹配否则反射信号会把波形搞得乱七八糟。有条件的话在A、B线上各串一个共模电感再并一个TVS管对付长线缆的雷击浪涌和共模干扰很有效这在工业场合是标配放到智能车上同样好用。无线模块我们主要是蓝牙透传和2.4G模块。布局上注意天线下方不要覆铜天线净空区域要保持干净模块尽量远离电机驱动电路避免辐射干扰把通信搞断。曾经有一版板子把2.4G模块放在驱动板正上方一开电机就掉线后来挪到板子角落问题才消失。3.4 可靠性设计看门狗、EMI滤波与抗干扰框架前面提过外部看门狗这里展开讲。TP5010可以用定时器来编程看门狗超时时间我们一般设到1秒左右。固件正常的话每500ms喂一次狗程序死机1秒后自动复位整个系统不用人管就能自己恢复这对比赛过程中单圈冲刺和长时间调试来说太重要了。EMI滤波电路是整个板子的护城河。很多人以为EMI滤波是开关电源或者通信设备才关心的事智能车板子小、功率低没必要。实际上电机产生的换向火花和PWM开关噪声频率分量可以到几十兆赫兹足以耦合进传感器和ADC信号链路。我们在输入电源端放了共模电感和差模电容同时在各关键芯片电源脚上放高频去耦电容。所谓共模和差模的区别可以这样理解差模干扰是两根线之间的噪声像两个人吵架互相吼共模干扰是两根线对地都有相同的噪声像两个人同时被同一个大喇叭震到。共模电感对共模干扰有很好的抑制作用差模电容则主要吸收线间差模噪声。两种手段组合用抗干扰效果才完整。传感器板的防抖设计也别忽略。按键或者开关信号输入如果不做硬件去抖电容和软件去抖逻辑赛场上一个抖动就可能触发误动作轻则数据错误重则整个状态机跑飞。RC去抖电路就是串一个电阻并在IO口到地加一个小电容配合软件再延时确认基本可以彻底解决误触发。4. 实测现场疑难杂症与排查实录4.1 传感器ADC跳变的真正元凶地弹与采样时序这是我们在电磁组调试中印象最深的案例。电磁传感器读回来的ADC值平时安静的时候很稳定但电机一启动数值就像随机数一样跳1600到2700之间来回漂。最初以为是电源纹波干扰拿万用表量电源看起来正常又怀疑是运放自激换了运放也一样。后来用示波器勾ADC引脚波形发现上面叠着将近1V的尖峰脉冲。再进一步排查发现尖峰出现的频率跟PWM开关频率对得上。我们把电机供电断开尖峰还在又把舵机断开尖峰才明显改善。最后定位到是地回路的问题传感器地线跟电机功率地共用了同一个连接器功率地的大电流在连接器引脚上产生的地弹直接抬升了传感器参考地导致ADC读数乱跳。解决方式分两步。结构上把功率地和信号地分开在汇流点单点接地形成星形接地结构这样功率电流就不会流经信号地。时序上在ADC采样期间尽量不做电机PWM跳变采样任务和电机控制任务通过调度错开干扰就自然压下去了。这也侧面印证了为什么原理图一样板子性能可以差很多。地布局的细微差异直接决定噪声指标。4.2 Buck纹波超标与大电流噪声的排查有一版主控板5V波纹实测超过100mV看起来非常吓人。我们一开始怀疑是芯片选型问题甚至想换大电流Buck。后来检查测量方法才发现问题出在示波器探头上。普通示波器探头那段接地夹子线本身就像一根天线会拾取空间噪声。测量纹波必须用接地弹簧尽量缩短接地回路不然你测出来的很多是环境噪声而不是真实纹波。换用接地弹簧之后真实纹波大概只有20mV出头完全在可控范围。不过排查过程中也揪出一个真问题大电流负载跳变的时候输入电压会出现凹陷。原因是输入电容容量不够PWM开关瞬间从输入抽走大量电流电池线又长线路阻抗压降明显。后来在输入端并联了470μF电解电容瞬态凹陷立刻缓解。这里给个经验值Buck电路输出纹波跟输出电容的ESR关系很大。用纯陶瓷电容虽然ESR低但大容量陶瓷电容在直流偏压下会掉容量所以最好陶瓷电容和固态电解电容搭配用。模拟电路供电部分可以再多加一级LC滤波效果很明显。4.3 485自动收发为何丢字节485在车上的用途是和调试上位机通信。最初我们上了自动收发电路结果命令行经常不响应长距离通信丢字节当时怀疑是速率不够稳。用示波器看波形之后发现总线最后一个字节的发送时间超出了DE的保持时间等于发了一半就被切断了。自动收发电路用的RC延时本质上是靠电容放电来维持发送状态。参数设置太短最后一个字节会不保太长又会导致总线占用时间过长影响接收。更麻烦的是这个时间常数跟波特率直接相关换一档波特率就要重新调。最终方案是开车调试阶段干脆用GPIO方向控制启用一个专门的收发控制引脚程序里根据发送状态拉高拉低完全可控。自动收发留给后期稳定版本而且要实测过连续10万字节无错误才敢用。4.4 MOSFET频繁烧毁的启示感性尖峰与缓冲电路第一次上赛道测试驱动板连续损坏了好几个MOSFET当时压力特别大因为这属于严重硬件事故。最初怀疑是买的劣质元件换了一批进口芯片结果照样烧。冷静下来用示波器抓GS和DS波形发现在关断瞬间的尖峰电压高得离谱。原理其实很简单。电机是感性负载开关关断时电流不能突变就会在线圈两端感应出高电压。公式是V L × di/dt。我估算了一下关断20A电流关断时间800ns电机电感10μH感应电压是“10μH × 20A / 800ns 250V”这个电压远远超过MOSFET的耐压值。不是元件质量问题是开关速度太快了。解决思路有三个方向。第一是在栅极驱动电阻上串联一个10Ω到20Ω的电阻人为降低开关速度让di/dt降下来。第二是在电机两端增加续流二极管和RC吸收电路给感性电流一个泄放路径。第三是在母线上加大容量电解电容作为能量的缓冲池。三个措施一起实施后MOSFET再没烧过。这个案例也提醒我电路设计不能只算稳态参数瞬态参数往往才是决定可靠性的关键。调试过程中烧东西不可怕可怕的是不知道烧的原因就盲目换器件。5. 开源目录结构与复现指南5.1 仓库组织与命名规范这次开源目录的顶层结构如下Soberup-Racing-21st/ ├── README.md ├── LICENSE ├── docs/ │ ├── power_supply_design.md │ ├── em_sensor_layout.md │ ├── commissioning_notes.md ├── hardware/ │ ├── master_core_h750_v2.1/ │ │ ├── schematic/ │ │ ├── pcb/ │ │ ├── bom.csv │ ├── motor_driver_v1.3/ │ ├── sensor_em_v2.0/ │ ├── sensor_camera/ │ └── comms_485/ ├── firmware/ │ ├── src/ │ └── drivers/ ├── manufacturing/ │ ├── gerber/ │ └── position/ └── tools/ ├── adc_scope_parser.py └── current_calibration.py目录命名的原则是“PCB板名_用途_版本号”三段式。比如 master_core_h750_v2.1一眼就能看出这块板子是主控核心板、使用H750、版本2.1。版本号一定要坚持递增不要用“最终版”“终极版”这种没有信息量的名字。队伍一大版本管理不做好的话连自己想找哪块板都费劲。每个硬件子目录里面除了原理图和PCB工程文件我们还强制要求放一份BOM表csv格式包含物料编码、封装、数量、单价、购买链接。这个对复刻的人帮助巨大不用一个个去对器件。5.2 从零复现一块板子的最佳顺序给新手的复现流程我建议严格按下面顺序来第一步先看docs里的电源设计文档把你板子的电源树结构画出来搞清楚每一路供电从哪里来到哪里去。第二步在打样之前先拿洞洞板把最小系统搭出来烧一个LED闪烁程序验证MCU基本功能。这一步成本低但能滤掉很多低级错误。第三步拿到PCB之后空板先目检对照原理图检查关键走线有条件用万用表通断档检查电源和地有无短路。第四步先焊电源部分不要一次把整板焊完。电源部分上电测试确认各路电压正常、纹波可控再接负载。第五步焊接MCU最小系统先烧录一个点灯程序验证SWD和复位。第六步再焊传感器和通信外设用回环测试验证收发功能。第七步最后才焊电机驱动而且第一次上电必须串电流表限流。这个顺序的核心思想是“分层验证”每一层都确认无误后再进行下一层。不要一次性把所有元件全部焊好再上电那样一旦出问题排查范围巨大新手很容易崩溃。5.3 器件替代与物料选型建议有些队伍想复刻我们的板子但是个别芯片不好买就想换替代品。这里必须给出明确提醒隔离放大器、高精度基准、驱动芯片这几类关键器件不建议随意替代。AMC1301如果要换必须确认替代品的增益带宽、隔离耐压、失调电压参数最好实测过再批量做板。电容则需要注意直流偏压特性。同样一颗10μF的X5R陶瓷电容在0V下是10μF加5V直流偏压后可能只剩下不到5μF容量。所以BOM表里我们特意标注了每一颗陶瓷电容的封装和额定电压复刻的时候尽量按原参数来。PCB板材和铜厚也会影响性能。我们的驱动板用的是2oz铜厚主要是为了大电流走线发热更小信号板用1oz足够。如果复刻时统一换成1oz铜厚驱动板的大电流路径电阻会上升发热加剧这一点要特别注意。5.4 开源许可与团队共享说明开源目录里的硬件部分采用CC-BY-SA 4.0许可证固件部分采用MIT许可证。也就是说硬件图纸你可以自由使用和修改甚至可以做成产品但必须保留原作者署名并且修改后的版本也要以同样许可证发布。固件则更加宽松随便拿去用。之所以没选NC非商用协议是因为很多同学做开源项目其实是希望自己的作品能被别人用起来连商业用途都允许的话扩散度更高。如果你真的很在意别人拿去赚钱那可以在团队内部讨论后换成CC-BY-NC-SA。开源这件事没有标准答案讲清楚边界就行。6. 给下一届硬件人的几点忠告6.1 省钱又高效的硬件启动清单一套个人硬件调试装备不用一次到位但有几样东西是必须有的。恒温烙铁推荐T12或者高频焊台温度可控数字万用表必须能测电容、二极管和频率示波器建议至少100MHz带宽、双通道起步这是排查硬件问题的眼睛电子负载有条件就配一个没有就用大功率电阻代替。工具钱该花就花别在廉价烙铁上省一把好的烙铁能让你焊接良率提升不少。元器件采购也有技巧。电阻电容建议直接买整套贴片常用值样品本0.1%精度的采样电阻单独采购常用的芯片比如AMS1117、MP1584、CH340、MAX3485、AMC1301这些各囤5到10片省得打样一次等几天。6.2 先搭测试台再画整车板这是我从这届“疯狂电路组”里学到的最重要经验。很多人拿到新板子第一件事就是上整车试其实这是非常低效的方式。正确的做法是先把最小系统、电源、传感器、驱动分别做成独立模块在洞洞板上搭一个测试台把每个模块单独验证完再整合。测试台的作用有两个第一它能帮你快速定位问题因为每个模块都是你亲手搭的知道哪里容易出问题第二它可以在正式PCB打样期间就让软件组先跑起来软硬件并行开发整个项目周期能压缩不少。这一届我们电磁组能在赛季后期有充足的调参时间很大程度归功于提前搭了测试台。6.3 原理图不是核心竞争力最后想把这次开源最想说的一句话写在这里原理图放出去一点都不可惜因为原理图不是核心竞争力。真正的竞争力是你对着大量波形和现场问题总结出来的调试经验是你对每一个元器件特性的透彻理解是你在一版又一版迭代中形成的布局直觉。所以与其把精力花在防着别人学你不如把精力花在把原理图之后的那些隐性知识写下来、传承下去。开源目录只是一个载体真正有价值的是那份从零开始把硬件做稳的过程本身。如果你也正在准备自己的第一块主控板我建议你从最小系统板开始一块块电源、一路路信号地测。遇到解决不了的问题欢迎到仓库的issue区来聊硬件这条路上没人是孤军奋战的。