资讯详情

资讯详情

智能车电路开源项目解析:从原理图到实车的嵌入式硬件设计

1. 疯狂电路组的来龙去脉为什么一个战队愿意把电路方案全部开源今年的21届智能车竞赛落幕后我刷到了一份很有意思的开源目录——Soberup战队的疯狂电路组全套电路设计方案。说实话智能车竞赛里开源代码的战队不少但愿意把电路设计从头到尾梳理成目录、把原理图PCB和调试记录全部公开的真的不多见。毕竟代码可以跑起来就是真理电路却需要大量的实测验证和反复迭代很多队伍的电路资料都只在小圈子里流传。所以当我在开源社区看到这份目录时第一反应是这队是真舍得。先说说疯狂电路组是什么来头。智能车竞赛一般按传感器方案分组电磁组用电感感测赛道磁场摄像头组用图像识别赛道但电路组这个叫法并不在官方赛制分组里更多是战队内部对负责硬件电路设计成员的自称。Soberup战队把这个组单独拎出来开源说明他们把硬件电路的地位提到了和算法代码同等的高度。这在智能车圈子里是有共识的——车跑得不稳八成问题出在电源和信号链路上算法写得再花哨供电抖一下、信号被干扰一切都白搭。从这份开源目录里能看到一个完整的嵌入式硬件项目应该有的样子从电磁组咪头差分电路到电源树设计从485自动收发电路到看门狗电路从视频防抖到EMI滤波每个模块都拆开来讲原理、给参数、标注避坑点甚至还有实测波形。对于正在备战下一届智能车竞赛的队伍来说这份目录的价值不亚于请了一个经验丰富的硬件学长坐镇。对于从事嵌入式开发、想提升电路设计能力的工程师来说里面的很多思路和工作方法同样可以直接迁移到工作项目中。对我来说这份开源目录最大的价值不在于某个具体电路能直接抄而在于它展示了一套电路中每一个器件都有存在的理由的思维方式。接下来我就按目录的逻辑逐步拆解看看这份开源到底开源了什么哪些地方值得直接抄作业哪些地方需要根据自己队伍的情况做调整。2. 开源目录长什么样一份能完整复现的电路工程得按这个逻辑组织2.1 目录结构与命名规范让一个陌生人也能快速上手的工程组织方式我见过太多队伍的电路资料是最终版_v7_真最终版.sch压缩包解开之后原理图PCB一堆命名混乱的文件。Soberup这份开源目录给我最大的启发就是工程文件组织得好不好直接决定了这个项目能不能被其他人复现。他们的目录大致是这么划分的Soberup-Circuit-OpenSource/ ├── README.md ├── docs/ │ ├── 01_系统架构说明.md │ ├── 02_电源树设计说明.md │ ├── 03_传感器信号链路说明.md │ ├── 04_通信接口设计说明.md │ └── 05_调试方法与故障排查指南.md ├── hardware/ │ ├── 00_主控底板/ │ ├── 01_电源模块/ │ ├── 02_电磁采集模块/ │ ├── 03_摄像头处理模块/ │ ├── 04_电机驱动模块/ │ └── 05_通信与调试模块/ ├── software/ │ ├── 驱动测试例程/ │ └── 上位机工具源码/ └── reference/ ├── datasheet/ └── 参考文献/这个结构看起来简单但每个细节都有讲究。hardware目录下按功能模块划分子目录每个子目录里放着对应模块的原理图源文件、PCB源文件、BOM表和一个简短的README说明。docs目录放的是设计文档和调试经验而不是把文档零散塞在各个硬件目录里——因为像电源树这种设计往往跨越多块板子单独拿出来写才能把整体思路交代清楚。reference目录收集器件手册和数据手册方便后来者查证参数省得自己一个个去官网翻。命名规范同样重要。他们的原理图和PCB文件都遵循模块编号_模块名称_版本号的格式比如02_EMF_ACQ_V1.2.sch一眼就能看出这是电磁采集模块的第1.2版原理图。版本号不是做完才标而是每次修改电路后手动递增并同步更新BOM表这样如果调试中发现某个版本出了问题可以准确回退。2.2 工程文件之外真正宝贵的是调试记录类文档原理图和PCB文件只是最终结果真正能体现一个项目经验的其实是设计文档和调试记录。Soberup开源目录里的05_调试方法与故障排查指南.md是我认为含金量最高的一份文档里面记录了他们在备赛期间遇到的各种电路问题和对应的排查思路。举个例子文档里记录了这样一个案例电磁组新车下地后采集到的赛道信号偶发跳变排除算法问题后确认是硬件干扰。他们通过示波器逐级测量信号链路最后定位到是电机驱动的地线走线不合理导致电机启动瞬间的电流在GND上产生压降干扰了运放参考电压。解决方案是把电机的功率地和信号地做单点连接并增加了一条短而粗的接地线。这种问题在书本上很难学到只有实际调试才能积累下来。更难得的是他们还记录了排查过程本身包括每步测试的目的、使用的仪器、观察到的现象和结论几乎可以当作一份示波器使用教学案例来读。对于刚开始接触硬件调试的新手看这样的记录远比看十本理论书更有用。2.3 BOM表与采购建议把能不能买到纳入设计考量很多开源项目的BOM表只是简单列出器件型号和数量但Soberup在BOM表里加了采购难度推荐替代型号价格参考三列。这个细节暴露了他们做工程设计的成熟度——选器件从来不是只看电气参数还要考虑供应链和成本。比如裁判系统要求车模必须自己搭建主控和传感器选型受经费限制很大。他们的BOM表里会明确标注哪些器件可以在嘉立创这类平台直接买到哪些器件需要申请样品或走海外渠道哪些器件有价格更低但性能兼容的国产替代。对于预算有限的高校队伍来说这份采购建议可以直接帮他们省下大量比价和找货的时间。3. 从原理图到实车五个核心电路模块的设计取舍Soberup开源目录里最硬核的部分是那些经过实车验证的核心电路模块。这些电路单独拿出来看都不是什么惊天动地的创新难的是把它们组合在一起还能稳定工作。我挑五个最有代表性的模块来逐一拆解重点讲清楚每个模块的设计逻辑和取舍。3.1 电磁组咪头差分电路抑制共模干扰才是它的核心使命咪头差分电路是电磁组的灵魂模块它的任务是把赛道导线中通有的20kHz交变电流产生的磁场转换成电压信号。Soberup采用的是双运放差分采集方案核心结构是两个咪头电感分别感应磁场差分输入到放大器后端经过带通滤波处理后送入主控ADC。很多人第一次做电磁采集会犯一个错误直接把单个咪头的信号放大后送进ADC。这样做的缺点很明显——周围环境中的共模干扰比如电机打火、无线遥控信号会和有效信号一起被放大导致采集到的信号噪声很大。差分方案之所以是主流是因为两个对称的咪头接受到的共模干扰几乎相等经过差分放大后相互抵消而有效信号的相位相反刚好会形成两倍增益。在设计上有几个实际参数很关键。第一个是差分放大倍数Soberup在文档中给出的建议是10倍到20倍之间太高会把噪声一起放大太低又会让信号幅度不足以填满ADC量程。第二个是谐振电容的选取咪头需要并联谐振电容来对20kHz信号形成选频特性电容容差一般要选C0G材质或者精度在5%以内的否则左右两个咪头的中心频率不一致会导致差分信号失真。第三个是运放选型他们选的是低偏置电流、低噪声的轨到轨运放因为电磁采集的信号幅度在毫伏级别运放的输入偏置电压和噪声直接决定了信号质量的下限。我在自己的板上复刻这套电路时发现PCB布局对差分采集的影响出乎意料地大。两个咪头的布线要保持对称走线长度尽量一致避免产生不必要的相位差。如果布局不对称共模抑制效果会明显下降前面电路做得再好也白费。3.2 电源树设计BUCK、LDO、缓启动电路怎样搭配才合理整车电源系统是智能车翻车率最高的环节。电池电压7.2V到8.4V而主控、传感器、电机驱动需要的电压各不相同一套合理的电源树设计是整车稳定的基础。Soberup的电源树结构大致是7.2V电池输入经过防反接和EMI滤波电路第一级BUCK降压到5V给舵机、电机驱动逻辑部分供电第二级LDO从5V降到3.3V给主控MCU和传感器供电独立滤波给模拟采集电路供电避免数字电路噪声串入为什么第二级要用LDO而不是继续用BUCK原因在于开关电源的输出纹波相对较大而MCU和模拟前端对电源纯净度要求很高。LDO虽然效率低一些但输出纹波可以做到很少付出的代价是压差带来的热损耗。在电流消耗不大的数字和模拟电路上LDO这点损耗完全值得。缓启动电路是很多队伍忽略的细节。智能车使用的电池内阻很低上电瞬间对后级电路的浪涌电流非常大如果没有缓启动电路容易出现插拔电池时火花很大、甚至烧毁前级MOS管的情况。Soberup使用的是一种简单的MOS管缓启动方案在电源输入回路中串联一个PMOS栅极接RC延时电路上电瞬间PMOS缓慢导通电流爬升时间被拉长浪涌电流大幅降低。实测下来这个电路让电池插拔时的打火现象明显减轻。电源树设计还要特别注意地回路。数字电路和模拟电路的地不要混在一起走大环路应该在电源入口处单点汇合。否则数字电路高速开关产生的di/dt会在公共地上形成噪声压降直接影响模拟采集精度。这是很多电磁组队伍信号不稳的隐形杀手。3.3 485自动收发电路用三极管省掉一根控制线RS485总线在智能车调试中应用很广主要用于车体和上位机之间的数据通信。Soberup的485电路里有一个很聪明的设计自动收发切换省掉了一路控制IO口。常规的485方案需要MCU用两个IO控制收发方向DE和RE引脚程序里收发切换比较麻烦一旦时序没控制好还会出现总线冲突。Soberup用一个NPN三极管搭了一个简易的自动收发电路发送数据时TXD为高电平会让三极管导通把RE/DE引脚拉低芯片进入发送模式TXD为低电平时三极管截止RE/DE被上拉电阻拉高芯片进入接收模式。这个电路的设计关键是上拉电阻和三极管基极限流电阻的取值。上拉电阻不能太大否则三极管导通电流不足无法可靠控制DE/RE也不能太小否则静态功耗过高。Soberup给出的参考取值是基极限流电阻10kΩRE/DE上拉电阻1kΩ实测在115200波特率下稳定工作。实际调试中我发现自动收发电路在波特率较高时需要注意TXD空闲状态的电平。因为RS485是半双工总线如果TXD在空闲时不是高电平会导致三极管状态抖动产生总线噪声。所以发送端的串口必须配置为正常空闲高电平模式不能设置成反逻辑。这个坑在文档里也有提到算是把手册里写不到的经验公开了出来。3.4 硬件看门狗电路独立于MCU的保底方案看门狗电路在很多嵌入式系统里都有但Soberup的设计思路值得拎出来说。他们没有完全依赖芯片内置的IWDG而是在外部加了一颗独立的硬件看门狗芯片用来监测整个系统的运行状态。内外看门狗的区别是内部看门狗由MCU自己控制喂狗如果MCU处于死循环或者中断异常状态内部资源可能已经乱了还能继续喂狗失去保护意义外部看门狗芯片独立于MCU运行由MCU的某个IO周期性翻转来喂狗只要程序执行逻辑异常导致喂狗超时看门狗就会强制复位整个系统。外部看门狗电路设计上有一个重要参数喂狗超时时间。Soberup在文档中给出的建议是1秒到2秒之间太短容易因为正常的长任务执行产生误复位太长又会让失控的系统长时间运行在错误状态。他们还额外设置了看门狗输出级联到电源控制电路看门狗触发复位时同时切断舵机控制信号和电机驱动使能防止车在复位瞬间失控冲出赛道。我在最初做这块电路时习惯直接在系统初始化后就开启看门狗结果经常在调试器连接时遇到问题——因为调试断点会暂停程序执行喂狗线程也被停住看门狗复位导致调试中断。后来学聪明了在固件里加了一个宏开关调试版本默认关闭看门狗出车版本才打开。这个做法在Soberup的软件例程里也看到了类似的实现算是硬件调试和软件配合的成熟经验。3.5 EMI滤波与视频防抖看起来不起眼实际却影响成绩的细节EMI滤波电路和防抖电路这两个模块在开源目录里篇幅不大但恰好是决定比赛成绩上限的细节部分。先说EMI滤波。智能车上的干扰源主要是电机换向火花和无刷电机PWM开关噪声。这些噪声不仅会通过地线传导还可能通过空间辐射耦合到传感器线缆和运放输入端。Soberup的方案是在电源输入端加一级LC滤波在传感器信号进入运放之前加磁珠和电容组成的π型滤波。磁珠的作用是抑制高频噪声电容提供低阻抗泄放路径两者配合可以在不影响有用信号带宽的前提下有效滤除干扰。实测中加了EMI滤波后电磁组采集信号的噪声峰峰值从原来的几十毫伏降到了几毫伏级别。视频防抖电路是摄像头组相关的内容或者说是那些采用摄像头方案队伍关心的话题。Soberup的防抖思路是硬件补偿加软件滤波结合硬件上用橡皮减震柱把摄像头支架和车体连接形成机械低通滤波器衰减车体高频震动软件上对图像进行稳定处理补偿帧间的微小平移和旋转。这个模块虽然不如纯电路那么硬核但把机械设计和信号处理结合起来的思路扩展了传统电路组的边界也说明防抖器的实质是减少振动信号对有效信号的干扰和咪头差分电路抑制共模干扰的逻辑本质上是相通的。4. 布局布线与EMC实践原理图没问题PCB掉链子是最冤的Soberup开源目录里专门有一篇文档讲PCB布局和电磁兼容实践我读完之后意识到很多电路问题在Protel或KiCad的仿真里根本看不出来唯有PCB做好之后在实车上跑才会暴露真实情况。布局布线的水平直接决定了电路的抗干扰能力和稳定性。4.1 地平面处理模拟地数字地到底要不要分割关于模拟地和数字地的处理硬件工程师之间争论很多。一种思路是严格分割模拟部分和数字部分各自铺设完整地平面只在电源入口单点连接另一种思路是模拟数字共用一个完整地平面靠分区布局控制回流路径。Soberup的实践结论是在智能车这种小尺寸、低速率设备上不要在地平面上开缝而是保持地平面完整、分区布局更靠谱。原因在于智能车PCB面积有限如果强行分割地平面高速数字信号的回流路径会被迫绕行形成很大的回流环反而增加辐射和地噪声。正确的做法是在布局规划时将模拟电路咪头采集、运放和数字电路MCU、通信芯片分区域摆放模拟区域下方用完整地平面数字区域也保持地平面完整两者通过过孔和连接自然汇合。Soberup在文档里把这种设计方法称为分区不分割我觉得这个总结非常到位。4.2 电机驱动与信号采集的物理隔离智能车上最难处理的是电机驱动部分。电机启动时瞬间电流可以达到几安培甚至十几安培这么大的电流变化会在电机驱动电路周围产生强烈磁场干扰而且会在地线上产生几百毫伏的压降。如果电机驱动的地线和传感器采集电路的地线共用一段较长的走线这段走线上的噪声压降就会直接叠加到采集信号上。Soberup在PCB设计上做了三件事第一电机驱动电路独立成一块小板通过较粗的电源线和主控底板连接避免了和大电流回路共享地平面第二信号线和电源线不平行走线尤其是长距离传输线缆尽量让信号线和地线相邻形成紧密的返回路径第三传感器线缆在靠近车体侧套上磁环或者加共模电感进一步抑制共模干扰。这三板斧下来他们的车在电机大油门和小油门切换时采集信号基本不受影响。4.3 抗干扰设计的三个层次滤波、屏蔽、布局如果只是抄原理图不学习布局思路到了自己画板子的时候还是会掉链子。Soberup的抗干扰设计框架可以归纳为从下到上三个层次第一层是源头抑制也就是滤波。在电源输入端、信号输入端加滤波电路把干扰抑制在产生源头处。这个层次成本最低效果也最明显但缺点是滤波器的参数需要针对具体噪声频谱调整不是随便套个LC就能解决。第二层是路径控制也就是屏蔽和走线。信号线尽量走内层并用地线包裹或者外层包覆屏蔽层。在PCB上表现为敏感信号线两侧铺设伴随地线避免长距离平行于高速信号线。第三层是空间隔离也就是布局。大功率电路和敏感电路拉开距离机壳上也可以考虑分区处理。这一层虽然最简单却经常被忽视——我见过不少队伍为了走线好看把电机驱动和运放放在一起最后调试时吃尽苦头。这三个层次是叠加关系不是选择关系。Soberup在设计时三层同时做电源入口加EMI滤波、信号线加磁珠屏蔽、布局上物理隔离实测稳定。对于新手队伍我的建议是先做好布局隔离这是最容易立竿见影的一步然后再逐步补滤波和屏蔽。5. 调试实录示波器下看到的真相和排查思路5.1 用逻辑分析仪抓485总线的通信时序485自动收发电路能够正常工作前提是电路时序和软件配合得当。Soberup的调试文档里记录了一次典型的485通信问题排查过程。现象是上位机能周期性收到车体数据但偶尔会丢包或者收到乱码。第一步是用逻辑分析仪同时抓TXD信号和A/B差分总线信号。正常传输时A相对B为正电平表示逻辑1A相对B为负电平表示逻辑0。抓到的波形显示发送数据帧的起始位出现了电平跳动在一个字节的起始位置附近总线电平在有效电平和空闲电平之间反复跳变了几次。这个现象指向自动收发电路的切换时序问题。三极管自动收发方案有一个固有弱点当TXD从空闲高电平跳变到起始位低电平的瞬间三极管从截止到导通需要时间而RE/DE引脚的电平变化也存在延迟。如果这个延迟大于起始位的时间就会造成总线上的第一个bit畸变。解决方法是在软件层面对UART发送字节之间加入足够长的延时保证三极管状态稳定后再发送下一个字节同时调整了基极限流电阻加快了三极管导通速度。还有一个容易被忽视的细节485总线末端必须接终接电阻。Soberup在调试中遇到过信号反射导致的波形振铃总线距离虽然只有几十厘米但高波特率下信号反射依然不容忽视。在A/B线之间接入120Ω电阻后波形振铃明显改善通信可靠性大幅提升。5.2 看门狗误复位的完整排查链路智能车赛场上最让人崩溃的问题之一就是车跑着跑着突然重启。Soberup有一次在试车时遇到类似情况车在直道加速时偶尔重启但在维修桌上测试时却怎么都复现不了。他们花了整整两天时间排查最后找到真凶是一根不起眼的杜邦线。排查链路是这样的先确认重启不是程序问题通过串口日志发现重启事件并不是由MCU软件异常触发判断是硬件复位。接着用示波器监测外部看门狗芯片的复位输出引脚抓到了复位信号确实被拉低的波形确认是外部看门狗触发的复位。然后沿喂狗IO往上查发现喂狗脉冲在接近重启时刻出现了缺口——程序没有执行到喂狗代码。到这里问题范围缩小到MCU本身是否被某个事件打断或挂起。继续用示波器看MCU供电电压发现在重启前的几十毫秒内3.3V电源上出现了一个窄的电压跌落尖峰跌到了3.0V左右。3.3V是由5V LDO转换而来的再去查5V电源发现5V电压在电机大电流启动时也有跌落。问题到这里就有点复杂了电机启动导致电池电压跌落后面两级电源的压差余量又不够最终让MCU供电跌破最低工作电压。真正的罪魁祸首是那根连接电池和主控板的杜邦线。杜邦线线芯很细内阻偏高电机大电流时在线上产生的压降让电源模块输入电压不足。换用硅胶粗线后电压跌落问题彻底消失车也不重启了。这个案例堪称硬件问题排查的标准教材从现象到系统边界逐层收敛不放过任何一个可疑点。5.3 采样电阻测电流0.1欧姆电阻就能看大电流波形智能车调试中经常需要看电机电流波形但直接用示波器电流探头成本高很多学生队伍只有示波器加普通探头。Soberup提供了一个便宜又好用的方法在电机电源回路上串联一个0.1Ω的功率采样电阻用示波器普通探头测量电阻两端的电压差电压值除以电阻值就是电流值。这个方法听起来简单但有几个实际操作要点。第一采样电阻要用无感电阻或者低感电阻普通绕线电阻在高频下电感效应明显波形会失真。第二示波器探头要用差分方式测量或者至少用两个探头做A-B数学运算否则共模电压会淹没差分信号。第三采样电阻的功率要足够电机峰值电流如果有5A0.1Ω电阻上的功耗峰值就有2.5W普通贴片电阻会发烫至少要用2W以上的功率电阻。我在Soberup文档里还看到一个进阶用法在采样电阻两端并联一个RC低通滤波器再接示波器可以滤掉PWM开关噪声只保留电机电流的平均趋势这样更容易观察电流环的动态特性。这个方法在做电流闭环调试时特别实用。6. 开源之后从白嫖到加入维护6.1 开源协议怎么选、文档怎么维护Soberup这份开源目录放在了公共代码托管平台上选的是MIT协议。MIT协议的好处是宽松任何人可以自由使用、修改、商用只需要保留版权声明。对于高校竞赛队伍来说MIT协议几乎零门槛不用担心专利问题也方便后面的队伍直接拿去做二次开发。但是协议只是入门文档维护才是开源项目能否持续被使用的前提。Soberup很聪明的一点是在README里设置了一个已知问题与更新计划区块任何使用他们方案的人如果在复现过程中发现问题都可以提Issue他们会在后续版本中修复并更新文档。这种以问题驱动更新的模式让开源项目保持了生命力。很多学生竞赛团队的开源项目在比赛结束后就停止维护文档里的错误也没人管后来者一踩一个坑Soberup愿意持续跟进的做法在圈子里很难得。6.2 基于这套目录可以做哪些二次开发拿到这份开源目录不同基础的读者能挖到的深度完全不同。对于刚入门的学生可以直接按照文档里的BOM表采购器件复刻整套硬件平台先用他们提供的测试例程把每个模块跑通。这个阶段的目标是快速建立对整车硬件系统的整体认识。对于有一定经验的同学可以在这套电路的基础上做修改和优化。比如把电磁采集模块的运放换成更低噪声的型号或者把电源树里的分立LDO换成集成电源模块看看对整车性能有什么影响。Soberup在设计时留了不少测试点和跳线位置方便二次开发时测量和修改这个细节对进阶玩家非常友好。对于在做科研项目或者工业产品的人可以重点关注他们的调试方法论和EMC实践。虽然智能车的应用场景相对简单但从原理图到实车稳定运行过程中积累的排查思路放到任何嵌入式硬件项目里都适用。6.3 一点个人建议开源目录看着全但关键在于自己动手最后聊聊我个人看完整个开源目录的感受。很多队伍拿到公开发布的电路方案第一时间就是下载全套文件然后照着打板焊接装上车就能跑一切都理所当然。但一旦车跑起来出了问题就开始懵了因为对电路的理解只停留在抄对了就能用的层面。Soberup这份开源目录的珍贵之处恰恰在于它把为什么这么做讲清楚了。看文档时我一直在想如果当年备赛时能早点看到这样的开源资料我们队伍的硬件组恐怕能少走不少弯路。但反过来如果只是把它当作打板图纸用不花心思研究里面的设计逻辑那这份开源目录对你的价值可能连十分之一都发挥不到。建议每一个使用这份目录的团队都尝试回答这几个问题为什么咪头差分电路的谐振电容要选C0G材质为什么第二级电源要用LDO而不用BUCK为什么看门狗电路要独立于MCU之外把这些问题的答案吃透你才会发现电路设计不是一个个孤立模块的拼凑而是一套环环相扣的系统工程。到那个时候你才算真正从这份开源目录里毕了业。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →