ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

智能车硬件电路开源:选型逻辑与调试教训深度实录

智能车硬件电路开源:选型逻辑与调试教训深度实录 全国大学生智能车竞赛走到第21届“疯狂电路组”已经从内部玩笑变成了不少战队硬件组的名片。我们Soberup战队今年把疯狂电路组的开源目录完整整理了一遍与其说是交差不如说是给下一届留一份能直接照做的硬件设计地图。这篇文章不打算复述开源仓库里的每一个文件而是想把目录背后的选型逻辑、调试教训和最容易翻车的电路细节摊开说说。如果你正准备接手智能车硬件或者正在为“咪头差分放大”“RS485自动收发”“看门狗复位”这些词头疼这篇应该能帮你把图纸上的符号变成靠谱的实物。1. 开源目录整体设计与模块划分1.1 为什么要把整套电路开源智能车竞赛每年换规则但硬件基本功是那些很“土”的东西电源、采样、通信、可靠性。新队员入队最大的问题不是不会画原理图而是翻遍全网找不到一份“为什么这么画”的完整记录。我们的开源目录没有只丢Gerber文件而是把需求分析、芯片选型、仿真文件、PCB注意事项和调试记录全部放了进去目的就是解决“别人能跑我照抄却跑不起来”的尴尬。另一个现实原因是队伍传承。老队员大三毕业知识如果不沉淀新队员就要重新烧两个月的板子。把目录开源等于把试错成本平摊给所有队伍。为了写清楚每个模块的功能边界我们被迫回头重新审视了每一个元件的参数选择以前“看别人这么用就照抄”的电阻电容值这次全部拉出来重新算了一遍很多隐患就是这样被发现的。所以这篇博客实际上也是我们开源过程的复盘那些设计时自以为合理的判断在调试记录面前经常显得很幼稚。1.2 开源目录结构与文件组织这份目录从一开始就按工程化方式组织而不是把一堆原理图扔进网盘。顶层按功能划分每个子目录里都包含原理图、PCB、BOM和测试报告方便下一个人直接对照。Soberup_21th_CircuitGroup/ ├── 00_Docs/ │ ├── 电路设计规范.md │ ├── 芯片选型与替代表.xlsx │ ├── 电源需求预算表.md │ └── 疯狂电路组制度.pdf ├── 01_Power/ │ ├── Power_Main_V2.0.SchDoc │ ├── Power_Main_V2.0.PcbDoc │ ├── Power_Main_V2.0_BOM.csv │ └── Power_Main_TestReport.md ├── 02_Signal/ │ ├── Mic_Diff_Amp.SchDoc │ ├── Current_Sense.SchDoc │ ├── Encoder_Quadrature.SchDoc │ └── Signal_Filter_Notes.md ├── 03_Communication/ │ ├── RS485_Auto_DIR.SchDoc │ ├── UART_3V3_to_1V8.SchDoc │ └── Comm_Test_Log.md ├── 04_Reliability/ │ ├── Watchdog_Reset.SchDoc │ ├── Debounce_Key.SchDoc │ ├── Totem_Pole_Driver.SchDoc │ └── EMI_Filter.SchDoc ├── 05_Software/ │ ├── Hardware_Driver/ │ └── Test_Firmware/ └── 06_Drafts/ ├── 废弃的电源方案.md └── 调试失败记录.md之所以把Drafts也放进去是因为失败的电路方案往往比最终方案更具教育意义。比如我们曾经用线性稳压直接给摄像头供电结果电流一大就掉压后来改成Buck加LC滤波才算解决。这种记录不是给新人看的是给中后期队员看的他们能理解当初为什么绕了那么远才不会自己再绕一遍。1.3 电路组在整车系统里的定位疯狂电路组在整车项目里不是单独存在的它和机械组、算法组、嵌入式组之间有大量接口。我们的做法是在00_Docs里放一份硬件接口约定把所有接插件型号、引脚定义、电源颜色全部写死。例如所有信号连接器统一用XH2.54电源地线统一黑色主控板到电源板的连接器引脚顺序固定。这些规范看起来琐碎联调时却能省一大半扯皮时间。电路组负责输出的不止是板子还有一份“供电能力表”和“故障应急预案”。供电能力表会写明每一路电源能提供多大电流、纹波范围是多少算法组才能知道摄像头能不能直接挂大功率补光。应急预案则规定了发现冒烟、短路、复位异常时先断开哪一路、量哪些测试点。这套流程设置好之后新队员第一次通电就不会手足无措。2. 核心电路模块解析与选型思路2.1 电源系统锂电池充电、Buck降压与防倒灌整车供电从电池组开始通常是两串锂电或车模规则允许的电池方案。我们的电源架构分为三层电池输入保护层、Buck降压层、低压模拟/数字层。最常用的是Buck拓扑因为它在大电流下效率高不会像线性稳压那样把压差全部变成热量。Core模块里甚至做了两路Buck一路供数字5V另一路专门给运放和模拟电路避免数字开关噪声通过电源叠加到信号上。Buck电路的关键参数之一是电感纹波电流。一般取最大负载电流的20%到30%计算公式是L (Vin - Vout) * Vout / (Vin * f * ΔI)以Vin12V、Vout5V、开关频率500kHz、最大电流2A为例若取ΔI0.6A30%电感量约为9.7μH实际选10μH。反馈电阻通过分压器设定输出电压分压电阻电流通常设计在0.5mA到1mA量级太小容易受泄漏电流影响太大静态功耗增加。锂电池充电电路我们直接用了单芯片方案支持4.2V充满截止恒流恒压过程由芯片内部状态机完成。充电输入端接了PMOS防倒灌电路防止电池电量较高时电流反向流入适配器或调试器。防倒灌设计的原则很简单任何能从负载侧向输入侧导通的路径都要切断。很多人只想着防反接忘了防倒灌结果接上外部电源调试时电池和适配器互相充放电发热严重。我们早期就吃过这个亏后来在正极通路串了一颗低内阻PMOS并做好栅极控制逻辑问题才消失。2.2 信号采集与调理咪头差分、电流采样和正交信号咪头差分电路是本目录里最容易被问到的模块。驻极体咪头输出信号幅度很小电机产生的电磁干扰又特别凶所以不能简单用单端放大。我们采用两只咪头或一只咪头加参考地组成差分输入由运放构成差分放大电路。差分放大的好处是共模干扰会被抑制只要两个输入端的走线等长且靠近电源噪声和地弹噪声就会变成共模信号不进入有效增益。放大倍数由反馈电阻Rf和输入电阻Rin的比值决定我们实际用了20k对1k放大20倍再在输出端加一级低通滤波截止频率约15kHz把高频开关噪声滤掉。电流采样电路同样需要差分结构。采样电阻放在低边时地线上会有开关电流单端采样容易产生误差。我们用的方案是10mΩ采样电阻加专用差分放大器增益50倍输出电压到ADC满量程附近。这里最容易被忽视的是采样电阻的走线若直接通过PCB铜箔连接铜箔电阻会与采样电阻分压造成严重的零点偏移。正确的做法是开尔文连接把采样电阻的电流端和电压端分开走电压检测线必须尽量短且远离电感。正交信号生成电路看起来有点“偏门”其实是编码器信号调理的标准做法。很多光电或磁编码器输出的是微弱正弦波不能直接给MCU的定时器引脚。我们先用比较器将正弦波整形成方波再经施密特触发器整形最终得到两路相位差90°的A/B正交信号。设计时要注意比较器迟滞否则信号在阈值附近抖动会产生大量毛刺方向判断就会乱跳。另外A/B信号应分别加上拉电阻和RC滤波滤除线缆耦合的高频干扰。2.3 通信接口RS485自动收发与串口电平转换RS485在这届赛题里主要用于车体与调试台之间的远距离通信。半双工RS485收发器必须管理好方向引脚DE/RE如果完全靠MCU软件切换很容易出现“切换太早丢字节、切换太晚一帧阻塞”的问题。所以我们做了一个自动收发电路TXD经过三极管反向控制收发器的DERXD直接连接RO这样MCU只要发串口数据就能自动驱动总线方向省下一个IO口。自动收发电路的核心限制在于停止位。发送一个字节的起始位是低电平所以TXD一拉低电路立刻进入发送模式这没问题但最后一个停止位是高电平此时TXD恢复高DE被拉到低收发器提前进入高阻。如果总线上的偏置电阻和终端电阻不够强A/B线可能在停止位上变成不确定状态接收方就会判错。低成本的做法是在DE控制脚上加一个RC延迟让方向切换慢半拍更稳妥的做法是在高波特率下加上“延迟切换”电路或软件延时。我们目录里的测试报告记录了几组波特率下的波形结论是9600bps时自动收发很稳115200bps时建议在发送完成后等1个字节时间再切回接收。串口3.3V转1.8V电平转换也是容易踩坑的地方。很多人以为用一个三极管做反向器就能当电平转换但串口信号是双向的单管电路只能单向且会反相。我们在通信模块里给出的方案是基于BSS138的双向电平转换电路NMOS管的栅极接1.8V参考电压源极接1.8V器件侧漏极通过上拉电阻接3.3V两个方向都会被拉低。这个方案在几MHz以内的串口信号上使用稳定关键是两个上拉电阻的阻值要匹配不能差太多否则波形边沿不对称。2.4 可靠性电路复位、看门狗、防抖与图腾柱驱动可靠性是疯狂电路组最看重的部分因为硬件做得再花哨跑比赛时无故复位一次就全完了。复位电路没有用最便宜的RC复位而是选了复位芯片例如低电平有效的MAX809/SGM803系列。RC复位方案在电压缓慢上升时可能产生多次触发造成逻辑混乱。复位芯片自带电压阈值和固定延迟能在电源稳定超过200ms后才释放复位这时间足够让晶振起振。看门狗电路则是复位电路的延伸。软件看门狗一旦主循环跑飞就没用了所以我们在关键板上放一颗外部硬件看门狗由MCU定期喂狗。若喂狗信号丢失超过设定时间看门狗直接拉低复位引脚。这需要选定合适的超时窗口太短会让主循环稍有阻塞就复位太长又起不到保护作用。我们的经验是放在500ms到1s之间并且喂狗代码必须放在主循环里不能放在中断里。调试时也要留一个跳线因为仿真器暂停时MCU会停止喂狗硬件看门狗会拖着你反复复位导致无法断点调试。按键防抖电路用了RC滤波加施密特触发器典型的防抖时间常数是10ms左右。RC时间常数不是越大越好太大会把快速连续按键当成一次按下太小又滤不掉抖动。另一个好用电路是图腾柱驱动用在MOSFET栅极驱动或需要较大瞬时电流的地方。单片机IO驱动能力有限直接驱动栅极电容时边沿变慢MOS管会长时间处于线性区发热明显。图腾柱用一颗NPN加一颗PNP组成推挽结构输入PWM信号输出能吸入和输出较大电流让栅极电压快速跳变。注意两管的基极电阻不能省否则输入悬空时上下管可能同时导通那才是真正的“疯狂电路”。3. 踩坑实录实测与问题排查3.1 上电瞬间的“火花”防倒灌和浪涌应对第一次给整车上电时我习惯先看电流表再按开关。有次刚接上电池电源板上的充电芯片瞬间过热拿万用表一量发现负载端电压居然比电池端高。原因是上一轮调试时外部电源还在给电池反向充了一点电拆掉外部电源后电池电压暂时高于适配器PMOS防倒灌没设计好电流就从负载端倒灌回充电芯片。解决方法是重新画了正极通路把PMOS的源极接电池正漏极接后级并在漏极对地放了足够大的放电电阻避免负载端电压悬空过高。这个问题的排查过程其实很快因为我们在电源板的测试点上预留了电压检测脚。先量输入再量输出倒灌的方向一目了然。给新手提醒一点不要一看到芯片发烫就以为是芯片坏了先把电源链路上所有可能的“回流路径”画出来基本上就能定位。3.2 RS485自动收发丢字节的前因后果我们第一次用RS485自动收发电路时上位机总是一帧数据收不全最后一个字节随机丢失。一开始怀疑是波特率不匹配后来抓波形才发现收发器在最后一个停止位还没结束时就已经切到了接收模式。那种“只接三极管加电阻”的自动收发电路在低波特率下能用在高波特率下受三极管开关速度影响方向切换沿不够干脆。改进方案是在DE控制脚上加了一个几十纳法的电容让方向切换延迟约30μs刚好覆盖一个停止位。这个延迟不能太大否则接收应答时切换不过来。测试记录里写了三组数据9600bps、19200bps、115200bps分别给出了推荐的电容值和电阻值。如果大家不想折腾硬件自动方向用MCU的IO控制DE/RE是最可靠的记得在发送最后一位后延时至少半个位周期再释放总线。3.3 咪头信号总是有“嗡嗡声”咪头差分放大之后波形在静止时能看到明显的50kHz左右噪声低频还有一阵阵“嗡嗡”声。我们先怀疑电源纹波在运放电源脚加了0.1μF和10μF电容噪声没有明显变化。后来发现是因为咪头差分输入端的两根走线一根绕过了电感另一根走了直线两个输入端在PCB上形成了一个环路正好接收磁场干扰。把两根线改成紧耦合并等长之后噪声立刻降下来。另外一个容易忽视的是地线。模拟地和功率地不能随便混在一起我们最终采用了单点接地所有模拟地集中到运放附近再通过一个0Ω电阻或磁珠连接到功率地。这个做法让咪头信噪比提高了不少也让机械组在装车时不用反复调整线束位置来“找安静点”。3.4 看门狗在调试时把程序“咬死”硬件看门狗最烦人的问题不是它不起作用而是调试时它不停地复位。仿真器设置断点后MCU暂停喂狗定时器不再执行看门狗超时后把整个系统复位调试器下一次点击就断不进去。这个问题的标准做法是在电路上给看门狗芯片的使能脚加跳线调试时拔掉跳线跑车时插上。为了测试喂狗时间我们还专门写了一段小Web脚本遍历不同主循环耗时场景确保最坏情况下喂狗间隔低于看门狗超时值。这个坑给我最大的教训是任何“保护机制”都要有旁路开关。否则在实验室里还没真正调完就先被保护机制折磨一天。开源目录里所有涉及看门狗和复位芯片的PCB都预留了跳线位严格算下来这几个跳线比许多电路元件都值钱。故障现象可能原因排查方法充电芯片上电烧倒灌/反接测输入输出压差查防倒灌方向RS485丢最后字节自动收发提前切向抓A/B波形加DE延时咪头嗡嗡杂音差分走线环路收紧走线单点接地调试时复位看门狗未旁路断点前断开看门狗使能电流采样漂移采样电阻走线过长改用开尔文连接4. 开源目录的工程化复用与注意事项4.1 开源协议与使用边界很多人下载开源硬件项目后直接拿去打样却没有注意协议和免责声明。我们的开源目录采用CC BY-SA 4.0作为文档部分许可原理图和PCB工程文件则保留修改声明使用者可以任意复制、修改但必须保留原出处且修改后的作品要采用相同或兼容协议开源。这并不是为了限制而是想保证知识链条不断裂。如果你从里面复制了几页设计规范到你的战队文档里烦请顺手把链接挂上让下一届新人也知道去哪看原版。4.2 不同车模组别的适用性判断这套目录虽然是为21届智能车疯狂电路组做的但大部分模块可以移植到电磁组、摄像头组、节能或越野组。电源架构、RS485通信调试、看门狗复位、电平转换这些内容基本与参赛组别无关。唯一需要区分的是信号采集部分咪头差分和电流采样在越野组可能不太用得上但正交解码、施密特整形这类小电路在电机测速上通用。我们自己把信号部分的模块按“输入源类型”重新归类比如表示“模拟小信号”“差分正弦”“数字边沿”这样到下一届换一个传感器型号时只需要改前端的接口电路后面调理链路不用动。4.3 打样前必须检查的三个细节一是封装库与实物对比。我们曾经因为把电容封装从0805改成0603没重新检查焊盘尺寸结果打样回来后贴片歪了一排全板返工。二是电源正极和地线通路的过孔数量。大电流回路上只放一两个过孔过孔电阻会让金属化孔发热甚至烧断。我通常会让电源过孔数量按每1A电流至少2个0.3mm过孔来估算并在关键路径上多打孔。三是丝印极性标注。电解电容、二极管、MOS管符号的方向必须在丝印层画清楚否则焊接时只能对照原理图浪费时间还容易上反。踩过一次坑之后我们立了一条规矩PCB发板前必须做一次“盲测”让一个没参与设计的人看着丝印说明焊样板焊不出来就改丝印。5. 最后想说给下一届的几件事开源目录里最容易被人忽略的那份“废弃的电源方案.md”其实是我最希望下一届认真读的东西。它记录了我们在一个看似完美的DCDC模块上浪费了整整一周仿真纹波漂亮得不行实际一装到车上电机一启动输出电压就抖动后来才发现是输出电容的ESR没考虑。很多电路设计的玄机不是“选型”而是“为什么没选另一个更炫的方案”。下一届拿到目录我建议先看Drafts再看00_Docs最后再看原理图。原理图只会告诉你结果调试记录才会告诉你边界在哪里而边界才是工程与实验的分水岭。希望你们跑得不比我们差也不要再烧那一排充电芯片了。
返回列表