资讯详情

无线充电Qi协议5阶段与ASK电压调节工程拆解

📅 2026/10/15 22:56:54 | 华诺云谱 👁 阅读
无线充电Qi协议5阶段与ASK电压调节工程拆解
简介这份PDF资料面向无线充电方向的硬件工程师、嵌入式开发者及电子类专业学生系统讲解基于Qi协议的无线充电系统原理并以Richtek RT1650无线电源接收器为例展开分析帮助读者理解从电磁感应传能到通信协议落地的完整链路。资源为单个PDF文件压缩包约1.9MB内容涵盖无线电源传输的优点与原理、Qi标准体系、协议建立通信的探测、身份验证、配置、同步与功率传输五个阶段以及ASK幅度键控调制、接收端电压动态调节、异物检测FOD等关键机制。文中还以Nokia DT601发射器与RT1650评估板组成的实际系统为例梳理待机、启动、ASK通信与电压调节等环节并附有用户可用的固件设定说明。目前已有1950人学习适合作为无线充电入门与方案选型的参考材料。1. 无线充电系统原理从Qi协议5阶段到ASK电压动态调节的工程拆解很多人第一次拆无线充电板都会盯着那个硬币大小的线圈发愣——就这俩铜圈凭什么能把5W、10W甚至15W的功率隔空送过去更让人费解的是手机放上去之后充电板怎么知道该给多少电压怎么知道手机什么时候充满了这背后其实是一套完整的通信协议在跑而Qi协议就是目前最主流的那个。它把整个充电过程拆成了5个阶段每个阶段都有明确的信号交互和状态判断。而ASK幅移键控就是这套通信的物理层手段——接收端通过改变负载来调制线圈上的电压幅度发送端解调出这些幅度变化就得到了手机发来的控制指令。RT1650这类接收端芯片核心工作就是完成ASK解调和电压动态调节。这篇文章不讲虚的直接把这5个阶段拆开把ASK调制解调的参数和坑讲清楚让想自己搭一套无线充电验证平台的工程师能照着跑起来。2. Qi协议5阶段的状态机与ASK通信链路2.1 五个阶段到底在干什么Qi协议把一次完整的充电会话拆成Selection、Ping、Identification Configuration、Power Transfer、Charging Complete这5个阶段。Selection阶段是发射端在探测有没有物体放上来——它会在线圈上周期性发一个短脉冲检测谐振点的变化。如果放上去的是金属异物谐振频率会偏移发射端就判断为异物不进入下一步。Ping阶段是发射端发一个数字ping信号接收端如果活着会回一个信号强度包。这个包很关键它告诉发射端“我在这里我需要多少初始功率”。Identification Configuration阶段是双方交换能力信息——接收端告诉发射端自己支持什么协议版本、最大需要多少功率发射端告诉接收端自己能提供多少功率。Power Transfer阶段就是真正的功率传输了接收端通过ASK持续发送控制误差包告诉发射端“电压高了”“电压低了”“保持”。Charging Complete阶段是接收端发一个结束包发射端停止功率输出。这5个阶段不是随便分的每个阶段都有超时机制。比如Ping阶段如果发射端发了ping但没收到回应它会等一段时间然后回到Selection。Identification阶段如果双方能力不匹配比如接收端要15W但发射端只能给5W协议允许发射端拒绝或者降级到5W继续。这些超时和降级逻辑在RT1650这类芯片的固件里都有实现调试的时候如果发现充电断断续续大概率是某个阶段的超时参数没配对。2.2 ASK调制在接收端是怎么实现的ASK在无线充电里的实现方式有点特殊——它不是直接调制一个载波而是通过改变接收端的负载来影响发射端线圈上的电压幅度。具体来说接收端在通信的时候会并联一个调制电容或者调制电阻通过MOS管切换这个负载的通断。负载变了反射到发射端的阻抗就变了发射端线圈上的电压幅度就会跟着变。发射端检测这个幅度变化解调出0和1。通信速率方面Qi协议规定ASK的调制频率是2kHz也就是每个bit的周期是500微秒。这个速率不高但足够传控制指令了。调制深度一般要求在0.5%到5%之间——太浅了解调不出来太深了会影响功率传输效率。实际调试的时候调制深度和通信可靠性是一对矛盾深度大了通信稳但功率损耗大深度小了效率高但误码率上去了。我一般会先把调制深度设在2%左右然后根据误码率测试结果微调。接收端这边RT1650内部有一个ASK解调电路它会把线圈上的电压包络检波出来然后跟一个参考电平比较还原出数字信号。这个参考电平的设定很关键——如果发射端和接收端的线圈耦合系数变了比如手机壳厚度不同包络的直流分量会变参考电平如果不跟着自适应解调就会出错。RT1650的做法是先用一个DAC产生参考电平然后在Ping阶段做一次校准把参考电平设在包络峰峰值的中间。2.3 电压动态调节的闭环逻辑电压动态调节是Power Transfer阶段的核心任务。接收端要输出一个稳定的5V或者9V或者更高的电压给负载比如手机电池充电管理芯片但线圈耦合系数会变、负载电流会变、发射端的输入电压也会变。这些扰动都会导致接收端整流后的电压波动。接收端的做法是采样整流后的电压跟目标电压比较得到误差然后把误差编码成控制误差包通过ASK发给发射端。发射端收到这个包调整自己的发射功率——通常是调发射端的输入电压或者调逆变器的占空比。这个闭环的控制周期是多少Qi协议没有硬性规定但一般建议在1ms到10ms之间。周期太短了ASK通信带宽不够包发不出去周期太长了负载突变的时候电压会掉太多。RT1650的默认控制周期是4ms这个值在大多数场景下够用。如果负载是电机或者扬声器这种动态负载可能需要把周期缩到2ms但这时候要检查ASK的误码率有没有恶化。控制误差包的编码方式也有讲究。Qi协议定义了两种一种是控制误差值范围是-128到127负值表示“电压高了降功率”正值表示“电压低了升功率”另一种是接收功率包告诉发射端当前接收端实际收到了多少功率。发射端用这两个信息做前馈和反馈的混合控制。实际调试的时候如果发现电压振荡一般是控制误差的增益设太大了把比例系数降一半通常能解决。3. 用RT1650搭一套最小验证平台3.1 硬件选型与线圈匹配RT1650是一颗Qi接收端芯片支持5W到15W的输出。搭最小验证平台需要这些东西一个发射端板子可以用现成的Qi发射模组但要注意它的通信解调能力要支持ASK、一个RT1650的评估板、一对匹配的线圈、一个电子负载、一个示波器。线圈的选型很关键——发射端和接收端的线圈电感量要匹配一般发射端是6.3微亨接收端是10微亨左右。如果电感量差太多谐振频率对不上效率会很低甚至通信失败。线圈的耦合系数在0.3到0.6之间比较合适。耦合系数太低接收端感应到的电压不够RT1650可能启动不了耦合系数太高调制深度会变得很大通信反而容易出错。实际测试的时候我会先用LCR表量一下两个线圈的电感量和品质因数然后用一个简单的谐振电路测一下耦合系数。如果耦合系数不在范围内调整线圈的距离或者加一个磁屏蔽片。3.2 固件配置与寄存器设置RT1650的固件配置主要通过I2C接口写寄存器。下面这段代码是初始化RT1650的基本流程包括设置目标电压、控制周期、ASK调制深度。// RT1650 初始化配置示例 // 假设 I2C 地址为 0x3C寄存器地址为 8 位 #define RT1650_ADDR 0x3C // 寄存器定义根据实际数据手册调整 #define REG_VOUT_TARGET 0x10 // 目标输出电压单位 mV #define REG_CTRL_PERIOD 0x11 // 控制周期单位 us #define REG_ASK_DEPTH 0x12 // ASK 调制深度单位 0.1% #define REG_CTRL_GAIN 0x13 // 控制误差增益 #define REG_REF_DAC 0x14 // ASK 解调参考电平 void rt1650_init(void) { // 设置目标输出电压为 5000mV i2c_write(RT1650_ADDR, REG_VOUT_TARGET, 5000); // 设置控制周期为 4000us i2c_write(RT1650_ADDR, REG_CTRL_PERIOD, 4000); // 设置 ASK 调制深度为 2.0%寄存器值 20 i2c_write(RT1650_ADDR, REG_ASK_DEPTH, 20); // 设置控制误差增益为 1默认值先不调 i2c_write(RT1650_ADDR, REG_CTRL_GAIN, 1); // 参考电平先设为中间值Ping 阶段会自动校准 i2c_write(RT1650_ADDR, REG_REF_DAC, 128); }这段代码的逻辑很直接先把目标电压设成5V然后把控制周期设成4ms调制深度设成2%。参考电平先给一个中间值等Ping阶段芯片自己校准。这里要注意REG_VOUT_TARGET的单位是mV写5000就是5V别写成5。REG_ASK_DEPTH的单位是0.1%写20就是2.0%。如果写200那就是20%调制深度太大了功率传输效率会掉得很厉害。3.3 用示波器抓ASK波形和电压调节过程硬件和固件都配好之后下一步是抓波形验证。把示波器的探头接到发射端线圈的两端触发方式设成边沿触发触发电平设在包络的中间。然后给接收端加一个负载比如100欧姆的电阻。这时候应该能看到发射端线圈上的电压包络在周期性变化——这就是ASK调制。抓到的波形要检查几个东西第一调制深度是不是在2%左右。如果深度明显偏大或者偏小回去调REG_ASK_DEPTH。第二控制误差包的周期是不是4ms。如果周期不对检查REG_CTRL_PERIOD的写入值。第三接收端整流后的电压是不是稳定在5V附近。如果电压一直在振荡先把REG_CTRL_GAIN降到0看看是不是增益太大导致的。如果降到0还振荡那可能是发射端的响应太慢需要换一个发射端模组。下面这段Python代码是用示波器抓数据之后做简单分析的例子可以算调制深度和控制周期。import numpy as np # 假设从示波器导出的数据是两列时间(us) 和 电压(mV) data np.loadtxt(scope_data.csv, delimiter,) t data[:, 0] v data[:, 1] # 计算包络用滑动窗口找局部最大值 window_size 50 envelope np.array([np.max(v[i:iwindow_size]) for i in range(len(v)-window_size)]) # 计算调制深度包络的峰峰值除以平均值 v_pp np.max(envelope) - np.min(envelope) v_avg np.mean(envelope) mod_depth v_pp / v_avg * 100 # 百分比 print(f调制深度: {mod_depth:.2f}%) # 计算控制周期找包络的周期性 # 用 FFT 找主频 envelope_centered envelope - np.mean(envelope) fft_result np.fft.fft(envelope_centered) freqs np.fft.fftfreq(len(envelope_centered), d(t[1]-t[0])*1e-6) # 转成 Hz dominant_freq freqs[np.argmax(np.abs(fft_result[1:len(freqs)//2]))1] period 1 / dominant_freq * 1e6 # 转成 us print(f控制周期: {period:.0f} us)这段代码先算调制深度再算控制周期。调制深度的计算是用包络的峰峰值除以平均值。控制周期是用FFT找包络的主频然后取倒数。实际用的时候如果示波器数据有噪声可以先做一个低通滤波再算。另外窗口大小要根据采样率调整——如果采样率是10MSa/s窗口50个点就是5微秒对于2kHz的ASK信号来说够用了。4. 调试无线充电系统时最容易翻车的几个地方4.1 现象充电断断续续几秒就断一次原因最常见的是Ping阶段的信号强度包没发出去或者发错了。接收端在Ping阶段要回一个信号强度包这个包的内容是接收端感应到的电压幅度。如果这个值设得太低发射端会认为接收端不需要功率直接回到Selection阶段。如果设得太高发射端可能会过冲。解决用示波器抓Ping阶段的波形看接收端有没有在正确的时隙里发信号。然后检查RT1650的REG_SIGNAL_STRENGTH寄存器假设地址是0x15确保写入的值跟实际感应电压匹配。一般建议把这个值设在感应电压的50%到70%之间。4.2 现象电压调节振荡示波器上看到5V上下跳原因控制误差增益太大或者控制周期太短。增益太大导致系统对误差反应过度周期太短导致ASK包还没发完下一个包就来了发射端来不及响应。解决先把REG_CTRL_GAIN降到0看振荡是否消失。如果消失逐步增加增益每次加0.1直到振荡刚好不出现。如果降到0还振荡把REG_CTRL_PERIOD从4000us增加到8000us看是否改善。如果还不行检查发射端的响应时间——有些发射端模组的响应时间超过10ms这种模组不适合做动态负载测试。4.3 现象ASK解调误码率高通信经常失败原因调制深度不够或者参考电平没校准好。调制深度不够的话发射端检测到的幅度变化太小解调不出来。参考电平没校准好的话包络的直流分量偏移会导致比较器输出错误。解决先把REG_ASK_DEPTH从20增加到40也就是4%看误码率是否下降。如果下降说明是深度不够。如果没变化检查REG_REF_DAC的值——在Ping阶段之后读一下这个寄存器看芯片自动校准到了多少。如果校准值跟理论值差很远可能是线圈耦合系数不对需要调整线圈距离或者换线圈。4.4 现象效率低发射端发热严重原因调制深度太大导致接收端在通信时消耗了太多功率。或者线圈匹配不好谐振频率偏移导致无功功率大。解决先把REG_ASK_DEPTH降到101%看效率是否提升。如果提升不明显用LCR表重新量线圈的电感和品质因数确保发射端和接收端的谐振频率都在100kHz附近。如果频率偏移超过5%换线圈或者加谐振电容调整。4.5 现象RT1650启动不了I2C读不到ID原因供电电压不够或者I2C上拉电阻没接。RT1650的供电范围是3.3V到5V如果低于3.3V芯片可能不启动。I2C的上拉电阻一般是4.7k欧姆如果没接或者阻值太大通信会失败。解决先用万用表量RT1650的VDD引脚确保在3.3V以上。然后量I2C的SDA和SCL引脚看有没有上拉到VDD。如果没有加两个4.7k欧姆的电阻。如果都有但还是读不到ID检查I2C地址是不是设错了——RT1650的默认地址是0x3C但有些版本可以通过引脚配置成0x3D。5. 把控制误差包用出前馈效果一个进阶技巧前面讲的都是反馈控制——接收端测到电压偏差然后发控制误差包让发射端调整。但反馈有个天生的问题滞后。从负载突变到接收端测到偏差再到发射端调整功率中间至少隔了一个控制周期。如果负载变化很快比如手机拍照时瞬间电流拉高反馈来不及响应电压就会掉一个坑。一个实用的进阶技巧是加前馈。具体做法是接收端在检测到负载电流突变的时候不等电压偏差出现直接根据电流变化量算一个前馈的控制误差值叠加到反馈值上一起发给发射端。这样发射端在电压还没掉下来之前就开始加功率了。实现上可以在RT1650的固件里加一段逻辑每1ms采样一次负载电流如果电流变化超过50mA就根据变化量算一个前馈项。前馈项的系数需要标定——一般用实验方法给一个阶跃负载看电压掉多少然后反推系数。下面是一个简单的标定流程步骤操作记录1负载从100mA跳到500mA记录电压最低点V_min2负载从100mA跳到1A记录电压最低点V_min23计算前馈系数K (V_target - V_min) / (500mA - 100mA)得到mV/mA4把K写入REG_FF_GAIN寄存器完成标定标定的时候要注意前馈系数不能设太大否则会过冲。一般先设理论值的70%然后根据实际波形微调。另外前馈只对负载突变有效对缓慢变化的负载没用——缓慢变化还是靠反馈。这个技巧我在几个动态负载场景里试过电压跌落能从300mV降到100mV以内。但代价是固件复杂度上去了而且前馈系数需要针对不同的负载特性重新标定。如果产品负载比较固定这个投入是值得的如果负载变化范围很大可能还是老老实实把反馈周期缩短更省事。最后说一个血泪教训调试无线充电的时候千万别只盯着接收端。发射端的解调电路和响应速度同样关键有时候接收端调了半天没效果换一个发射端模组问题就没了。我一般会先确认发射端能正确解调ASK再调接收端的参数。希望帮到你。本文还有配套的精品资源点击获取
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑