21年电赛F题的智能送药小车最后真正把人卡住的往往不是代码而是那块板子。赛前在实验室里跑得顺风顺水一进测试场地电机一启动主控就复位循迹直线走得笔直一进弯道就冲出去压线病房号识别本来在电脑上跑得好好的装车之后图像时不时花屏。这些现象九成以上跟代码写得对不对没关系而是电路设计留下的隐患。这篇就把我从立项到打板、从空载测压到整机联调的全过程摊开讲一遍重点是硬件这条路怎么走、为什么这么走、哪些地方看着不起眼但实际能要人命。内容围绕立创梁山派这套主控平台展开涉及降压电路设计、电机驱动、灰度循迹、超声波测距接口、PCB 布局这些实打实的环节适合准备做电赛小车、智能车、移动机器人底盘的硬件新手和想补硬件短板的软件同学参考。1. 从F题任务书反推小车到底需要哪些电路模块1.1 任务要求拆解成硬件指标拿到题目第一步不是打开立创EDA画图而是把任务书逐条翻译成硬件需求。21年F题的核心是小车从药房出发沿地面引导线行驶到指定病房完成药品送达动作再返回药房基础部分只跑固定病房发挥部分要求识别病房门口贴的数字到指定病房停车并声光提示。把这段话拆开其实对应了下面几件事沿引导线行驶需要循迹传感器黑线识别精度要够进弯不能丢线。走到指定病房需要知道我走了多远、到了第几个路口这靠编码器里程计或者路口计数。识别病房号需要摄像头或者多路灰度组合判断属于感知模块。停车并声光提示需要蜂鸣器或者语音模块加上必要的指示灯。往返双向行驶意味着电机要能正反转路径判断逻辑依赖里程。把这些拼起来一台小车的硬件骨架就出来了主控 电源 电机驱动 编码器 循迹模块 视觉/识别模块 声光提示 人机交互按键/拨码/OLED。我当时的做法是画一张模块框图贴在工位上每确定一个模块就标注它的供电电压、峰值电流、通信方式。这张表后来直接决定了电源树怎么分、接口留多少路。很多新手上来就画原理图画到一半发现 5V 口不够用、3.3V 电流不够供摄像头只能返工重画浪费的其实是打板周期。1.2 一张模块清单把电气参数一次性定死模块清单不是简单罗列名字关键是把电气参数写清楚。我整理的那张表大致是这样模块供电典型电流峰值电流接口方式梁山派主控5V 输入板载转 3.3V120mA200mA-双路直流减速电机12V 带编码器12V300mA×21.5A×2PWM方向灰度循迹模块5V60mA80mA模拟/数字超声波测距5V15mA30mATrig/EchoOLED 显示屏3.3V20mA30mAI2C视觉模块5V250mA400mAUART蜂鸣器5V30mA40mAGPIO/PWM编码器3.3V/5V20mA×2-AB 相这张表里最容易忽略的是峰值电流那一列。电机堵转、摄像头启动瞬间、蜂鸣器起振的那一下电流都远大于典型值。电源设计如果只按典型值算样机在桌上转没问题一上负载就露馅。我给自己定的规矩是整个 5V 轨的供电能力按所有模块峰值电流之和再留 50% 余量来选。按这个算法5V 峰值大约 2.2A预留 50% 就是 3.3A 左右所以我选的是一颗 3A 级别的降压芯片而不是随手拿的 1A 模块。这个数字看着保守但后面整机联调时它成了我最不用操心的一环。提示模块清单里至少要写下电压、典型电流、峰值电流、接口类型四列。只写5V 供电这种信息等于没写选型阶段一定会返工。2. 主控选梁山派GD32F470的理由与最小系统落地2.1 为什么是它而不是更常见的F103做小车选主控很多人的第一反应是 STM32F103C8T6 那种最小系统板便宜、资料多。我在第一届做车时也是这么选的但到了 F 题这种要跑视觉、要算里程、还要调 PID 的场景F103 就开始吃力了。运算能力是一方面更现实的问题是外设不够编码器要占两个定时器PWM 要占定时器通道串口要接视觉模块I2C 接 OLEDADC 采灰度几路下来引脚和定时器资源很快就见底。立创梁山派用的是 GD32F470ZGT6LQFP144 封装Cortex-M4F 内核跑到 200MHz带 1MB Flash、512KB SRAM。这几项参数对小车场景的意义很直接主频高意味着一路跑 PID 一路跑串口解析一路跑显示刷新不会互相拖后腿SRAM 大意味着图像缓存和多路数据缓冲不用抠抠搜搜引脚多意味着接口能全引出不用为了一个 I2C 去和别人共用。而且它是 144 脚LQFP144 焊盘间距 0.5mm手焊难度比 QFN 友好太多我这块板子就是自己手焊的。另外它有 DCI 摄像头接口和 EXMC 总线后面如果想把视觉也收到主控上做不用单独的视觉模块这条路是通的。当然实际比赛我用了外置视觉模块分担压力主控专心跑控制和逻辑这样软件上更稳。2.2 最小系统落地时最容易踩的三个细节梁山派是成品开发板不是裸芯片所以最小系统这块其实是接线和供电。但这几个点非常容易翻车第一开发板本身的供电来源要理清。板子可以通过 Type-C 口 5V 供电也支持外部 5V 输入。比赛时我不建议用 Type-C 边调试边供电因为 USB 线拖着小车跑不现实。正确做法是从自己的电源板引 5V 到开发板的 5V 输入脚同时共地。这时候要确认这一路 5V 和 USB 供电路径不会打架——板上有电源切换一般没问题但上电前最好用万用表量一下确认没有反向倒灌。第二IO 电平是 3.3V不能想当然接 5V 信号。GD32 部分引脚是 FT5V 容忍的但不是全部。超声波模块的 Echo 输出是 5V直接接进去可能长期损伤引脚。我的处理是加一个简单的电阻分压Echo 串 2kΩ 到 IO再从 IO 接 1kΩ 到地5V×1/(21)≈1.67V……等一下这个比例不对应该是输出 5V 经 2k 上、1k 下分压点电压 5×1/3 ≈ 1.67V太低了可能识别不到高电平。所以正确的分压比要反过来上电阻 1k、下电阻 2k分压点 5×2/3 ≈ 3.33V正好落在 3.3V 逻辑高电平范围内。这个细节很多人算反接上去发现测距一直读不到回波还以为是模块坏了。第三去耦电容要贴着电源引脚放。开发板内部已经有滤波但从外部灌进来的 5V 建议在接口处加一个 100μF 电解并联 0.1μF 陶瓷电容尤其是电源线比较长的时候。长导线有等效电感电机切换的 dv/dt 会顺着线传导主控那一侧如果没有缓冲复位就会频繁发生。注意5V 信号进 3.3V 主控优先考虑电平转换芯片用电阻分压只是应急方案且必须算对上下比例。分压后的电平最好用示波器实测确认。3. 电源树设计从12V电池到3.3V的两级降压链路3.1 为什么不做成单级而是两级降压整个系统的能量流是这样的12V 锂电池组 → 5V → 3.3V。有同学会问为什么不直接 12V 降到 3.3V 一步到位原因有两个。一是压差和发热。12V 降到 3.3V压差接近 9V。如果用的是线性稳压LDO这些压差全部变成热耗散。主控加外设按 300mA 算功耗就是 9V×0.3A ≈ 2.7W一颗 SOT-223 封装的 LDO 散热根本扛不住芯片会热到烫手甚至热保护。所以第一级必须是开关电源Buck把 12V 高效率降到 5V。二是纹波和噪声隔离。电机是整车上最大的干扰源它挂在 12V 或者 5V 上都会往电源里灌噪声。如果 3.3V 直接由 12V 开关电源分出来主控感受到的纹波跟电机耦合得更紧。分成两级之后第一级 Buck 输出 5V 给功率设备电机驱动、超声波、视觉第二级再从这个 5V 上取电用 LDO 或者二次 Buck 降到 3.3V 给主控和编码器。中间那一段 5V 上挂了大电容相当于给 3.3V 这一侧做了一道缓冲。所以电源树是这样的12V 电池 ── Buck(12V→5V, 3A) ──┬── 5V 功率域电机驱动VM、超声波、视觉、蜂鸣器 └── 3.3V 域主控、编码器、OLED经 LDO 或二次 Buck3.2 第一级Buck的关键参数计算与器件取舍第一级从 12V 降到 5V输出电流按 3A 设计。选 Buck 芯片时我关注这几个参数输入电压范围、输出电流能力、开关频率、是否内置 MOSFET。输入范围12V 电池满电可能到 12.6V3S 锂电放电到 9V 左右。所以芯片输入范围要覆盖 9~13V选 4.5~28V 这类宽输入的比较稳。输出电流至少 3A 连续留余量。像 MP1584 这种标称 3A 的小模块实际长期只能跑 1.5~2A会发热。我倾向选 TPS5430 这类经典 3A 方案或者直接用一体化的 DC-DC 降压模块。开关频率频率高电感和电容可以选小一点但开关损耗和 EMI 上升。一般 500kHz 左右比较折中。反馈与保护优先选带过流保护、热关断的芯片。电感的选择有公式可循。以 500kHz、12V 输入、5V 输出、3A 为例纹波电流一般取输出电流的 30% 左右即 0.9AL (Vin − Vout) × Vout / (Vin × fsw × ΔI) (12 − 5) × 5 / (12 × 500000 × 0.9) ≈ 35 / 5400000 mH 级别的换算结果是大约 6.5μH取标准值 10μH 比较合适。输出电容按纹波电压要求选想要纹波小于 50mV配合 10μH 电感大致需要 200μF 以上的容量所以我用了两颗 100μF 的电解并联再并一个 0.1μF 陶瓷电容滤高频。这个 0.1μF 不能省电解电容的高频等效串联电阻较大高频纹波靠它压不住。3.3 第二级3.3VLDO和二次Buck怎么选第二级我一开始想用 AMS1117理由是简单、便宜、谁都会用。但算了一笔账就放弃了5V 降到 3.3V压差 1.7V主控加外设按 350mA 算功耗约 0.6W。AMS1117 在 SOT-223 封装下 0.6W 已经偏热夏天车内温度高容易触发保护。最终我选了一颗低压差的 LDO压差小、静态电流低或者干脆用二次 Buck。这里给一个判断标准场景推荐方案理由3.3V 负载 200mALDO简单、纹波低、无需电感3.3V 负载 200~500mA低压差 LDO 或二次 Buck看压差和散热余量3.3V 负载 500mA二次 BuckLDO 发热无法接受小车场景里主控加编码器加 OLED3.3V 侧大概 300mA 上下属于中间地带。我最后用的是低压差 LDO因为它输出干净对 ADS 采样和编码器信号友好。散热上加了铺铜和过孔到地平面实测芯片表面温升在可接受范围。提示LDO 的功耗就是 (Vin−Vout)×Iout选型时一定要算这个值不能只看标称电流。1A 的 LDO 在压差大时也可能只能跑 200mA。4. 双电机驱动与编码器测速电路4.1 H桥驱动芯片选型与外围电路电机驱动这块L298N 是最经典但也最不推荐的方案——老、压降大、发热猛一个模块能吃掉 1V 以上的压差电机本来就不快再被压一下更慢。我选的是 TB6612FNG双通道每路 1.2A 连续、3.2A 峰值内部集成续流二极管外围只要几个滤波电容就能跑。TB6612 的接线逻辑很简单每路电机三个控制脚AIN1、AIN2 决定方向PWMA 决定速度。STBY 是待机脚必须拉高芯片才工作这个脚我第一次用的时候忘了接PWM 给了半天电机纹丝不动查了半天才发现是 STBY 悬空。现在我在板子上直接给 STBY 接一个上拉电阻到 VCC这样即使主控初始化顺序有变化也不会卡住。外围电路上VM电机电源和 VCC逻辑电源要分别加去耦电容VM 侧并一颗 100μF 电解加 0.1μF 陶瓷VCC 侧并 0.1μF。电机线从驱动芯片出来之后建议在靠近电机接线端子处再放一颗小电容做吸收。PWM 频率的选择也有讲究。太低比如 1kHz 以下电机会有啸叫而且电流脉动大太高比如 50kHz 以上开关损耗上升驱动芯片发热。实测 15~20kHz 是很舒服的区间既听不见啸叫发热也可控。我在定时器上把 PWM 配到 18kHz 左右调速线性度不错。4.2 编码器接口正交解码为什么比脉冲计数靠谱带编码器的减速电机一般输出 AB 两相正交信号。最省事的做法是只用 A 相靠外部中断数脉冲。这在小车低速时勉强能用但有两个问题一是方向判断要靠额外逻辑二是抖动会引起误计数。更稳的方案是用定时器的编码器模式做正交解码。GD32 的通用定时器支持这个模式硬件自动根据 AB 相的相位关系判断方向并增减计数抖动也被硬件滤波了。配置的时候把两个通道都设成编码器输入模式计数范围设成 0~65535然后定时读取计数值再清零就能算出这一小段里的位移和方向。/* 编码器模式配置思路伪代码示意流程 */ void encoder_init(void) { /* 1. 使能定时器和对应 GPIO 时钟 */ /* 2. 配置两路 GPIO 为浮空/上拉输入 */ /* 3. 定时器设为编码器模式双通道均计数 */ /* 4. 计数方向按 AB 相位自动判断 */ /* 5. 设置自动重装值为 65535 */ /* 6. 使能定时器 */ } int16_t encoder_read(void) { int16_t cnt (int16_t)get_counter(); /* 读当前计数值 */ set_counter(0); /* 清零便于分段测速 */ return cnt; }这里有个换算要提前算好假设电机编码器每转 13 个脉冲减速比 1:30那单相每转就是 390 个脉冲正交四倍频后是 1560。轮径 65mm周长约 204mm那么每个四倍频脉冲对应的位移是 204/1560 ≈ 0.13mm。这个数记下来后面做里程和停车定位全靠它。4.3 电机电源和逻辑电源分开走线的必要性这点必须单独拎出来说。电机是感性负载启动和换向时会产生很大的反向电动势和浪涌电流。如果电机的电源线和逻辑电源共用一段走线或者地线上共用一条细线浪涌就会通过地阻抗耦合进主控典型表现就是主控莫名复位、OLED 闪屏、ADC 采样乱跳。我的做法是电机电源从电源板单独一对粗线拉到驱动芯片 VM逻辑电源从另一个接口进两条地线在电源板单点汇合不走小信号区域。PCB 上电机电源走线宽一点我用了 60mil 以上和信号线保持距离绝不平行走长距离。如果电机线必须跨过信号区那就走不同层中间隔地平面。这一条在打板前改成本为零打完板发现干扰只能飞线非常难看还容易掉。5. 循迹灰度传感器与数字识别摄像头的接口电路5.1 灰度循迹模块的选型与信号处理循迹是送药小车的命脉丢一次线就可能压线甚至冲出场。常见方案有三类单点红外对管、多路灰度传感器阵列、线性 CCD。单点方案太粗糙只能判断黑白进弯就懵CCD 分辨率高但驱动复杂、价格高多路灰度阵列是性价比最高的选择。我用的是 8 路灰度阵列输出可以是模拟量也可以是数字量。数字量模式是模块内部已经做了比较输出高低电平接线简单缺点是阈值固定遇到不同场地光照就飘。模拟量模式是把每路的电压引出来用主控 ADC 采样然后在软件里动态算阈值——比如取所有通道的最大值和最小值中值作为黑白分界。这个动态阈值是让小车适应不同场地的关键技巧。模拟输出接 ADC 时要注意ADC 参考电压要稳最好用主控板上的 3.3V 并加滤波采样通道之间要有足够的建立时间可以在通道切换后延时几个微秒再读。8 路灰度如果分两个 ADC 交替采效率更高。5.2 视觉模块的供电与串口隔离病房号识别我用的是外置视觉模块通过串口把识别结果发给主控。这里有两个坑。供电坑视觉模块启动和图像处理时电流波动很大峰值能到 400mA。如果它和主控共用一路细的 5V主控电压会被拉低。我给它单独一路 5V或者在它的供电脚旁边放一颗 220μF 电解做缓冲。串口电平坑视觉模块串口一般是 3.3V 电平和主控直接对接没问题。但如果模块是 5V 电平就要加电平转换。我见过有队伍直接对接一开始能通跑一会儿就丢包最后查出来是电平不匹配导致接收端长期工作在临界状态。稳妥做法是串口线上串 100Ω 左右的电阻做限流或者直接用电平转换芯片。软件上串口通信一定要有帧头帧尾和校验否则视觉模块一帧没发完、主控就按半帧数据解析会出现莫名其妙的误判。我当时定的协议是帧头 0xAA 0x55 数据 校验和主控用状态机接收收到完整帧才处理。5.3 循迹传感器的安装高度和间距这一条属于机械和电气的交叉点但影响电路选型判断。灰度传感器的探测距离一般在 5~15mm 之间装太高信号弱装太低容易蹭地。8 路阵列的总宽度要略大于黑线宽度题目黑线约 1.8cm这样直线时至少有两路压在线上丢一路也不至于失线。间距上如果阵列太密传感器之间会互相串扰红外发射管的光打到隔壁接收管上。我选的是间距 10mm 以上的模块如果自己做板发射管和接收管之间加隔光墙会更稳。这些决定了电路板上要给循迹接口留多少引脚、走线怎么排属于必须在画图前想清楚的事。6. 超声波测距、声光提示与人机交互电路6.1 超声波模块接口与电平处理送药小车需要避障和到位检测超声波是常用方案。HC-SR04 这类模块工作电压 5VTrig 脚输入可以由 3.3V 主控直接驱动3.3V 已经够判定为高电平但 Echo 输出是 5V必须处理。前面提过用 1k 上、2k 下的电阻分压得到约 3.33V是可行的应急方案。测距的软件流程是Trig 给一个 10μs 以上的高脉冲模块发 8 个 40kHz 方波然后 Echo 拉高高电平持续时间就是往返时间。距离 高电平时间 × 声速 / 2。声速取 340m/s也就是 0.034cm/μs所以距离(cm) 时间(μs) × 0.017。几个实测经验盲区HC-SR04 在 2cm 以内测不准如果小车紧贴障碍物再测读数会乱。软质障碍物海绵、布料吸声回波弱容易测不到。多传感器串扰如果装多个超声波要分时触发不能同时发。温度影响声速随温度变化精度要求高的话要加温度补偿。比赛环境温度变化不大可以忽略。关键词里提到过超声波接收电路设计如果不想用模块、想自己做典型方案是 40kHz 换能器加 CX20106A 这类接收芯片做一级放大加带通。不过对小车来说模块够用自研电路收益不高除非要追求体积或者一体化。6.2 蜂鸣器驱动电路别直接用IO带题目要求到达病房后有声音提示。蜂鸣器分有源和无源有源通电就响无源需要给方波。有源蜂鸣器工作电流几十毫安超过单个 IO 的安全驱动能力绝对不能直接用 IO 拉。正确做法是用一个 NPN 三极管如 S8050做开关IO 通过一个 1k 基极电阻控制三极管蜂鸣器串在集电极和电源之间并在蜂鸣器两端反并一个续流二极管比如 1N4148吸收反向电动势。如果要用无源蜂鸣器做不同音调就用 PWM 驱动改频率就能变音。这样到达提示和错误报警可以用不同音调区分体验更好。6.3 OLED和按键/拨码人机交互的最小配置调试阶段一块 0.96 寸 OLED 能救命。它能显示当前状态、传感器读数、里程、识别结果比反复插串口看打印快得多。OLED 走 I2CSCL/SDA 各串一个 4.7kΩ 上拉到 3.3V地址一般是 0x3C。按键用于切换模式、复位、手动标定。机械按键有抖动硬件上可以并一个 0.1μF 电容做简单消抖软件上再配合 10~20ms 的延时确认。拨码开关则适合设置目标病房号——比赛前拨到对应数字主控上电读取比在代码里改宏定义方便太多不需要重新烧录。这一节的电路都不复杂但它们决定了调试效率。尤其是 OLED我强烈建议每台车都装一块哪怕最后比赛时拆掉。7. PCB打板布线功率与信号分区的实操取舍7.1 地平面的处理单点接地还是完整地平面地线处理是新手最容易犯错、也最影响稳定性的地方。我的原则是大电流回路和小信号回路分开在电源入口单点汇合。具体做法是PCB 上给电机驱动和电源部分留一块独立的铺铜区主控和传感器部分留另一块两块铜皮之间用一条窄的桥连接或者通过一个 0Ω 电阻、磁珠连接。这样电机的浪涌电流主要在自己的地铜里流动不容易跑到主控那边去。如果整板铺一个完整地平面电机电流会从主控芯片底下穿过复位风险直线上升。当然如果板子很小、电流不大完整地平面也有它的好处回流路径短、EMI 低。判断标准是看地回流路径会不会经过敏感器件。会经过就分区不会就一个平面到底。7.2 电源走线宽度和过孔数量的估算走线宽度不够大电流下会发热甚至烧断。一个粗略的工程估算外层 1oz 铜1mm 线宽大约能安全承载 1A 左右温升 10℃ 以内经验值是每安培至少留 1mm 宽度或者用在线计算工具精确算。按电动车机 1.5A 峰值算电机电源线至少 1.5mm 宽。我实际画的时候直接给到 2mm 甚至 3mm反正空间够。过孔同理一个 0.3mm 孔径的过孔大约能过 0.5~1A大电流路径上要多打几个并联。7.3 晶振、去耦、模拟信号的布局禁忌几个必须遵守的布局规则晶振紧贴主控走线越短越好晶振底下不要走其他信号周围包地。去耦电容贴电源脚每个电源引脚配一颗 0.1μF走线到引脚和到地都要短宁可绕也要贴着放。模拟信号远离数字和功率灰度 ADC 走线不要和 PWM、电机线平行能包地就包地。复位电路靠芯片复位线尽量短旁边放滤波电容避免被干扰误触发。接口集中在一侧所有接线端子排在板子边缘一侧方便插拔也便于走线分区。我第一次打板时把编码器接口放在了电机驱动旁边结果编码器计数时不时跳数后来发现是电机切换时的干扰耦合到了编码器信号线上。第二版把编码器接口移到主控这一侧走线缩短问题消失。7.4 打板前的自检清单投板之前我一定会过一遍这份清单电源网络全部标注了电流方向粗细够不够有没有把 5V 和 3.3V 网络标错、短接电机和信号地是否分区汇合点是否唯一所有 IC 的电源脚都有去耦电容吗接口的引脚定义和模块是否一一对应有没有镜像晶振、复位、下载口的布局是否合规丝印是否清晰标注了接口功能这份清单看着琐碎但每一条都可能对应一次打板返工。一块四层板打一次不便宜时间成本更贵。8. 上电调试链路从空载测压到整机联调的问题定位8.1 分级上电不要一次把所有模块插满板子焊好之后最忌讳的就是所有模块一插、电池一接、看能不能跑。一旦冒烟你都不知道是哪个部分的问题。正确的做法是分级上电空载测电源先不插任何模块只焊电源部分上电测 5V 和 3.3V 输出用万用表确认电压正确用示波器看纹波。接主控单独给主控供电确认能下载程序、能被识别。逐个加模块每次只加一个模块加完测一次电压和功能确认没问题再加下一个。最后加电机电机放最后因为它最容易引入干扰。这套流程慢但能保证出问题时定位范围很小。我见过太多一把梭然后烧掉主控的案例。8.2 示波器看纹波判断电源是否合格光用万用表测电压不够因为万用表看的是平均值纹波它看不出来。用示波器探头打到 AC 耦合量 5V 和 3.3V 的纹波峰峰值。一般而言5V 轨纹波在 100mV 以内、3.3V 轨在 50mV 以内算合格。如果电机一转纹波就飙到几百毫伏说明电源去耦不够或者地线耦合严重必须改。我实测第一版的时候电机启动瞬间 5V 掉到 4.3V主控直接复位。后来在 5V 输出端加大电容、把电机电源和逻辑电源彻底分开掉压控制在 4.85V 以上问题解决。8.3 典型故障的排查链路现象可能原因排查方法主控频繁复位电源掉压、地耦合、复位脚干扰示波器看 5V/3.3V检查复位脚波形编码器计数乱跳信号干扰、上拉缺失、走线过长加滤波电容缩短走线检查上拉OLED 闪屏/花屏I2C 上拉不对、电源不稳检查 4.7k 上拉测 3.3V 稳定性超声波读数跳变电平不匹配、盲区、串扰测 Echo 电平分时触发避开盲区电机不转STBY 未拉高、PWM 无输出、VM 缺失逐脚测电压确认 STBY 高电平循迹进弯丢线动态阈值未更新、传感器高度不对看 ADC 原始值调整安装高度这份表是我几次翻车之后整理的基本涵盖了小车调试里八成以上的问题。遇到问题先对表排查比盲目改代码高效得多。8.4 整机联调时的几条私人心得最后分享几条压箱底的经验都是文档里不会写、但实际很管用的第一把关键测试点引出来。在 PCB 上给 5V、3.3V、地各留一个测试焊盘调试时万用表一搭就能测不用去戳细小的引脚。这块板子我留了五六个测试点省了大量时间。第二电机线用双绞或者屏蔽。电机两根线绞在一起能有效降低对外辐射。有条件的用屏蔽线屏蔽层单端接地。这一条对编码器稳定性帮助极大。第三软件和硬件要留接口给标定。灰度阈值、PID 参数、里程系数这些全部做成可以在运行时通过串口或者按键修改的变量不要写死在代码里。比赛前标定五分钟能搞定写死的话每次都要重新烧录急死人。第四留一路备用 IO 和备用电源接口。临场经常会想加个传感器或者换个模块板子上有备用口就不用现场飞线。这个习惯让我在某次临时想加一个到位开关时省了半小时。第五电池电压监测不能省。用 ADC 分压采电池电压低于阈值就报警。锂电池过放会鼓包比赛用到一半没电也很尴尬。分压电阻选大阻值比如 100k 10k减小静态损耗。整台车从原理图到能跑我前前后后改了三版板子。第一版死在电源干扰第二版死在编码器串扰第三版才算稳。回头看这些问题都不是什么高深的技术就是电源分区、地线处理、电平匹配、去耦这些基本功。把这几件事做扎实小车的稳定性会有质的提升剩下的精力才能放心投到算法和策略上去。