基于STM32的无线充电器DIY:从Qi协议到PCB设计的全流程解析
2026/7/29 3:13:10 网站建设 项目流程

1. 项目概述:从零打造一个“无线”的桌面

几年前,当我第一次把手机放在一个圆盘上,屏幕亮起“正在无线充电”的提示时,那种摆脱线缆束缚的便利感让我印象深刻。但市面上的成品无线充电器,要么设计千篇一律,要么价格不菲,功能也相对固定。作为一名嵌入式开发者,我萌生了一个想法:能不能自己动手,基于手头最熟悉的STM32微控制器,从头设计并制作一个完全可控、可定制、甚至能显示充电状态的无线充电器?这不仅仅是为了给手机充电,更是一个深入理解无线能量传输原理、掌握电磁兼容设计、并实践嵌入式系统软硬件协同开发的绝佳项目。

这个项目适合所有对嵌入式开发、电力电子和无线传输技术感兴趣的爱好者、学生或工程师。无论你是想为你的桌面增添一个独一无二的酷炫装备,还是希望深入理解Qi标准背后的奥秘,亦或是学习如何用MCU精准控制功率转换,这个基于STM32的无线充电器设计都能带你走完从理论到实物的完整闭环。最终,你将得到一个不仅能为符合Qi标准的设备(如大多数智能手机、TWS耳机充电盒)充电,还能通过OLED屏幕实时显示电压、电流、功率和充电状态的智能充电座。接下来,我将拆解整个设计过程,分享从方案选型、电路设计、PCB绘制到代码编写的全流程细节与踩坑经验。

2. 整体设计方案与核心思路拆解

2.1 技术路线选择:为什么是STM32 + 分立元件方案?

市面上常见的无线充电芯片方案大致分为两类:高度集成的专用IC和基于通用MCU的分立驱动方案。专用IC如Ti、IDT的方案,集成度高,开发简单,但“黑盒”程度也高,不利于学习原理和深度定制。而我们选择基于STM32(如STM32F103C8T6这类性价比极高的型号)配合MOS管、运放等分立元件搭建全桥逆变和信号解调电路,核心目的就是为了“透明化”和“可编程化”。

这个选择背后有几个关键考量:第一,学习价值最大化。通过分立元件搭建,你能清晰地看到15V直流如何被全桥电路转换成上百kHz的交流方波,又如何通过LC谐振在发射线圈中产生交变磁场。第二,控制权完全在手。充电功率、频率、异物检测(FOD)阈值、通信协议解析全部由STM32的代码控制,你可以轻松实现自定义的充电策略,比如为不同设备设置不同的最大功率,或者添加温度监控进行动态功率调整。第三,成本与灵活性。STM32和通用元件的成本通常低于专用芯片,且硬件设计一旦完成,功能升级完全通过软件实现,无需改动PCB。

2.2 系统框架与Qi标准浅析

我们的设计必须遵循WPC(无线充电联盟)的Qi标准,这是目前消费电子领域绝对的主流标准。Qi标准的基础是电磁感应,核心流程可以概括为:数字通信 → 功率传输。发射器(TX)需要先通过间歇性的“ping”信号检测接收器(RX)的存在,然后双方通过线圈上载波的幅度调制(ASK)进行双向通信,协商电压和功率等级,最后才进入稳定的全功率传输阶段。

因此,我们的系统框架必须包含以下几个核心部分:

  1. 主控与电源管理:STM32作为大脑,负责控制逻辑、通信解编码、状态管理。需要一个稳定的15V/2A左右的直流电源输入,为后续功率级供电。
  2. 全桥逆变与驱动:将直流电逆变为高频交流电的关键。我们采用由4个N-MOS管组成的H桥,由STM32的定时器产生带死区的PWM信号,经过专用的栅极驱动芯片(如IR2104)来高效、安全地驱动MOS管。
  3. LC谐振与发射线圈:全桥输出的方波经过由谐振电容和发射线圈组成的LC串联谐振网络,滤除谐波,形成近似正弦波的高频电流,从而在线圈周围产生强交变磁场。线圈的品质因数(Q值)和与接收线圈的对准直接影响传输效率。
  4. 信号解调与通信:接收器发送的控制数据是通过改变其负载,从而引起发射线圈电流/电压的微小变化(ASK调制)来实现的。我们需要通过电流采样电路和运放电路,将这个微弱的模拟变化提取出来,并送入STM32的ADC或比较器进行数字解调。
  5. 异物检测与保护:这是Qi标准强制要求的安全功能。通过持续监测输入功率和传输功率,计算损耗。当检测到异常损耗(可能由金属异物引起)时,必须立即停止充电。我们采用计算“输入电压×输入电流”与“接收端报告的输出电压×输出电流”差值的方法来实现。
  6. 人机交互与显示:通过一个I2C接口的OLED屏幕,实时显示充电状态、输出电压/电流、功率、效率以及可能的错误信息,让整个充电过程可视化。

注意:Qi标准是一个不断演进的协议。我们的设计主要针对基础的Qi v1.2.x 5W BPP(基础功率配置文件)协议。对于更高功率的EPP(扩展功率配置文件)或支持快充的协议,需要在通信协议解析和功率电路上做更多工作。

3. 核心硬件电路设计与选型要点

3.1 功率级设计:全桥逆变与LC谐振

这是整个系统的能量转换核心,设计不当会导致效率低下、MOS管发热甚至炸管。

MOS管与驱动选型

  • MOS管(Q1-Q4):必须选择开关速度快、导通电阻(Rds(on))小、栅极电荷(Qg)小的N沟道MOS管。例如,IRF7416就是一个经典选择,Vds=60V, Id=13A, Rds(on)约10mΩ。开关速度直接影响高频下的开关损耗。
  • 栅极驱动芯片:绝不建议直接用STM32的GPIO驱动MOS管栅极。我们选用半桥驱动芯片IR2104,它内置自举电路,能轻松为高端MOS管的栅极提供高于电源的电压,确保其完全导通。每个IR2104驱动一个半桥(两个MOS管),因此需要两片。驱动电阻(Rg)通常选择10Ω左右,用于抑制栅极振铃。

LC谐振参数计算: Qi标准的工作频率在110kHz到205kHz之间,常用在127kHz或140kHz左右。谐振频率公式为 f = 1 / (2π√(LC))。

  • 发射线圈(L):通常选用标准的Qi发射线圈,电感量在20μH左右。购买时需注意其Q值和尺寸。
  • 谐振电容(C):根据选定的工作频率f和线圈电感L,计算所需的总谐振电容值。例如,若f=140kHz, L=20μH,则 C = 1 / ((2πf)² * L) ≈ 64.7nF。我们会使用多个NPO/COG材质的贴片电容并联来实现,这种电容温度稳定性好,高频特性佳。

布局与布线要点: 功率回路(从输入电容→MOS管→线圈→地)的路径要尽可能短而粗,以减小寄生电感和电阻,这是降低开关噪声和损耗的关键。输入电源端必须并联一个大容值的电解电容(如470uF/25V)和多个小容值的高频陶瓷电容(如100nF, 10nF),分别负责储能和滤除不同频段的噪声。

3.2 通信解调电路:如何“听”到接收器的声音

接收器通过负载调制“说话”,发射器需要通过解调电路“倾听”。我们采用电流采样方案,因其抗干扰能力相对较强。

电流采样:在H桥的下管源极(或输入电源地路径)串联一个毫欧级的小阻值采样电阻(如0.1Ω/1W)。当接收器进行负载调制时,发射线圈的电流幅度会随之微小变化,这个变化体现在采样电阻两端的电压上。

信号放大与滤波:采样到的电压信号非常微弱(毫伏级),且混杂着高频开关噪声。我们需要一个运放电路来处理:

  1. 差分放大:使用仪表放大器或由普通运放构成的差分放大电路,提取采样电阻两端的压差,并放大一定倍数(如100倍)。
  2. 带通滤波:调制信号的频率在2kHz左右。我们需要设计一个中心频率约2kHz的带通有源滤波器,滤除127kHz的载波及其谐波,以及低频噪声,得到干净的控制信号。
  3. 比较整形:将滤波后的模拟信号通过一个电压比较器(如LM393),与一个可调的参考电压比较,转换成STM32可以读取的数字信号(GPIO中断或定时器输入捕获)。

实操心得:解调电路是调试中最棘手的部分之一。建议先在仿真软件(如LTspice)中搭建模型进行仿真,确定放大倍数和滤波器参数。实际调试时,可以用示波器同时观察采样点、滤波后和比较器输出的波形,逐步调整运放增益和滤波器参数,直到看到清晰的方法调制信号。参考电压的设定也需要耐心调整,以适应不同的工作点。

3.3 异物检测与电流电压采样

输入侧采样:用于计算输入功率和进行异物检测。

  • 电压采样:通过电阻分压网络将15V输入电压分压到STM32 ADC的量程范围内(如3.3V)。
  • 电流采样:可以在输入总线上串联一个分流器(Shunt Resistor),同样通过运放放大后送ADC。更集成化的方案是使用电流采样芯片(如INA180),它集成增益放大,设计更简便。

计算逻辑:STM32周期性地(如每秒10次)通过ADC读取输入电压Vin和输入电流Iin,计算出输入功率Pin。同时,从接收器通过通信包中获取其输出的电压Vout和电流Iout(这是Qi通信数据包的一部分),计算出接收功率Pout。传输效率 η = Pout / Pin。当Pin远大于Pout(即效率异常低),或Pin本身发生剧烈异常波动时,程序应判断可能存在金属异物,立即关闭PWM输出,进入故障状态。

STM32 ADC配置要点:为了提高采样同步性,建议使用STM32的定时器触发ADC的双通道扫描采样模式,确保电压和电流值是同一时刻采集的。同时,软件上需要做简单的滑动平均滤波,以消除噪声。

4. 嵌入式软件设计与实现流程

4.1 开发环境与工程架构

我选用STM32CubeIDE作为开发环境,它集成了STM32CubeMX图形化配置工具和基于Eclipse的IDE,非常适合快速初始化外设。工程采用HAL库,便于移植和理解。

软件架构分为以下几个层次:

  • 硬件抽象层:由CubeMX生成的外设初始化代码(PWM定时器、ADC、I2C、UART等)。
  • 驱动程序层:自己编写的OLED屏幕驱动、解调信号读取、按键扫描等模块化代码。
  • Qi协议栈层:这是核心,实现Qi标准定义的状态机、数据包编解码、通信时序控制。
  • 应用层:主循环调度、功率控制逻辑、异物检测计算、状态显示更新。

4.2 Qi协议状态机实现

Qi协议本质上是一个由发射器主导的状态机。我们需要在STM32中用代码严谨地实现它。主要状态包括:

  1. Ping(检测)状态:以极低占空比的脉冲驱动线圈,并监测解调电路是否有响应。若无响应,则循环于此状态;若检测到数字脉冲(接收器发出的信号强度包),则进入“识别与配置”状态。
  2. 识别与配置状态:与接收器进行通信,接收其发送的“标识数据包”和“配置数据包”,从中解析出接收器支持的功率等级、最大功率需求等信息。
  3. 功率传输状态:这是正常充电阶段。根据接收器周期性发送的“控制误差包”(包含期望的功率水平),调整PWM的占空比或工作频率(移相调功),以控制输出功率。同时,持续进行异物检测。
  4. 重新协商状态:如果接收器需求变化(如手机电量快充满时需求功率降低),会进入此状态重新协商。
  5. 结束状态:充电完成或被异物检测、错误触发,则关闭PWM,回到Ping状态。

数据包解包与封包:Qi的数据包采用曼彻斯特编码。我们需要用STM32的定时器输入捕获功能来精确测量解调后数字信号的脉冲宽度,从而解码出曼彻斯特码流,再根据协议格式解析出数据位。发送时,则需要通过控制全桥的开关模式来生成对应的ASK调制波形。

4.3 功率控制策略:PWM与移相调功

在功率传输状态,我们需要根据接收器的请求来调整传输功率。有两种主要方式:

  • PWM占空比调节:固定工作频率(如140kHz),调节全桥PWM的占空比。占空比越大,施加在线圈上的电压有效值越高,传输功率越大。这种方法简单,但轻载时可能导致波形畸变。
  • 移相调功:保持上下桥臂的PWM占空比均为50%,但调节左半桥和右半桥驱动信号之间的相位差。相位差为0度时,全桥输出最大电压;相位差为180度时,输出电压为零。这种方式在宽范围功率调节时,能保持更好的波形和效率。

我们可以在STM32的高级定时器(如TIM1)中,轻松配置互补输出带死区的PWM,并通过修改通道间的延迟来实现移相控制。

4.4 人机交互与调试接口

OLED显示:使用SSD1306驱动的0.96寸OLED屏,通过I2C连接。显示内容可以包括:当前状态(Ping/充电/错误)、输入电压/电流、接收端报告电压/电流、实时功率、估算效率、充电时长等。刷新率设为1-2Hz即可。

串口调试:预留一个USART接口连接USB转TTL模块,在调试阶段至关重要。可以实时打印状态机切换、接收到的数据包内容、计算出的功率和效率值、错误代码等,极大提升调试效率。

按键:设计一个多功能按键,用于切换显示页面、清除错误状态或手动启动/停止充电。

5. PCB设计、组装与调试实录

5.1 PCB布局布线核心准则

画PCB是整个项目从原理到实物的关键一跃,布局布线直接决定成败。

  1. 明确分区:将板子严格划分为功率区域(全桥、驱动、线圈接口、输入滤波电容)和信号区域(STM32、解调运放、ADC采样、晶振)。两个区域之间最好用“壕沟”(无铜区域)隔离。
  2. 功率路径最短最粗:连接输入电容、MOS管、线圈端子的走线,必须使用尽可能宽的线宽(如40mil以上),且避免锐角。这些路径承载着安培级的高频开关电流。
  3. 单点接地与星型接地:这是控制噪声的重中之重。为功率地和信号地设置不同的接地铜皮,但它们在输入滤波电容的接地端单点连接。所有芯片的接地引脚应通过短而粗的走线连接到各自的接地铜皮。
  4. 解调电路的敏感走线:连接电流采样电阻到运放的走线,应视为差分对,尽量等长、平行、短捷,并用地线包围进行屏蔽,远离功率走线和线圈。
  5. 去耦电容就近放置:每个芯片的电源引脚附近,都必须放置一个100nF的陶瓷去耦电容,且电容的接地端到芯片地引脚的路径要极短。

5.2 焊接与组装注意事项

  • 元件顺序:先焊接高度最低的器件,如电阻、电容、芯片座,再焊接较高的器件,如电解电容、接线端子。STM32建议使用芯片座,便于更换。
  • MOS管与驱动芯片:焊接时注意静电防护。确保MOS管的引脚(特别是栅极)没有连锡。焊接后,用万用表二极管档检查每个MOS管的体二极管是否正常,防止焊接短路。
  • 线圈连接:发射线圈通常用导线引出。焊接在线圈接口端子时,要确保焊点饱满牢固,因为这里会有高频大电流通过。

5.3 上电调试与问题排查

调试务必遵循“循序渐进,分级上电”的原则。

第一阶段:最小系统与电源

  1. 先不焊接功率MOS管和驱动芯片。
  2. 只给STM32和信号部分供电(可通过调试器或外部3.3V)。检查STM32能否正常启动,程序能否下载,OLED屏幕是否点亮,串口是否有打印信息。

第二阶段:驱动与PWM测试

  1. 焊接上栅极驱动芯片IR2104和MOS管,但暂时不连接发射线圈
  2. 上电,用示波器测量各MOS管的栅极驱动波形。确保上下管互补,且有正确的死区时间(通常几百纳秒)。如果波形不对,检查STM32定时器配置和驱动芯片的接线。

第三阶段:空载谐振测试

  1. 接上发射线圈和谐振电容。
  2. 输入电源串联一个1A左右的自恢复保险丝或电流表,以防谐振异常导致大电流。
  3. 上电,让系统进入Ping状态。用示波器测量线圈两端的电压波形,应为幅值较高、频率正确的正弦波(由于空载Q值高,电压可能达到上百伏,注意安全!)。此时输入电流应非常小(几十毫安)。

第四阶段:通信与带载测试

  1. 放置一个标准的Qi接收器(如手机或测试模组)在线圈上。
  2. 观察状态机是否从Ping进入识别、配置,最后进入功率传输。通过串口观察数据包交互。
  3. 用USB功率计串联在输入电源前,同时用接收器测试仪或手机APP查看接收端功率,验证充电是否正常,并计算效率。

6. 常见问题、故障现象与排查技巧

在多次制作和调试中,我遇到了各种各样的问题,以下是典型问题的排查清单:

故障现象可能原因排查步骤与解决方法
上电后无任何反应,STM32不启动1. 电源接反或电压不对。
2. 晶振未起振。
3. BOOT引脚配置错误。
1. 检查电源电压,确认3.3V LDO输出正常。
2. 用示波器测晶振引脚(注意探头电容影响),检查负载电容是否匹配。
3. 检查BOOT0/1引脚是否按要求接地或接高。
PWM无输出或波形异常1. 定时器时钟未使能或配置错误。
2. GPIO模式未配置为复用推挽输出。
3. 高级定时器的主输出未使能。
1. 在CubeMX中复查定时器时钟源和分频设置。
2. 检查GPIO初始化代码。
3. 对于TIM1/TIM8,检查BDTR寄存器中的MOE位是否使能。
驱动芯片发热严重或MOS管发热1. 死区时间不足,导致上下管直通。
2. 栅极驱动电阻太小,开关速度过快导致振铃和EMI;或太大,导致开关损耗增加。
3. 散热不足。
1. 用示波器双通道测量上下管栅极信号,确保有清晰的无重叠死区。
2. 适当调整栅极电阻(10-22Ω范围尝试),观察波形和温升变化。
3. 为MOS管添加小型散热片。
系统可以Ping到接收器,但无法进入功率传输1. 解调电路故障,发射器无法正确解码接收器的数据包。
2. 协议栈代码有bug,状态机卡住。
3. 异物检测误触发。
1. 用示波器从采样点开始,逐级检查解调电路各点波形,重点看比较器输出的数字信号是否规整。
2. 通过串口打印状态机变量和数据包原始数据,分析卡在哪一步。
3. 检查ADC采样和异物检测计算代码,暂时调高异物检测阈值进行测试。
充电效率极低(<50%)1. 线圈未对准或距离过远。
2. LC谐振频率偏离工作频率太远。
3. 功率回路寄生参数过大。
4. MOS管导通损耗或开关损耗大。
1. 确保发射与接收线圈中心对准,间距在5mm以内。
2. 用示波器和电流探头观察线圈电流波形,调整谐振电容值,使电流正弦波最光滑、幅值最大。
3. 检查功率走线是否足够短粗,输入电容是否靠近MOS管。
4. 测量MOS管温升,考虑更换更低Rds(on)的型号。
工作时干扰屏幕或MCU复位1. 地线设计混乱,开关噪声串入信号地。
2. 电源去耦不足。
3. 空间辐射干扰。
1. 复查PCB,确保严格的单点接地和分区。
2. 在关键芯片电源引脚额外并联一个10uF钽电容。
3. 尝试为STM32和OLED屏幕的电源线加装磁珠。

最后的几点心得:这个项目成功的关键在于耐心和细致的调试。硬件上,一块布局合理的PCB是基础;软件上,一个逻辑清晰的Qi协议状态机是核心。务必善用示波器和串口调试工具,它们是你洞察系统内部运行的眼睛。当你第一次看到自己制作的板子成功点亮手机屏幕上的充电标志时,那种成就感远超购买任何一个成品。这个项目所涉及的电源、模拟信号、数字通信和嵌入式控制知识,会让你对“无线充电”这四个字有完全不一样的理解。

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

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

立即咨询