基于STM32的无线充电器DIY:从Qi协议到PCB设计的全流程解析

基于STM32的无线充电器DIY:从Qi协议到PCB设计的全流程解析 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进行双向通信协商电压和功率等级最后才进入稳定的全功率传输阶段。因此我们的系统框架必须包含以下几个核心部分主控与电源管理STM32作为大脑负责控制逻辑、通信解编码、状态管理。需要一个稳定的15V/2A左右的直流电源输入为后续功率级供电。全桥逆变与驱动将直流电逆变为高频交流电的关键。我们采用由4个N-MOS管组成的H桥由STM32的定时器产生带死区的PWM信号经过专用的栅极驱动芯片如IR2104来高效、安全地驱动MOS管。LC谐振与发射线圈全桥输出的方波经过由谐振电容和发射线圈组成的LC串联谐振网络滤除谐波形成近似正弦波的高频电流从而在线圈周围产生强交变磁场。线圈的品质因数Q值和与接收线圈的对准直接影响传输效率。信号解调与通信接收器发送的控制数据是通过改变其负载从而引起发射线圈电流/电压的微小变化ASK调制来实现的。我们需要通过电流采样电路和运放电路将这个微弱的模拟变化提取出来并送入STM32的ADC或比较器进行数字解调。异物检测与保护这是Qi标准强制要求的安全功能。通过持续监测输入功率和传输功率计算损耗。当检测到异常损耗可能由金属异物引起时必须立即停止充电。我们采用计算“输入电压×输入电流”与“接收端报告的输出电压×输出电流”差值的方法来实现。人机交互与显示通过一个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就是一个经典选择Vds60V Id13A 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计算所需的总谐振电容值。例如若f140kHz L20μH则 C 1 / ((2πf)² * L) ≈ 64.7nF。我们会使用多个NPO/COG材质的贴片电容并联来实现这种电容温度稳定性好高频特性佳。布局与布线要点 功率回路从输入电容→MOS管→线圈→地的路径要尽可能短而粗以减小寄生电感和电阻这是降低开关噪声和损耗的关键。输入电源端必须并联一个大容值的电解电容如470uF/25V和多个小容值的高频陶瓷电容如100nF 10nF分别负责储能和滤除不同频段的噪声。3.2 通信解调电路如何“听”到接收器的声音接收器通过负载调制“说话”发射器需要通过解调电路“倾听”。我们采用电流采样方案因其抗干扰能力相对较强。电流采样在H桥的下管源极或输入电源地路径串联一个毫欧级的小阻值采样电阻如0.1Ω/1W。当接收器进行负载调制时发射线圈的电流幅度会随之微小变化这个变化体现在采样电阻两端的电压上。信号放大与滤波采样到的电压信号非常微弱毫伏级且混杂着高频开关噪声。我们需要一个运放电路来处理差分放大使用仪表放大器或由普通运放构成的差分放大电路提取采样电阻两端的压差并放大一定倍数如100倍。带通滤波调制信号的频率在2kHz左右。我们需要设计一个中心频率约2kHz的带通有源滤波器滤除127kHz的载波及其谐波以及低频噪声得到干净的控制信号。比较整形将滤波后的模拟信号通过一个电压比较器如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中用代码严谨地实现它。主要状态包括Ping检测状态以极低占空比的脉冲驱动线圈并监测解调电路是否有响应。若无响应则循环于此状态若检测到数字脉冲接收器发出的信号强度包则进入“识别与配置”状态。识别与配置状态与接收器进行通信接收其发送的“标识数据包”和“配置数据包”从中解析出接收器支持的功率等级、最大功率需求等信息。功率传输状态这是正常充电阶段。根据接收器周期性发送的“控制误差包”包含期望的功率水平调整PWM的占空比或工作频率移相调功以控制输出功率。同时持续进行异物检测。重新协商状态如果接收器需求变化如手机电量快充满时需求功率降低会进入此状态重新协商。结束状态充电完成或被异物检测、错误触发则关闭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是整个项目从原理到实物的关键一跃布局布线直接决定成败。明确分区将板子严格划分为功率区域全桥、驱动、线圈接口、输入滤波电容和信号区域STM32、解调运放、ADC采样、晶振。两个区域之间最好用“壕沟”无铜区域隔离。功率路径最短最粗连接输入电容、MOS管、线圈端子的走线必须使用尽可能宽的线宽如40mil以上且避免锐角。这些路径承载着安培级的高频开关电流。单点接地与星型接地这是控制噪声的重中之重。为功率地和信号地设置不同的接地铜皮但它们在输入滤波电容的接地端单点连接。所有芯片的接地引脚应通过短而粗的走线连接到各自的接地铜皮。解调电路的敏感走线连接电流采样电阻到运放的走线应视为差分对尽量等长、平行、短捷并用地线包围进行屏蔽远离功率走线和线圈。去耦电容就近放置每个芯片的电源引脚附近都必须放置一个100nF的陶瓷去耦电容且电容的接地端到芯片地引脚的路径要极短。5.2 焊接与组装注意事项元件顺序先焊接高度最低的器件如电阻、电容、芯片座再焊接较高的器件如电解电容、接线端子。STM32建议使用芯片座便于更换。MOS管与驱动芯片焊接时注意静电防护。确保MOS管的引脚特别是栅极没有连锡。焊接后用万用表二极管档检查每个MOS管的体二极管是否正常防止焊接短路。线圈连接发射线圈通常用导线引出。焊接在线圈接口端子时要确保焊点饱满牢固因为这里会有高频大电流通过。5.3 上电调试与问题排查调试务必遵循“循序渐进分级上电”的原则。第一阶段最小系统与电源先不焊接功率MOS管和驱动芯片。只给STM32和信号部分供电可通过调试器或外部3.3V。检查STM32能否正常启动程序能否下载OLED屏幕是否点亮串口是否有打印信息。第二阶段驱动与PWM测试焊接上栅极驱动芯片IR2104和MOS管但暂时不连接发射线圈。上电用示波器测量各MOS管的栅极驱动波形。确保上下管互补且有正确的死区时间通常几百纳秒。如果波形不对检查STM32定时器配置和驱动芯片的接线。第三阶段空载谐振测试接上发射线圈和谐振电容。在输入电源串联一个1A左右的自恢复保险丝或电流表以防谐振异常导致大电流。上电让系统进入Ping状态。用示波器测量线圈两端的电压波形应为幅值较高、频率正确的正弦波由于空载Q值高电压可能达到上百伏注意安全。此时输入电流应非常小几十毫安。第四阶段通信与带载测试放置一个标准的Qi接收器如手机或测试模组在线圈上。观察状态机是否从Ping进入识别、配置最后进入功率传输。通过串口观察数据包交互。用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协议状态机是核心。务必善用示波器和串口调试工具它们是你洞察系统内部运行的眼睛。当你第一次看到自己制作的板子成功点亮手机屏幕上的充电标志时那种成就感远超购买任何一个成品。这个项目所涉及的电源、模拟信号、数字通信和嵌入式控制知识会让你对“无线充电”这四个字有完全不一样的理解。