从零构建无线充电智能车:STM32控制、PID算法与电磁感应能量管理实战
2026/8/28 18:46:55 网站建设 项目流程

1. 项目概述:从零到一,构建一辆无线充电智能车

全国大学生智能汽车竞赛,对于每一个工科生来说,都是一个充满挑战与激情的舞台。它远不止是让一辆小车跑起来那么简单,而是一个集机械、电子、控制、算法于一体的综合性系统工程。我们团队选择的是“无线充电组”,这个组别的核心挑战在于,车模需要在没有物理接触的情况下,从赛道上的无线充电发射线圈获取能量,驱动自身完成寻迹、超车、避障等一系列任务。这听起来有点像科幻电影里的场景,但用我们手头的单片机、传感器和一堆元器件,确实能把它变成现实。整个项目周期,从拿到规则书时的茫然,到最终车模在赛道上稳定疾驰,是一个不断踩坑、学习和突破的过程。这篇报告,我就以一个亲历者的身份,把我们北京科技大学无线充电组在备赛过程中的核心思路、技术选型、实操细节以及那些“血泪教训”整理出来,希望能给后来者,尤其是对嵌入式系统、自动控制感兴趣的同学,提供一个实实在在的参考。

我们的核心目标很明确:设计并制作一辆能够自主循迹的智能车,其能量来源完全依赖于赛道中铺设的无线充电发射线圈。这意味着,车的能源管理策略、控制算法的实时性与鲁棒性,都必须围绕“间歇性、非接触供电”这一核心约束来展开。它不再是一个简单的“电池供电-永远运行”模型,而是一个“能量捕获-存储-高效利用”的动态平衡系统。适合阅读这篇报告的,可以是正在备赛的学弟学妹,也可以是希望深入了解如何将单片机、电力电子、控制理论应用于一个具体而有趣的项目的爱好者。我会尽量用“说人话”的方式,把原理讲清楚,把步骤写明白,把踩过的坑标出来。

2. 整体系统架构与核心设计思路

一辆无线充电智能车,我们可以把它拆解成三个核心的子系统:能量系统、感知系统和控制系统。这三个系统并非孤立,而是通过主控单片机紧密耦合,形成一个有机的整体。

2.1 能量系统:从“空中取电”到稳定驱动

能量系统是整个车的生命线,也是无线充电组区别于其他组别的根本。其设计直接决定了车辆能否持续运行以及性能上限。

2.1.1 无线能量接收与整流稳压

赛道上的发射线圈通常工作在一定频率(如100kHz左右)的交变磁场中。我们的车模底部需要安装一个接收线圈(谐振线圈),通过电磁感应原理获取能量。这里第一个关键点就是谐振匹配。为了让能量传输效率最高,接收端LC谐振回路的谐振频率必须与发射频率一致。我们采用了经典的LCC-S补偿网络。与简单的串联或并联补偿相比,LCC-S拓扑在松耦合条件下能提供更稳定的输出,并且可以实现原边电流恒定,这对发射端友好。在设计时,我们使用Simulink进行了建模仿真,调整电感、电容参数,观察在不同耦合系数下的输出功率和效率曲线,最终确定了元器件的取值。

接收到的交流电经过一个由快恢复二极管组成的全桥整流电路,转换为脉动直流。紧接着是稳压环节。这里有一个重要的权衡:线性稳压器(如LDO)纹波小但效率低,开关稳压器(如Buck、Boost电路)效率高但可能引入噪声。我们的策略是分级处理:首先用一个Buck电路将整流后的高压(可能几十伏)降至一个中间电压(如12V),为电机等大功率部件供电;然后再通过一个高效的LDO或另一个Buck电路,产生极其干净的5V或3.3V,为单片机、传感器等核心芯片供电。确保单片机电源的纯净,是后续所有算法稳定运行的基础。

2.1.2 超级电容储能与能量管理

由于无线充电区域是离散的,车辆在非充电区行驶时,必须依赖存储的能量。我们选择了超级电容组作为储能元件,而非锂电池。原因有三:一是充放电速度快,能瞬间吸收充电线圈的大功率输出,并在需要时提供大电流驱动电机;二是循环寿命极长,经受得住比赛期间数万次的充放电;三是安全性高,没有热失控风险。

能量管理逻辑由单片机实现,其核心是一个状态机

  1. 充电状态:当传感器检测到进入充电区域(可通过磁场强度或特定的赛道标识判断),单片机切断电机驱动,将全部接收能量导向超级电容组,并以恒定电流/恒压模式快速充电。
  2. 行驶状态:离开充电区后,系统切换至由超级电容供电。单片机需要实时监测电容电压,估算剩余能量。这里我们引入了动态速度规划:当能量充足时,车辆可以按较高速度行驶;当监测到电容电压下降到阈值以下时,则主动降低目标速度,以减少功耗,延长行驶距离,争取撑到下一个充电区。这个“量入为出”的策略,是完赛的关键。

2.2 感知系统:看清赛道,感知自身

车要跑,必须先“看见”赛道。我们采用了最主流且可靠的方案:摄像头+编码器+陀螺仪的多传感器融合。

2.2.1 摄像头图像采集与处理

我们使用了一款全局快门的数字摄像头(如MT9V034),通过DCMI接口与单片机直接连接。全局快门能有效避免高速运动时的拖影,这对高速智能车至关重要。

图像处理的第一步是二值化。我们在车头安装了补光灯,尽量使赛道背景(白色)和引导线(黑色)在灰度上产生巨大反差。二值化阈值可以通过现场自适应算法或固定阈值设定。为了应对光照变化,我们采用了动态阈值法:每次采集一幅图像后,计算其灰度直方图,根据波谷来确定阈值,效果比固定阈值更鲁棒。

二值化后,通过扫描线法提取赛道中线。算法从图像底部向上,每隔几行扫描一次,寻找黑白跳变点,计算中心位置。将这些中心点拟合成一条曲线,就得到了当前赛道的走向。这里的一个优化点是前瞻距离的控制:扫描的图像行越靠上(前瞻越远),转向就越平滑,预判性越好,但对弯道的适应性会变差;前瞻太近,则反应迟钝。我们通过大量测试,找到了一个适应大部分赛道的折中点,并在急弯处加入了动态调整前瞻的逻辑。

2.2.2 编码器与陀螺仪数据融合

摄像头提供了赛道信息,但车辆自身的状态同样重要。车轮上的光电编码器用于测量实际速度,实现速度闭环控制。而陀螺仪则用于测量车体的转向角速度(Z轴)。

这里有一个经典的融合场景:通过编码器积分可以得到位移,但存在累积误差;陀螺仪测量角速度瞬时准确,但积分求角度时会有零漂。我们的做法是,在短时间、高动态的转向控制中,优先信任陀螺仪的角速度数据,因为它响应快。而在计算较长距离的行驶轨迹时,则结合编码器的数据来修正陀螺仪的漂移。单片机通过SPI或I2C接口读取这些传感器数据,并进行滤波(如卡尔曼滤波或互补滤波),得到更可靠的车体姿态信息。

2.3 控制系统:大脑的决策与执行

主控单片机(我们选用的是ST公司的STM32F4系列)是系统的大脑。它负责调度所有任务:图像采集、传感器读取、控制算法解算、电机舵机控制、能量管理,以及最重要的——让这三个子系统协同工作

2.3.1 控制算法核心:PID与转向速度耦合

循迹控制的核心是方向控制速度控制

方向控制我们采用位置式PID控制器。输入量是摄像头计算出的赛道中线与图像中心线的偏差(Error),输出量是舵机的打角值。P(比例)项决定反应的强度,I(积分)项消除静态误差,D(微分)项抑制超调、提高稳定性。参数整定是个体力活也是技术活,我们的经验是:先在直道上调P,让车能快速回正但不振荡;再加D,抑制过弯时的抖动;最后在长直道或特定弯道微调I。特别注意:不同赛道路面摩擦系数不同,PID参数可能需要微调,我们准备了多组参数,通过拨码开关在赛前快速切换。

速度控制同样使用PID,但策略更复杂。我们实现了转向-速度耦合:当舵机打角较大时(意味着正在过弯),主动降低目标速度,以提高过弯稳定性;当车体姿态角速度(来自陀螺仪)过大时,也进行减速,防止侧滑。同时,如前所述,速度目标值还要受超级电容电压的约束,形成一套多层次的速度规划体系。

2.3.2 软件架构:基于实时操作系统的任务调度

为了保证图像处理(耗时)、控制计算(实时)、日志记录(调试)等任务互不干扰,我们引入了FreeRTOS实时操作系统。将系统划分为几个优先级不同的任务:

  • 高优先级任务:图像采集与处理、PID计算、电机舵机控制。
  • 中优先级任务:能量管理状态机、传感器数据融合滤波。
  • 低优先级任务:无线调试数据发送、状态指示灯刷新。

使用操作系统后,系统的实时性和可靠性大大提升,避免了因为一个耗时函数阻塞整个系统的情况。例如,图像处理可能需要十几毫秒,但这期间控制任务仍然能定时被唤醒执行,保证了控制的连续性。

3. 硬件选型、设计与焊接调试实录

理论设计得再完美,最终都要落到电路板和焊台上。硬件是这一切的基础,也是最容易出“玄学”问题的地方。

3.1 核心主控与最小系统

我们选择了STM32F407ZGT6作为主控芯片。选择理由:Cortex-M4内核带FPU,能高效处理图像运算;时钟频率高达168MHz,满足实时性要求;拥有丰富的DCMI、定时器、ADC、通信接口外设;社区资源丰富,遇到问题容易找到解决方案。

最小系统板需要稳定提供3.3V电源。我们使用了一颗AMS1117-3.3线性稳压芯片,其前端输入来自我们电源系统的干净5V。注意:AMS1117的输入输出端必须紧挨着芯片放置滤波电容,典型值是10μF的钽电容或电解电容并联一个0.1μF的陶瓷电容,这是保证单片机稳定运行、防止复位的基本操作。晶振电路(8MHz主晶振和32.768kHz RTC晶振)的走线要尽量短,背面铺地屏蔽,负载电容要按芯片手册和晶振规格精确匹配。

3.2 电机驱动与电源模块设计

电机驱动选用BTN7971半桥驱动芯片搭建全桥电路。这款芯片驱动能力强,内置保护和诊断功能。设计要点:

  1. 电源去耦:每个BTN7971的电源脚(VS)附近必须放置一个至少100μF的低ESR电解电容和一个0.1μF的陶瓷电容,以提供瞬间大电流并滤除高频噪声。
  2. 散热:BTN7971在驱动电机时发热严重,必须安装足够面积的散热片,并且PCB上芯片底部的散热焊盘要开窗,用大量过孔连接到背面的大面积铜皮上辅助散热。
  3. 逻辑电平隔离:单片机的3.3V PWM信号通过一个74HC244之类的缓冲器再驱动BTN7971的IN引脚,可以增强驱动能力,并起到一定的隔离作用,防止电机侧干扰窜入单片机。

无线充电接收端到后续电路的整流稳压板需要单独设计。整流二极管要选用快恢复二极管(如FR107),反向恢复时间短,效率高。Buck电路的电感选择是关键,需要根据输入输出电压、电流计算电感值,并选择饱和电流远大于工作电流的功率电感。一个血泪教训:我们最初为了省钱用了劣质电感,在满载时发生磁饱和,导致Buck电路崩溃,整个系统断电。更换为知名品牌的铁硅铝磁环电感后问题立刻解决。

3.3 PCB设计与焊接调试心得

我们使用Altium Designer进行四层板设计:顶层信号、内电层地、内电层电源、底层信号。

  • 电源树规划:从超级电容正极出发,主干道是“电容 -> 主Buck -> 12V区域”,再从12V分支到“电机驱动供电”、“5V LDO”、“舵机供电”等。每个分支节点都要有独立的滤波电容。
  • 地平面:保持地平面的完整至关重要。数字地、模拟地、电机驱动地、无线充电功率地,我们采用“单点共地”的方式,在总电容的负端一点连接,避免大电流噪声污染敏感的信号地。
  • 信号走线:摄像头的数据线、时钟线要等长、并行走线,包地处理,减少信号完整性问题和电磁干扰。编码器信号、陀螺仪SPI线等也要远离电机驱动等噪声源。

焊接时,先焊最小系统,用ST-Link连接,测试程序下载和基本GPIO控制是否正常。再逐步焊接电源、传感器、驱动模块。务必分模块调试:给电机驱动供电前,先不接电机,用示波器看PWM波形是否正确;接上电机后,在空载情况下测试正反转。摄像头模块单独上电,用单片机读取其ID寄存器,确认通信正常。

4. 软件算法实现与参数整定细节

软件是智能车的灵魂。所有的硬件都是为了执行那几行关键的代码。

4.1 图像处理算法的优化与提速

图像处理是最大的计算负担。在STM32上,我们需要用C语言写出高效的代码。

  1. 降采样与ROI:我们的摄像头是188*120分辨率,但并非所有区域都需要处理。我们只取图像下半部分(约80行)作为感兴趣区域(ROI),并每隔2行扫描一次,计算量减少一半以上。
  2. 二值化优化:避免使用浮点数运算。动态阈值计算时,将灰度累加和与像素总数做比较,用整数运算代替除法。二值化判断使用查表法,将灰度值直接映射为0或1,速度极快。
  3. 中线提取的鲁棒性处理:扫描时,如果某一行找不到有效的黑白跳变(可能是出界或遇到十字路口),则采用上一行的有效中线位置,或者根据趋势进行预测。对于十字路口,我们设计了特殊的识别逻辑:当连续多行扫描到的左右边线距离突然大幅增加时,判定为十字,此时保持直行或执行特定的路口策略。

4.2 控制算法的代码实现

我们以速度环PID为例,展示具体的代码实现和注意事项:

// 速度PID结构体 typedef struct { float Target; // 目标速度 float Current; // 当前速度 (来自编码器) float Err; // 本次误差 float Err_Last; // 上次误差 float Err_Sum; // 误差积分 float Kp, Ki, Kd; // PID参数 float Output; // 输出值 (PWM占空比) float OutputMax; // 输出限幅 } PID_TypeDef; // PID计算函数 float PID_Calc(PID_TypeDef *pid) { pid->Err = pid->Target - pid->Current; // 积分分离:误差太大时不积分,防止积分饱和 if (fabs(pid->Err) < 50.0f) { pid->Err_Sum += pid->Err; // 积分限幅 if (pid->Err_Sum > 200.0f) pid->Err_Sum = 200.0f; if (pid->Err_Sum < -200.0f) pid->Err_Sum = -200.0f; } else { pid->Err_Sum = 0; } // PID计算 pid->Output = pid->Kp * pid->Err + pid->Ki * pid->Err_Sum + pid->Kd * (pid->Err - pid->Err_Last); // 输出限幅 if (pid->Output > pid->OutputMax) pid->Output = pid->OutputMax; if (pid->Output < -pid->OutputMax) pid->Output = -pid->OutputMax; pid->Err_Last = pid->Err; return pid->Output; }

关键点

  • 定时中断:PID计算必须在一个固定的时间间隔内进行(例如1ms或5ms),我们使用定时器产生中断来调用PID_Calc函数,保证控制的周期性。
  • 积分抗饱和:上述代码中的“积分分离”和“积分限幅”是防止系统启动或目标突变时输出过冲的关键技巧。
  • 输出限幅:根据电机驱动和电源电压,合理设置输出的最大值。

4.3 参数整定:从理论到实践的漫长之路

PID参数整定没有银弹,只有不断的测试。我们的流程是:

  1. 速度环单独调:把车架起来,让轮子空转。先设Ki=0, Kd=0,逐渐增大Kp,直到电机对速度变化有明显响应且不剧烈振荡。然后加入一点Kd,观察对突加负载(用手轻轻捏住轮子)的抑制效果。最后加入很小的Ki,消除稳态误差。
  2. 方向环单独调:在直道上,用手推着车慢慢走,观察舵机对中线偏差的反应。同样先调Kp,让车能快速回正但不过冲。弯道性能主要靠Kd来改善,I项在循迹中一般给很小甚至为零,因为赛道始终在变化,没有绝对的“静态误差”需要消除。
  3. 联调与动态耦合:这是最耗时的。让车在赛道上低速跑起来,观察转向和速度的配合。根据现象调整:如果入弯时速度太快导致冲出去,就加大转向-速度耦合系数;如果出弯加速无力,就检查能量管理是否限制了输出。我们记录了大量的测试数据(通过无线串口发回电脑),用MATLAB分析速度、偏差、电容电压的曲线,从而科学地调整参数,而不是凭感觉。

5. 系统联调、故障排查与赛场应对策略

当所有模块单独工作都正常后,联调才是真正的挑战。各种意想不到的问题会接踵而至。

5.1 典型故障现象与排查思路

我们遇到并解决了一些典型问题,整理成下表:

故障现象可能原因排查步骤与解决方法
车模上电后单片机不启动,或反复复位1. 电源电压不稳或纹波过大
2. 复位电路问题
3. 晶振未起振
1. 用示波器测量单片机3.3V引脚,看电压是否稳定,有无毛刺。加强电源滤波。
2. 检查复位按键是否卡住,复位引脚上拉电阻和电容值是否正确。
3. 用示波器探头(X10档)测量晶振引脚,看是否有正弦波。检查负载电容是否匹配。
电机运行时,摄像头图像出现横条纹或抖动电机驱动的大电流变化引起电源噪声,通过共地干扰了摄像头供电或信号。1. 检查电机驱动电源与摄像头电源的隔离。确保地平面单点连接。
2. 在摄像头模块的电源入口处增加磁珠和多个不同容值的滤波电容(如10μF, 1μF, 0.1μF)。
3. 尝试将摄像头的数据线用屏蔽线包裹并接地。
无线充电时,单片机程序跑飞无线充电的强磁场引入了巨大的电磁干扰(EMI)。1.最有效的方法:将接收线圈、整流电路等强干扰部分用金属屏蔽罩(如铜箔)包裹并良好接地,隔绝磁场辐射。
2. 检查所有信号线,尽量使用双绞线或屏蔽线。
3. 在单片机的复位引脚、电源引脚对地增加TVS管,吸收瞬态高压脉冲。
车在特定弯道总是冲出赛道1. 图像处理在该弯道特征下提取中线错误。
2. PID参数不适应此弯道的曲率。
3. 机械结构不对称,左右转向特性不一致。
1. 通过无线将摄像头图像传回电脑,分析在出问题的弯道图像二值化效果是否良好。
2. 针对该类型弯道(如急弯、S弯),微调PID的D参数或采用多套参数切换策略。
3. 检查前轮前束、主销后倾角等机械参数,确保左右对称。调整舵机中位值。
超级电容充电速度慢,跑不远1. 无线接收线圈谐振频率偏移,传输效率低。
2. 整流二极管或MOSFET导通损耗大。
3. 充电控制逻辑有误,未最大化吸收功率。
1. 用电桥测量接收端LC回路的谐振频率,调整匹配电容。
2. 更换为更低导通压降的肖特基二极管或更低Rds(on)的MOSFET。
3. 优化充电算法,确保在充电区域车辆完全停止,且充电电路工作在最大功率点附近。

5.2 赛场上的最后调整与心态

比赛现场的环境与实验室天差地别:光线、赛道摩擦力、电磁环境都可能不同。

  • “一小时”快速适配:规则通常给一定时间适应场地。这一小时要高效利用:首先,测试无线充电区,用示波器看接收电压是否正常,调整车模停靠位置以对准线圈中心。其次,在赛道上慢速跑几圈,观察图像二值化效果,根据现场光照微调阈值或补光亮度。最后,试跑全速,感受弯道极限,微调速度耦合参数。
  • 冗余设计:我们的程序里设置了多组PID参数和赛道策略,通过拨码开关选择。现场如果发现某种弯道(如连续S弯)通过不畅,可以快速切换到备用的、更保守的参数组。
  • 日志与调试:一定要保留一个无线串口调试功能。在试跑时,将关键数据(速度、偏差、电容电压)发回电脑,可以快速定位问题是出在感知、控制还是能量上。
  • 心态稳定:比赛时紧张难免,但硬件问题在赛前应已充分暴露并解决。赛场上的问题大多是参数不适配。相信自己的车,按部就班地测试和调整。一次失败试跑的价值远高于十次空想。

从一块空白的PCB到一辆在赛道上自主驰骋的智能车,这个过程充满了挫折,也充满了突破后的喜悦。无线充电组的经历让我深刻体会到,工程实践就是一个将理论知识不断“打磨”、“适配”、“折衷”的过程。没有最好的方案,只有最合适的方案。最重要的不是用了多么高深的算法,而是整个系统能否稳定、可靠地工作,并且具备应对各种意外情况的能力。最后分享一个很小但很实用的技巧:在车模的关键接线点(如电机线、电池接口)上点一滴热熔胶,可以有效防止比赛过程中因振动导致的接头松动,这个简单操作帮我们避免了好几次潜在的“突然趴窝”风险。智能车的魅力,就在于它把所有学科的知识串联起来,逼着你去思考、去动手、去解决一个又一个真实世界的问题。这份技术报告,既是我们项目的总结,也希望能成为你开启自己智能车之旅的一块铺路石。

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

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

立即咨询