
21届智能车疯狂电路组的赛季结束后我在整理仓库时发现提交记录已经逼近两百条原理图改了十几版调试日志塞满了两个文件夹。把这些东西梳理成一个结构化的开源目录花的时间甚至比比赛前一周的通宵还多。这份21届智能车疯狂电路组-Soberup战队开源目录就是想把我们这半年踩过的坑、调出来的参数、画坏的板子、跑飞的PID全部打包放出来给正在备赛的学弟学妹、做电机控制的同行以及任何一个对嵌入式底层感兴趣的人提供一份能直接参考甚至直接抄作业的方案。我简单交代一下目录里有什么完整硬件原理图与PCB源文件、软件工程源码、赛道元素识别思路、调参记录、上位机工具使用笔记还有我们在比赛现场遇到的故障清单。下面我会按为什么这么设计关键参数怎么定的怎么复现出了问题怎么查这条线展开希望你看完不只是拿到一堆文件而是理解每个关键决策背后的逻辑。1. 先搞清楚开源的到底是什么疯狂电路组的赛道定位1.1 这个组别为什么叫疯狂电路组全国大学生智能车竞赛每个组别的侧重点都不一样。有的组主打视觉算法有的组拼传感器策略。而我们参加的疯狂电路组核心就在电路本身——比赛规则允许甚至鼓励参赛队伍自己设计驱动电路、电源系统、信号调理板而不是直接用现成的集成驱动模块。换句话说这个组别逼着你把一块板子从原理图开始一点点抠出来。我自己的理解是疯狂两个字对应两件事一是板子上的电流和功率密度确实大电机堵转瞬间电流十几安培电源和驱动芯片如果不留够余量赛道还没跑完冒烟先冒出来二是调试的难度疯狂同一个传感器信号布线稍微差一点采样数据就跳得没法看。所以这个组别对硬件设计、PCB布局、信号完整性的要求比单纯调车要高一个台阶。21届的赛题对车辆运行稳定性要求很高加上充电/电源相关规则限制电路组很多队伍死在能跑和稳定跑完之间的鸿沟上。从这个角度讲开源目录里最有价值的不是某个灵光一闪的算法而是我们如何用电路设计去保证整套系统的可靠性。1.2 开源目录的仓库结构很多参赛者拿到一个开源项目第一反应是找主控代码看完代码就没了。这份开源目录刻意做了分类让不同需求的人能快速定位Soberup-21st-AC/ ├── README.md # 总览与快速导航 ├── hardware/ # 硬件设计 │ ├── schematics/ # 原理图PDF源工程 │ ├── pcbs/ # PCB设计文件 │ └── bom/ # 物料清单与采购参考 ├── software/ # 软件工程 │ ├── firmware/ # 主控工程源码 │ ├── image_processing/ # 图像处理模块 │ └── control/ # PID与状态机 ├── docs/ # 设计文档 │ ├── hardware_design_notes.md # 硬件设计笔记 │ ├── control_tuning_log.md # 调参记录 │ └── race_day_checklist.md # 比赛日检查清单 └── tools/ # 调试辅助脚本与上位机配置这个结构的核心思路是分层开源硬件和软件各自独立但互相引用文档单独成册把菜的原理、参数的计算过程、故障的排查路径记录清楚。很多开源项目只给结果不给过程读者拿到板子不知道怎么改、拿到代码不知道怎么调这恰恰是我们最想避免的。2. 方案选型与技术栈拆解为什么用这套组合2.1 主控与电机驱动的硬件选型先说主控。21届我们最终选定的是恩智浦家的RT1064芯片Cortex-M7内核跑600MHz对于摄像头图像处理和PID控制来说性能余量非常充足。之所以没选更高规格的芯片不是因为追求性能天花板而是因为RT1064的生态成熟、参考设计多官方库的底层驱动完善能在比赛周期内把更多时间留给电路设计和调车。选完主控之后就是电机驱动这部分是疯狂电路组的重头戏。我们没有用现成的集成驱动模块比如BTN7971这类半桥芯片而是自己做了基于栅极驱动芯片加分立MOSFET的方案。前级用的栅极驱动器将单片机输出的PWM信号电平转换为适合驱动MOSFET栅极的电压后级用四颗低导通电阻的N沟道MOSFET搭成H桥。整个驱动板的持续电流能力比集成模块高出不少压降也更低电机响应明显更跟手。驱动方案的关键参数我在设计前做了估算。直流电机额定工作电流大约在4A到6A堵转和起步瞬间会冲到十几安培所以驱动板至少要按20A峰值来设计。MOSFET选的型号常温导通电阻在3毫欧左右双管并联后等效内阻约1.5毫欧满载压降几乎可以忽略功耗也基本压在封装散热能力范围内。栅极驱动芯片的峰值电流足够大开关频率我们设成20kHz既避开了人耳可听范围也不会带来明显的开关损耗。2.2 传感器组合与信号采集链路电路组的传感器方案我们说穿了就是电磁加摄像头的融合路线。摄像头用灰度摄像头采集赛道图像在环形赛道、十字路口、起跑线这些元素识别上比纯电磁有优势电磁传感器则用一组电感排布拾取赛道敷设的电磁线信号作为速度规划和入弯判断的补充。图像信号在电路板上的处理很考验设计功底。摄像头输出的是模拟信号虽然走线很短但模拟电源和数字电源如果不做隔离图像上就会出现横纹。我们在PCB上把模拟地做了单点汇聚处理摄像头供电单独走一路滤波后的电源信号线包地处理才把画面彻底稳定下来。电磁信号的调理电路也是自制自调的。采集到的感应电压通常在毫伏级别直接进单片机ADC根本没法用必须经过仪表放大器放大和带通滤波。这一级电路的放大倍数、滤波截止频率都是根据赛道电磁线的实际频率和距离关系定的。放大倍数取太高会把噪声一起放大取太低又采不到远距离信号最终我们通过实测扫频确定了合理的增益区间并把滤波器的中心频率锁定在赛题电磁信号频率附近。2.3 软件框架与算法分工软件架构上我们选择了裸机大循环搭配中断的方式没有上RTOS。原因比较简单比赛车的控制逻辑是固定的时间序列摄像头采集、图像处理、PID计算、PWM输出这几个环节按固定顺序执行就足够上了操作系统反而要处理任务调度和优先级切换的开销。代码里最核心的两个闭环是速度闭环和方向闭环。速度环用编码器反馈方向环的反馈则融合了摄像头给出的横向偏差和陀螺仪给出的角速度。这里要特别提一下角速度闭环的思路只靠摄像头偏差做转向车在快速入弯时会有明显的滞后现象因为偏差要等车头偏了才能反映出来。加入陀螺仪角速度作为内环之后相当于给转向系统增加了一个阻尼项车身的姿态变化能立刻被抑制高速过弯的稳定性提升非常明显。图像处理方面核心是提取赛道边线和中线。我们对灰度图做了二值化然后通过扫描行找到左右边线的跳变点计算中线偏移量。难点在于光照变化和阴影干扰简单固定阈值在比赛场地的灯光下经常失效最后我们改成了局部自适应阈值对每一行单独算阈值实测在复杂光照环境下稳定性好了很多。3. 核心细节解析原理图里的关键参数和代码里的关键逻辑3.1 电源树设计与余量计算电路组最容易翻车的环节我个人认为是电源。整车电源全靠在板子上自己处理一次电源和二次电源如果设计不合理单片机复位、摄像头花屏、舵机抖动都是连锁反应。我们的电源树分为两级。电池电压通过一个低压差降压芯片稳到稳压目标值供整个逻辑电路使用驱动板直接电池供电通过栅极驱动芯片的电平转换来控制电机舵机单独接电池通过稳压芯片稳定电压。把数字电源、模拟电源、大电流驱动电源分开走避免了大电流在共用回路上产生地弹噪声。PCB上采用星型接地大电流回路和信号回路分开模拟地单点连接实测下来ADC采集值的跳动范围从几十个LSB降到了个位数。电源电容的选取上有个容易被忽略的细节多颗小容量陶瓷电容并联比单颗大容量电容滤波效果更好。因为MLCC电容在高频下ESL会拉低谐振频率多颗并联可以把谐振点分开覆盖更宽的频段。我在驱动板电源输入端放了三组不同容值的电容组合包括脉动吸收用的低ESR电解电容和高频去耦的小容量陶瓷电容配合电源完整性设计确保全速跑动时各路电压波动控制在允许范围内。3.2 PID参数的计算与控制实现PID是智能车控制的老生常谈但真正把它调明白不是套公式那么简单。我们的速度环采用的是增量式PID转向环采用的是位置式PID加角速度微分项。速度环的PID频率设定在200Hz左右因为编码器的脉冲数在低速下分辨率有限太高频率容易造成低速度下的抖振。转向环的频率高一些因为摄像头每帧图像大约在50Hz到100Hz我们在每个控制周期里同时读出当前角速度做内环反馈。调参的顺序有一个比较实用的经验先内环后外环。先把角速度内环的P调到一个车不震动的值然后加上D让它快速回归目标角速度内环稳定之后再去调位置环的P和D。这样一层层往上调比直接同时调四个参数要容易定位问题。代码里角速度控制的核心逻辑是读取陀螺仪的Z轴角速度与目标角速度相减得到误差经过PID控制器输出目标转向控制量然后叠加在方向环的输出上。这里强调一下陀螺仪数据一定要做低通滤波但滤波的截止频率不能太低否则会引入相位延迟让转向反应变慢。我们最后用的是一阶低通滤波器截止频率设在了15Hz左右实测在灵敏度和稳定性之间取到了比较好的平衡。3.3 赛道元素识别与状态机21届赛道上的关键元素包括环岛、十字路口、起跑线、断路等。我们的识别思路是一个有限状态机加独立识别模块的组合。以环岛识别为例图像处理模块会检测到环岛入口的特征变化触发进入环岛状态随后车辆按照预先规划的转向策略绕环岛行驶驶出检测到出口特征后恢复直道模式。这里最怕的是误判比如把正常赛道上的阴影当成入口。我们的处理方法是多帧确认连续三帧都检测到相同的入口特征才认为进入了环岛状态虽然反应上会延迟几十毫秒但换来的是不会在直道上无缘无故转向。状态机的维护也是代码里容易写乱的地方。我们在工程里把每个状态定义为一个独立结构体状态切换记录在日志里跑完一圈看串口输出的状态流就能还原出车辆当时的判断过程。这个日志功能在比赛调试中帮了大忙很多看似诡异的行为一查状态流就发现是某帧图像误判导致状态机提前翻转。4. 复现流程从拉取开源目录到跑通第一圈4.1 环境搭建与工具链准备如果你拿到这份开源目录想复现我建议先按顺序做三件事装好IDE、编译固件、烧录验证。我们用的IDE是官方提供的集成开发环境配合芯片厂商的SDK。安装的时候要注意SDK版本和IDE版本的匹配低版本SDK可能不支持较新芯片的型号。仓库里的README我写了详细的版本号对照表照着装就行。编译之前需要确认一点工程里勾选的芯片型号必须和你的板子一致。我们开源的是实际使用的芯片型号但如果你换了一颗同系列但不同封装的芯片启动文件和链接脚本都要改。这类问题最容易在代码明明编译过了但上电没反应的时候出现先检查芯片型号再检查时钟配置。烧录工具我们用的是DAP调试器速度快、体积小从JLINK换过来之后烧录一个固件的时间基本可以忽略。仓库里附了调试器的驱动和烧录脚本硬件连接引脚也都标注在了原理图里按图接就行。4.2 底层硬件验证清单不要急着把整套车程序烧进去跑。复现过程中的第一个坎是确认硬件本身没问题我的验证顺序是电源→主控→外设→电机。先给板子通上电用万用表量各路电压是否在设计值范围内。这里有个容易忽略的细节如果稳压芯片输出正常但主控就是不启动大概率是复位电路或晶振的问题。检查复位引脚的时序、晶振是否起振基本都能定位。主控能跑之后先点个灯或者用调试器看程序是否停在某个位置。如果程序跑飞在某个中断里可能需要检查中断向量表映射是否正确。这个阶段不要接电机可以先把PWM输出引脚接上示波器确认波形频率和占空比正常。最后才接电机和传感器。电机测试要先用一个极低的占空比看电机是否转动确认方向没有接反再逐步加大。如果把占空比直接拉到满电机堵转时电流很大驱动板和电源都很容易出问题。这个从低压低频开始验证的习惯帮我避免过至少两次烧板子的惨剧。4.3 从能走到跑得快的调参节奏硬件验证通过之后软件调车的过程是循序渐进的。我们大概分成了四个阶段直道行驶、过弯初调、综合赛道、冲刺调优。直道行驶阶段目标只有一个车能沿赛道中线直行不画龙。这个阶段主要调速度环的P和转向环的比例系数先把车稳住别追求速度。直道画龙一般不是速度环的问题而是转向环响应太激进在直道上不断修正中线看起来就是来回摆头。这时候减小方向环的比例系数往往立竿见影。过弯调参是整个比赛中时间占比最大的一块。先把入弯速度调低让车稳定地过一个普通弯道然后逐步提升入弯速度。如果发现入弯时冲出赛道观察是转向不足还是转向过度转向不足一般是目标打角不够或者P太小转向过度则可能是角速度环的D过大把转向动作刹得过猛。综合赛道就是在标准赛道上跑完整圈主要优化加减速的节奏和状态机切换的时机。这个阶段我们用上位机软件看实时的横向偏差、角速度、设置速度和实际速度这些曲线人和车配合着调。需要说明的是调参不是一劳永逸的换了场地、换了轮胎、甚至电池电压不同参数的最佳点都会漂移这也是为什么文档里我们留了一整份调参日志记录每次参数改动的背景和效果。5. 踩坑与排查速查这份目录里藏着的避坑指南5.1 常见问题速查表我把我们比赛前后遇到的典型问题整理成了一张速查表方便你遇到问题时快速定位。现象可能原因排查方向上电后主控无反应电源未建立、晶振未起振、复位时序异常先量电压再看晶振波形最后检查复位引脚摄像头图像出现横纹模拟电源和数字电源串扰检查模拟地是否单点汇聚摄像头供电是否独立滤波电机抖动但转速上不去驱动PWM频率不合理或驱动能力不足用示波器看PWM波形和MOSFET栅极波形高速入弯车辆冲出赛道转向环响应滞后或角速度阻尼过小检查图像处理的延迟适当增加角速度环的D项电磁信号波动大放大倍数不合适或滤波器中心频率偏移用信号发生器扫频校准调理电路车在直道上画龙转向环比例系数过大减小方向偏差对应的打角比例优先稳定直道这些问题的共性根源大多数还是信号和电源层面的隐形污染。前期设计时多花一天做接地和滤波后期调车能省下整整一周的排查时间。5.2 我个人摸索出来的几条独家心得第一任何改动都做版本记录。我们比赛后期尝到了甜头调参软件里接入了Gitee仓库每次改完代码后自动同步每次改完参数也在调整日志里记录前后值。这样晚上睡得晚也不怕改崩了随时能回滚最重要的是能够回溯最后一次跑得好是在哪个版本、哪个参数下做到的。第二不要迷信单一传感器。摄像头图像一丢电磁信号一抖任何一组传感器都有失效的时候。我们的做法是给传感器数据设计可信度标签当摄像头横向偏差跳变过大时就暂时切到电磁数据的估计值顶上几帧等图像恢复后再切回来。这套冗余策略在比赛现场的强光干扰下帮了大忙。第三把代码的可读性当成普通需求来管理。比赛编码的常态是快速迭代命名随意、逻辑堆叠但我们在比赛后期整理开源目录时才发现认真写的注释和清晰的模块划分不仅让后来的学弟学妹能看懂也让自己在赛前最后一周改代码时省了很多回忆的时间。第四电池和轮胎的管理比想象中重要。电池电压从满电到低压电机响应和舵机力矩都会有明显变化。赛前我习惯让车在电池中等电压区间调参不要一直用刚充满的电池调否则比赛时电量下降会明显感到车变软。轮胎磨损后抓地力变化会让同一套参数效果差异很大比赛前换新胎后要重新过一遍基础参数。我个人在实际操作中的体会是21届智能车疯狂电路组最大的收获并不是赛场上那张成绩单而是从一颗画错的电容、一个算错的电阻、一段跑飞的代码里建立起来的系统性直觉。现在回过头整理这份Soberup战队开源目录我真心希望它不只是代码和图稿的堆砌而是把我们在无数个深夜里反复验证过的东西沉淀下来让下一个人不用再从零开始踩同样一轮坑。如果你正准备接手下一届智能车或者在做任何和电机控制、嵌入式硬件有关的项目我建议你从这份目录的hardware设计笔记和调参日志读起那里面记录的弯路远比我在这篇文章里写的多。最后再分享一个小技巧复现别人的工程时先把对方所有模块的验证顺序理清楚再动手接线和烧录千万别一上来就跑整车。先确保电源、主控、驱动、传感器各自健康整车的里程只是时间问题。