☰
智能车电路开源实战:从Buck电源到IR2110驱动的完整指南
2026/11/6 3:02:02 网站建设 项目流程

21届智能车赛季结束以后,我把Soberup战队疯狂电路组的东西从头到尾整理了一遍:十几版原理图、PCB工程、调试记录、调参日志,外加一堆“当时要是早点明白就好了”的教训,打包放进了开源目录。有人问我把电路组老底亮出去,明年怎么跟人打?我的回答是,智能车电路这东西从来不是靠藏两张图就能赢的,你把原理图给别人,别人照样要被Buck的电感啸叫、IR2110的自举电容失效、差分放大的地环路干扰折磨一遍,这些坑只有自己踩过去才算是自己的。

这篇开源目录说明,既是给你们做参考,也是给我们战队做一次完整的赛季复盘。21届疯狂电路组最大的特点是,电路板不受官方标准板的约束,电源、驱动、传感调理都能自己设计,自由度很高,但对基本功的要求也随之拉满。文章里我会把开源目录的模块划分、几个核心电路的选型和计算过程、比赛现场真正容易出问题的环节,以及我们踩过的最深的坑,从头到尾说清楚。希望对准备做电路组的队伍、对想搞嵌入式开源项目的朋友,都有点参考价值。

1. 开源目录里到底放了什么,敢把电路组“底裤”亮出来

1.1 “疯狂电路组”疯狂在哪,以及为什么自研电路值得做

先解释一下“疯狂电路组”这个词。智能车竞赛里部分组别允许车队自行设计传感器、电源和驱动电路,不强制使用组委会或者赞助商提供的现成板子。21届开始,赛制对电路自研的包容度提高,很多队伍在摄像头组、电磁组里都开始尝试自己画功率板。所谓“疯狂”,就是指电源、电机驱动、信号调理、通信接口这些全部自己搭,从立项到上赛道,全链路都掌握在自己手里。

刚组队的时候,我们也有队员觉得直接用官板、换换参数就能跑,何必自己画板。但实操下来发现,官板为了兼顾各种车模和传感器,电路往往是通用设计,性能余量给得很保守。比如摄像头供电纹波、电机驱动死区时间、电流采样带宽这些点,通用板不会专门为你优化。而疯狂电路组的意义就在于,你可以针对自己车子的实际电流曲线和传感器布局,把每一路电源、每一个信号链路都调到最合适的状态。哪怕只是让图像噪声少几个灰度值,弯道入弯就能早两毫秒识别。

当然,自由也意味着责任,全部自研的麻烦在于问题定位难度成倍上升。你无法再跟队友说“这是官板的问题”,每一个奇怪现象都可能来自原理图、PCB布局、焊接、参数配置中的任何一环。开源目录里的所有文件,就是我们跟这些“锅”斗争一整年的结果。

1.2 目录结构:不是随手丢工程文件,而是按模块+踩坑记录组织

很多队伍开源就是丢一堆 .zip 和 .sch,下载下来根本不知道从哪看起。Soberup的开源目录花了大概两周时间整理,原则很简单:一个功能模块一个文件夹,每个文件夹里必须有原理图、PCB、测试数据、踩坑记录四层内容。没有测试数据支撑的原理图,基本等于没开源。

目录顶层是这样划分的:

  • power_system:电池输入防护、DC-DC降压、LDO、电压监控、EMI滤波。
  • motor_driver:半桥驱动电路、自举电容选型、死区配置、MOSFET选型对比。
  • sensor_frontend:摄像头供电与信号调理、电磁信号差分放大、RC滤波参数表。
  • reliability:复位电路、外部看门狗、通信接口(RS485)、电平转换。
  • control_notes:方向环角速度输出、舵机执行标定、速度环调试记录。

这么划分的好处是,别人拿到目录以后,可以按自己的需求直接跳转到对应模块。比如你只想看驱动电路,就不用去翻电源部分的一堆EMI测试波形。

每个模块里的“踩坑记录”是我们特意加的。传统开源一般只给“正确方案”,但真正有价值的往往是“错误方案为什么会错”。比如驱动模块里记录了我们第一版IR2110电路在高端MOS开关时偶发栅极欠压的问题,传感器模块里记录了电机启动导致图像行抖动整个排查链路。这些内容才是复现时最省时间的东西。

1.3 开源到底图什么

说句实在话,开源对我们自己也有好处。赛季结束后,很多电路细节如果不整理归档,过半年自己都忘了当初为什么这么设计。把每个模块的计算过程、选型理由写成文档,等于强迫自己重新审视一遍设计,很多当时“感觉差不多就行”的地方,在写文档时你会发现其实差很多。

从比赛角度看,电路设计水平在智能车竞赛里的区分度越来越高。开源目录如果能帮到其他学校的电路组,让大家的起点都往上抬一抬,比赛的整体水平也会更高,这对所有队伍来说都是好事。

2. 电源系统是车的心脏:Buck电路选型与Buck-Boost边界

2.1 电池、舵机、单片机:三套电压体系各管各的

疯狂电路组的第一步永远不是画驱动,而是先把电源架构想清楚。我们车的电池用了2S锂电池,标称7.4V,满电8.4V,放电截止我们设在6.6V。整车用电设备大概分三档:

  • 电机驱动:直接吃电池电压,不走降压,保证功率路径最短。
  • 舵机与摄像头:舵机标称5V,但启动瞬间电流能冲到1.5A到2A,摄像头对纹波敏感,一般5V降压后还需二级LDO或LC滤波。
  • 单片机与逻辑电路:3.3V,电流小但纹波要求高,和模拟采样共用电源时更要小心。

很多队伍图省事,一路Buck输出5V,然后5V接LDO出3.3V,听起来没问题,实测却经常翻车。原因在于舵机大电流瞬态会让Buck的输出电压出现几十毫伏甚至上百毫伏的跌落,如果3.3V的LDO输入余量不够,输出纹波会跟着变差。摄像头图像一旦出现行抖动,你的图像处理再强也是白搭。

我们的方案是:5V主Buck只负责舵机、风扇、灯条这些“耐造”负载;另一路独立的Buck输出5V专门给摄像头和传感器板;单片机3.3V从传感器板上用低噪声LDO给出。多一路电源的成本不多,但干扰隔离的效果非常明显。

2.2 电感、电容、频率:一次完整的Buck计算

选型不靠玄学,公式也就几个。以我们的5V主Buck为例,输入最高8.4V,输出5V,负载按持续2A、瞬时3A设计,开关频率取500kHz。

占空比D大约是:D = Vout / Vin = 5 / 8.4 ≈ 0.6。纹波电流取负载电流的30%左右,也就是0.6A,这个比例是工程上的常见折中——纹波电流太小需要大电感,体积和DCR(直流电阻)都会变大;太大则输出纹波和电感损耗都会增加。电感量计算:

L = (Vin - Vout) × D / (f × ΔI) = (8.4 - 5) × 0.6 / (500000 × 0.6) ≈ 6.8μH

所以实际选了10μH的电感,留一点余量。开关频率这块要特别注意,500kHz属于中等范围,既能保持电感体积可控,又不至于让EMI处理变得太难。如果为了减小电感盲目上到2MHz,布局不好辐射干扰会非常头疼,板上的摄像头模拟信号很容易被带崩。

输出电容的计算主要是看ESR对纹波的影响。Buck输出电压纹波的尖峰大部分由输出电容的ESR决定,ΔV ≈ ΔI × ESR。想压到50mV以内,ESR要低于80mΩ,一般用一颗或两颗低ESR的陶瓷电容并联解决。陶瓷电容直流偏压特性明显,16V耐压的电容在5V输出时容量衰减不大,如果条件允许选25V耐压的电容更稳妥。

2.3 Buck-Boost的可用边界:不是哪里都需要升降压

热词里一直有Buck-Boost电路,我也看到很多队伍在电源部分强行上Buck-Boost,理由是“万一电池电压波动呢”。实际上2S电池组在6.6V到8.4V范围内,输出5V用普通Buck完全满足要求,Buck-Boost不仅效率相对低,环路补偿也更复杂,容易自激。那我们还用不用Buck-Boost?用,但只在特定位置用。

我们用Buck-Boost的地方是车载调试电路。调试时经常要接USB设备、无线模块、外置编码器采集盒,这些设备有的要5V,有的要3.3V,而它们可能会从外部单独供电,电压范围无法预知。这时候一块宽压输入(3V到18V)的Buck-Boost小板,能保证不管外界供电是5V还是12V,板内都能稳定输出所需电压。这个板子不必上赛道,但能极大提高调车效率。

如果一定要把Buck-Boost放到赛车上,我的建议是看清楚负载电流。Buck-Boost的功率电感要承受更大的纹波电流,转换效率通常比Buck低三到五个百分点,在电池容量固定的情况下等于偷走了你的续航和功率余量。能用单级Buck解决的,不要为了“显得高级”而增加风险。

2.4 电源PCB布局最容易欠的账:环路面积和铺地

电路设计里真正决定成败的往往是PCB布局。同样的原理图,布局差一毫米,纹波噪声可能差一个数量级。Buck电路的开关环路是高频di/dt最大的区域,面积必须尽量小。我们的做法是:输入电容紧贴Buck芯片的VIN和GND引脚,输出电感紧贴SW引脚,输出电容紧贴电感后端和GND。

铺地方面,疯狂电路组的特点是大电流和模拟电路共存,所以功率地、模拟地、数字地要分开铺,然后在采样点或电源输出电容处单点连接。最开始我们不懂,整板共地,结果电流采样ADC数值抖得没法用,后来把功率地单独拉了一整块区域,模拟采样点从输出电容根部单独引线出来,问题才解决。这个细节在开源目录的PCB文件里有点评标注,大家可以对照看。

3. IR2110半桥驱动与自举电容:驱动电路里最隐蔽的“悬浮地”

3.1 为什么放弃集成驱动芯片,选择IR2110自己搭

市面上有大量集成电机驱动芯片,比如BTN7971、DRV8701,外围元件少、调试简单。但疯狂电路组之所以自己搭半桥驱动,主要有两个原因:一是集成驱动芯片的封装散热能力往往限制电流上限,持续大电流时要加散热片甚至主动风冷,反而比分立MOS方案更麻烦;二是集成方案把关键参数封装死了,想调整死区时间、栅极驱动电流、开关速度都无从下手,而智能车恰恰需要针对不同电机特性去调这些参数。

IR2110是我们最终选的半桥驱动方案,它有两路独立的高端和低端输出,高端悬浮驱动能力,外围只多一个自举电容和一个自举二极管,结构简单。和常见的IR2104相比,IR2110的好处是两路输入独立,可以灵活配置成互补PWM或者独立开关,配合高级定时器的死区功能很顺手。

3.2 自举电容的计算:不是拍脑袋也不是越大越好

IR2110用在半桥驱动时,高端MOS的栅极驱动电压来自自举电容。低端MOS导通时,VS被拉到地,VCC通过自举二极管给自举电容充电;高端MOS要导通时,自举电容放电给高端栅极供电。这个电容如果选太小,高端开通瞬间电压跌落过大,栅极驱动不足,MOS管会工作在放大区,损耗剧增;如果选太大,每次低端导通时间很短,电容来不及充满,同样会出问题。

自举电容的经验公式是:C = Qg / ΔV,其中Qg是高端MOS栅极总电荷,ΔV是允许的栅极电压跌落。我们用的MOS管Qg约为60nC,允许跌落0.5V,那么C = 60nC / 0.5V = 120nF。实际工程上还要留至少5到10倍余量,所以选了220nF。如果你的开关频率很低、占空比很小,低端导通时间很短,就要相应把电容加大到470nF甚至1μF,或者在PWM策略上保证最低导通时间。

这个坑我们真的踩过。第一版板子自举电容用了100nF,空载测试、轻载测试都没问题,一上跑道重载,跑半圈后高端MOS就开始发热,最后直接烧管。用示波器钳在VS到VB两端才看到,重载时高端栅极电压掉了将近3V,MOS管处于半导通状态,导通阻抗飙升。换成220nF后问题消失,这个波形记录也放进了开源目录。

3.3 死区、VS尖峰和MOS体二极管的反向恢复

半桥驱动必聊死区。如果上下管同时导通,直通短路电流会瞬间摧毁MOS管。单片机高级定时器可以直接配置死区,我们用的STM32F4系列,TIM1和TIM8自带互补PWM死区寄存器,比较方便。死区时间设置要参考MOS管的关断延迟和体二极管反向恢复时间,我们的MOS管规格书上trr大概是30ns,死区配置在100ns左右比较稳妥。太小有直通风险,太大则会产生体二极管续流损耗,影响效率。

另一个容易忽视的问题是高边VS脚的负压毛刺。低端MOS关断瞬间,由于寄生电感和体二极管反向恢复,VS端会出现短暂负压,如果超过IR2110的额定值可能损坏驱动芯片。解决办法是尽量缩短电机接线、在VS脚对地加一个快速恢复二极管或者瞬态电压抑制二极管进行钳位。我们实测发现,不给VS做钳位时,示波器能看到接近-7V的毛刺,加上钳位管后毛刺被压到-1V以内,这个改动对驱动板可靠性提升非常明显。

3.4 推挽电路:在栅极驱动和电平转换里的实际身影

热词里还有“推挽电路”,很多人以为推挽只是功放的事情,其实在半桥驱动里推挽结构到处都是。IR2110内部输出级本质就是推挽结构,用两个MOS管交替把栅极拉到高或拉到低,这样既能提供大电流充电,又能快速放电。

我们板上还有三极管做成的推挽电路,用在场效应管栅极驱动的加速上,具体是PNP和NPN组成互补射极跟随器,放在单片机引脚和MOS栅极之间,提升栅极充放电速度。这个做法在驱动大功率MOS时很常见,因为单片机的IO驱动能力有限,直接推大栅极电容会大大拉长开关时间。

电平转换电路里也能看到推挽思想。我们有个3.3V单片机到5V传感器的IO转换,最省事就是两个三极管组推挽,一个NPN一个PNP,交叉连接,基本不耗电、双向都能过。当然这种电路在高速信号上有局限,串口和低频控制信号用起来没有任何问题。

4. 传感器的“耳朵”:差分放大、RC滤波与摄像头抗干扰

4.1 差分放大在电流采样和电磁信号调理里各司其职

疯狂电路组的“传感器耳朵”好不好使,直接决定图像和赛道信息的质量。差分放大电路在车里有两个典型用途,一个是电流采样,一个是电磁信号调理。

电流采样方面,如果只做低端采样(采样电阻在负载和地之间),共模电压很低,普通运放就够了,我们用过OPA2333,输入失调电压很低,适合毫伏级信号放大。采样电阻压降只有几十毫伏,要把它放大到ADC的满量程附近,得先算好增益。比如10A电流流过10mΩ电阻,压降100mV,如果你希望ADC在2V左右得到满量程,增益就是20倍。这个场景里真正难的不是算增益,而是让运放输入端的两个差分走线等长且紧贴,否则共模噪声全变成了差模误差。

如果要采样电机高端电流(采样电阻在电池正极和负载之间),普通运放就没戏了,因为共模电压就是电源电压,远超运放供电范围。这时候要么用集成差分放大器,比如INA240、AD8210这类高共模电压的电流检测放大芯片,要么用仪表放大器。我们最终选择INA240,共模电压可以吃下电池电压波动,内部集成了滤波,布板更省心。

电磁信号调理则完全是另一套逻辑,电磁杆上感应出来的信号只有几毫伏到几十毫伏,同时还有大量20kHz以外的干扰。我们的做法是先用一个仪表放大器做差分转单端,抑制共模干扰,然后过带通滤波或者RC低通,再进单片机ADC。关键点是传感器信号的地不能和电机驱动共用一个回路,否则电流突变产生的地弹会让ADC读数随油门变化发生周期性偏移——这个我们在比赛调试时遇到好几次。

4.2 RC滤波的截止频率怎么定,别乱拧

RC滤波看着简单,截止频率f = 1/(2πRC),但具体该滤多少,很多人是乱给的。我们的原则是先搞清楚“有用信号的带宽”和“干扰信号的频率”,让滤波器正好卡在中间。

举一个实际例子:电磁传感器信号本身是20kHz的交流信号,整流滤波后我们只需要直流分量作为位置信息,这时RC低通截止频率可以放到1kHz以下,尽量平滑。又比如舵机PWM是50Hz,如果传感器上混入了电机PWM的10kHz到20kHz开关噪声,低通截止频率放在几百赫兹,能把这些噪声压掉,但如果你把截止频率放到1kHz,图像或数值上还是会看到拖影。

RC滤波的阻容选择要注意,电阻值不能太大,否则运放驱动能力不够,输出会被拉低;电容也不能太大,否则响应太慢,赛道元素识别会滞后。通常我们用的组合是1kΩ配100nF(截止约1.6kHz),或者在运放输出后加一颗22Ω串联电阻和1nF对地电容(截止约7.2MHz)来滤高频振铃。

4.3 摄像头防抖:机械只是表象,供电和地才是命门

很多人一提摄像头防抖,就想到机械减震、软胶垫、3D打印支架加固。这些确实有必要,但真正的图像抖动,有相当一部分是供电纹波和地电位跳动造成的。摄像头是个典型的脉冲负载,数据读取瞬间电流变化快,如果供电路径太细太长,或者电源地阻抗过高,图像就会出现明暗条纹和行同步抖动。

我们的摄像头供电链路是这样的:5V传感器电源 → LC滤波(10μH电感加100μF电容) → 3.3V LDO → 摄像头。LC滤波的存在,相当于把摄像头和前面的Buck开关噪声隔离开来。实测这级LC对图像质量的提升非常明显,之前不加LC时,电机重载后图像暗部噪点明显增多;加LC后,图像灰度波动从±8个灰度值降到了±2以内。这个改进几乎没有成本,强烈建议所有摄像头组队伍都试一下。

摄像头信号线也需要处理。数字摄像头的D0到D7数据线在PCB上要尽量等长,并且每根线靠近地线,必要时加33Ω串联电阻抑制振铃。模拟摄像头则要在输出端做钳位,防止瞬态高压打坏单片机ADC输入脚。

4.4 一次“电机一转图像就抖”的完整排查过程

这是我们赛季里最典型的一次排查,过程很有代表性。现象是车子静止时图像清晰稳定,一推油门电机转动,图像就开始抖动,而且抖动频率和电机转速成正比。

第一步,我们怀疑是摄像头供电被电机拉低,就把示波器直接夹在摄像头供电电压上,重载时电压确实有大约200mV的跌落,但幅度算不上离谱。第二步,怀疑是电机PWM辐射干扰,给电机线套磁环、加滤波电容,干扰有减弱,但没根除。第三步才想到地弹——把示波器地夹夹在摄像头端正极和负极之间看,发现地电位相对电池负极了有近500mV的噪声。

问题根源是PCB上摄像头地线和大电流电机地走了同一段较长的铺铜,电机电流在这个共用地阻抗上产生电压降,摄像头地相对电池负极了被抬高了。解决方法是把摄像头地单独走一条粗线回到电源输出电容的根部,和功率地只在电容处单点汇合。改完这两根线,图像抖动立刻消失。排查全过程花了两天,但最后改动的也就是地线走线。这件事之后,我们对“地”这个东西特别敬畏。

5. 可靠性三板斧:复位电路、看门狗和RS485

5.1 外部看门狗和内部看门狗,哪个更适合赛场

智能车跑赛道时最怕的不是慢,而是程序跑飞然后车子直冲出赛道。赛场上电磁环境复杂,电机驱动和无线模块同时工作,单片机死机、跑飞的情况并不罕见。可靠性的第一道防线就是看门狗。

内部看门狗(STM32的IWDG)当然能复位,但它的时钟是独立的LSI,精度一般,超时时间设置不好可能误复位。WWDG窗口看门狗则要求在特定窗口内喂狗,如果主循环因为某些阻塞卡住,能更快识别。我们最终选择了外部硬件看门狗,典型型号是SP706S或者MAX706,硬件超时时间约1.6秒,喂狗信号由单片机一个GPIO控制。

外部看门狗的好处是完全独立于单片机器件本身,单片机即使彻底跑飞、时钟崩了、JTAG都被占用,它依然能按时拉低复位引脚。坏处是如果你把这个GPIO接错了,或者初始化代码里忘喂狗,板子会不断复位,反而变成“无法启动”。我们的做法是:上电后先屏蔽看门狗复位信号输出一小段时间,让单片机完成时钟初始化和摄像头配置,再开启喂狗。这个“初始化窗口”在开源目录里有详细代码注释。

5.2 复位电路不能只靠RC,要处理“掉电立刻上电”的场景

很多人一画复位电路就是10kΩ电阻加100nF电容,上电复位能用,但有一个典型的坑:比赛现场如果电源抖动,电压掉到复位门槛以下又立刻恢复,RC电容上的电压还保持着,单片机复位引脚没有被拉低足够长时间,就会造成“半复位”状态——外设没有完全重新初始化,程序却继续跑,表现出来就是车子失控乱冲。

我们用复位监控芯片替代了纯RC复位,型号是TCM809或MAX809,原理很简单:电源电压低于阈值(比如2.93V)就持续拉低复位引脚,直到电源恢复到阈值以上再释放。这个方案能正确处理掉电瞬间和缓慢上电的场景。引脚上再并联100nF电容滤波,避免噪声误触发。

关于复位,还有一个小细节:单片机的NRST引脚在强电磁干扰下可能被噪声毛刺误触发。解决方法是复位引脚串一个1kΩ电阻再连复位芯片输出,同时在引脚放10nF电容对地,这样既能抗干扰,又不影响正常复位。

5.3 RS485与电平转换:赛场上长距离调试不丢包

很多队伍调车时用蓝牙或者WiFi传数据,但比赛现场无线信道乱七八糟,经常卡顿、丢包。我们后来改用有线RS485进行调试和数据记录,稳定性完全是两个级别。RS485是差分信号,抗共模干扰能力强,支持多点连接,用双绞线引出到跑道边,距离几十米完全没问题。

电路上我们用MAX3485,这是3.3V供电的RS485收发器,可以直接和单片机UART连接,不需要额外电平转换。A、B差分线之间要加120Ω终端匹配电阻,位置通常在总线的两端。如果不加,长线上信号反射会让收发器误判逻辑电平,出现偶尔乱码。此外,为了让总线空闲时保持确定状态,我们在A线加一个上拉电阻到3.3V,B线加一个下拉电阻到地,这样无数据时A-B始终大于200mV。

RS485在智能车里还可以用于多车协同或者传感器间通信。如果有多台设备挂同一总线,每个节点的收发器地址要设置正确,并且发送逻辑要避免冲突,一般用主从轮询结构,不要让两个从机同时抢占总线。

5.4 EMI滤波与功率地/模拟地的最后一公里

可靠性里还有一个被低估的点:EMI滤波。电机的碳刷在换向时会产生宽带火花噪声,这会通过电源线和空间辐射两条路径干扰单片机系统。我们在电池输入端加了完整的EMI滤波器,包括共模电感、X电容和Y电容,同时电机线靠近电机端加了铁氧体磁环,实测对电磁传感器和摄像头的噪声抑制效果非常明显。

地线规划的“最后一公里”其实指所有地最终汇合的位置。我们整个板子的功率地、模拟地、数字地在原理图上看是分开的网络名,但在PCB上最终通过一个点连接,这个点选在电源输出大电容的GND引脚上。这样做的原因是让功率回路的瞬态大电流不经过模拟小信号的地平面,避免共阻抗耦合。开源目录里有这个连接点的PCB截图,照着做基本不会出大问题。

6. 方向环PID输出的是角速度,不是PWM:执行端的标定哲学

6.1 图像偏差到角速度:方向环的中间量

很多第一次做智能车的人最容易误解的一件事,是认为方向环PID的输出直接就是舵机PWM。我们早期也这么干过,结果车速一上去,转向严重不足,弯道里频繁冲出赛道。原因在于,方向环的物理意义应该是“期望的航向角速度”,而不是“某个执行器角度”。

图像处理给出的是车子相对赛道的横向偏差和角度偏差,方向环(一般是PD或PID)计算出的是一个控制量,这个控制量的单位应该理解为rad/s,即我希望车子当前以多大的角速度转头。为什么要用角速度而不是直接用PWM?因为角速度是描述车子运动的物理量,和车速、轮距、前轮转角都有明确的几何关系,用它作为中间变量,程序逻辑才能在不同速度下保持一致。

6.2 角速度到舵机PWM的几何关系

有了期望角速度ω之后,还要把它变成舵机的PWM占空比。这里用到最简单的自行车模型:车子的角速度与前轮转角δ和车速v满足近似关系ω = v × tan(δ) / L,其中L是轴距。反过来,期望前轮转角就是δ = arctan(ω × L / v)。

舵机是一个角度伺服机构,PWM占空比和输出轴角度近似线性,但线性范围和死区都需要实测。我们的标定流程是:先让舵机空载,从PWM中间值开始左右各给不同占空比,记录对应前轮转角,做成一张标定表;然后再根据上面的几何关系,把“期望角速度+实时车速”查表反推成PWM直接输出。这样方向环参数就变成了纯粹的物理量调参,而不是调一堆无单位的PWM增量,换个速度不用再重调。

这里有个反直觉的结论:如果车速越快,同样的角速度需要的前轮转角越小,因为角速度等于线速度除以转弯半径,速度提高后,维持同样的转弯角速度需要更小的转向角度。这也是为什么很多队直接把方向环输出加到PWM上,低速时好用,高速时转向过头或不足,其实是这个非线性映射没有处理好。

6.3 速度环和角速度环的串级关系

有的方案会把角速度环和速度环串起来。比如导航层根据转向需求输出一个期望角速度,速度环保证车子的速度是恒定的,这时候方向环的输出可以直接送给底层执行器。也可以在阿克曼转向结构中让左右后轮差速,把“角速度”转换成左右轮速差,这样方向控制和速度控制天然解耦。

速度环本身输出的是什么?速度环PID输出最终是电机占空比或电流值,单位不是角速度。从控制工程的角度看,串级系统里内环输出的是执行器指令,外环输出的是内环的给定值。如果你在软件里把速度环输出命名为“角速度”,要格外小心,因为后面执行器收到的其实是PWM,一定要有一步单位换算,否则代码可读性和调参效率都会很差。

6.4 我踩过最狠的坑:把PID输出直接当PWM给舵机

这个坑我要单独拿出来说。有一版程序,方向环PID输出限幅之后直接和舵机中值相加,得到PWM。场上跑中速弯道还行,速度一快就明显推头,我一度以为是舵机响应慢,换了更大扭矩的舵机,问题依旧。后来把角速度和PWM的关系用示波器加编码器数据联合分析才发现,高速时相同的PID输出对应的转角根本不够。

改完标定表以后,车子在高速弯的表现立刻上了一个台阶。这件事给我最大的教训是:控制环节的每一个输出量,都要明确它的物理单位,哪怕只是给自己看的代码注释,也要写清楚。不要小看这一步,它能让你的调参思路清晰很多,也能让你在比赛现场快速定位问题。

系列开源目录里,我们把方向环、速度环的所有标定数据表、拟合曲线代码、和PWM反查表都放了进去,照着流程做一遍,大概两天时间就能把转向链路标定完成,而不需要像我们当初那样试错接近一个月。

最后,分享一点个人体会

整理开源目录的过程中,我把这一整年的电路设计和调车经历重新过了一遍,最大的感受是:智能车电路组拼的不是谁画的板子花哨,而是每个环节谁更扎实。Buck的环路没算对,负载一上来就露馅;IR2110自举电容没算清,重载跑几圈就烧管;地线没规划好,摄像头图像能折磨你一整个赛季。这些坑,原理图上看不见,示波器上一抓一个准。

如果你们也在准备新赛季的电路组,我建议从电源和信号完整性这两个方向入手,先把示波器用熟,再考虑堆功能。开源目录里的文件只是参考,真正值钱的是我们记录的那些错误路径。希望Soberup的这份开源目录能让你们少走几步弯路,也希望明年赛场上能见到更多自己画板、自己调电路的队伍。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询