1. 无线充电系统概述与Qi协议基础
无线充电技术作为现代消费电子领域的重要创新,已经广泛应用于智能手机、智能手表、TWS耳机等设备中。Qi协议作为无线充电联盟(WPC)制定的国际标准,定义了完整的无线充电系统架构和通信协议。这套标准的核心在于确保不同厂商设备间的互操作性,同时保证充电过程的安全性和效率。
在Qi协议框架下,功率传输采用磁感应原理,通过发射端(PTx)和接收端(PRx)线圈的电磁耦合实现能量传输。系统工作时,发射端产生高频交变磁场,接收端通过电磁感应将磁场能量转换为电能。这种能量传输方式面临诸多挑战:线圈耦合系数随设备位置变化、负载动态波动、环境干扰等,都需要精确的功率控制算法来维持稳定充电。
2. Qi协议功率控制架构解析
2.1 系统级功率控制流程
Qi协议采用接收端主导的闭环控制架构,整个功率调整过程可以分为以下几个关键步骤:
- 参数监测:接收端实时监测整流输出电压、充电电流和温度等关键参数
- 误差计算:将测量值与预设目标值比较,计算出控制误差
- 指令发送:通过负载调制方式将控制误差包(CEP,Control Error Packet)发送给发射端
- 功率调整:发射端解析CEP并执行PID算法调整发射功率
- 反馈闭环:接收端检测调整效果,必要时发送新的CEP
这种架构确保了功率调整的实时性和精确性,即使在外界干扰或设备移动情况下也能维持稳定充电。
2.2 通信协议与数据包解析
Qi协议定义了完整的通信协议栈,其中与功率控制直接相关的是0x03控制误差包。这个8位数据包采用二进制补码格式表示,取值范围-128到+127。在实际应用中:
- 正值表示需要增加发射功率
- 负值表示需要降低发射功率
- 绝对值大小反映调整需求的紧迫程度
例如,当接收端检测到输出电压低于目标值时,会发送一个较大的正值(如+80),要求发射端显著提升功率;当接近充满进入涓流充电时,则会发送较小的负值(如-20)进行微调。
3. PID控制算法原理与实现
3.1 离散PID控制基础
Qi协议采用离散位置式PID算法,其基本公式为:
u(k) = Kpe(k) + Ki∑e(j) + Kd*[e(k)-e(k-1)]
其中:
- u(k)为第k次控制输出
- e(k)为第k次误差
- Kp、Ki、Kd分别为比例、积分、微分系数
离散实现时需要特别注意采样周期和量化效应,这些因素直接影响控制系统的稳定性和响应速度。
3.2 Qi协议PID实现细节
3.2.1 目标电流计算
目标电流计算是PID控制的起点,公式为:
td(j) = ta(j-1) * [1 + c(j)/128]
其中:
- td(j)为当前周期目标电流
- ta(j-1)为上一周期实际电流
- c(j)为接收端发送的控制误差值
这个公式实现了对8位误差值的归一化处理,使控制指令与系统当前状态相关联,提高了控制的平滑性。
3.2.2 三环节实现
比例环节:
P(j,i) = Kp * e(j,i)
积分环节:
I(j,i) = I(j,i-1) + Ki * e(j,i) * t_inner
微分环节:
D(j,i) = Kd * [e(j,i) - e(j,i-1)] / t_inner
Qi协议对积分环节有特殊要求:
- 每个控制周期开始时积分项清零
- 积分项必须限幅在[-M1, +M1]范围内
- 采用遇限削弱积分法防止积分饱和
3.3 参数整定与优化
PID参数整定对系统性能至关重要。在无线充电应用中,建议采用以下方法:
- 先比例后积分:先调整Kp使系统有较快响应,再加入Ki消除静差
- 微分抑制震荡:最后加入Kd抑制超调和震荡
- 分段参数:根据功率等级采用不同参数组
典型参数范围:
- Kp:0.5-2.0
- Ki:0.05-0.2
- Kd:0.1-0.5
4. 工程实现与STM32代码示例
4.1 硬件架构设计
基于STM32的典型实现包含:
- 半桥/全桥驱动电路
- 电流采样电路(通常使用霍尔传感器或采样电阻)
- 零电压检测电路(用于谐振频率跟踪)
- 通信解调电路(接收PRx指令)
4.2 软件架构设计
建议采用以下架构:
c复制// PID控制器结构体
typedef struct {
float Kp, Ki, Kd;
float integral;
float prev_error;
float out_max, out_min;
} PID_Controller;
// 初始化PID控制器
void PID_Init(PID_Controller* pid, float Kp, float Ki, float Kd, float out_max, float out_min) {
pid->Kp = Kp;
pid->Ki = Ki;
pid->Kd = Kd;
pid->integral = 0;
pid->prev_error = 0;
pid->out_max = out_max;
pid->out_min = out_min;
}
// PID计算函数
float PID_Calculate(PID_Controller* pid, float setpoint, float measurement, float dt) {
float error = setpoint - measurement;
// 比例项
float P = pid->Kp * error;
// 积分项(带限幅和抗饱和)
pid->integral += pid->Ki * error * dt;
if(pid->integral > pid->out_max) pid->integral = pid->out_max;
else if(pid->integral < pid->out_min) pid->integral = pid->out_min;
// 微分项(带不完全微分滤波)
float derivative = (error - pid->prev_error) / dt;
float D = pid->Kd * derivative;
// 计算总输出并限幅
float output = P + pid->integral + D;
if(output > pid->out_max) output = pid->out_max;
else if(output < pid->out_min) output = pid->out_min;
pid->prev_error = error;
return output;
}
4.3 主控制流程实现
c复制// 主控制循环
void WirelessCharge_ControlLoop() {
static PID_Controller pid;
static float target_current = 0;
static float actual_current = 0;
// 初始化PID参数(需根据实际系统调整)
PID_Init(&pid, 1.0, 0.1, 0.2, 100.0, 0.0);
while(1) {
// 1. 接收并解析控制误差包
int8_t control_error = Receive_CEP();
// 2. 计算目标电流
target_current = actual_current * (1 + control_error / 128.0f);
// 3. 读取实际电流(滤波处理)
actual_current = Read_Filtered_Current();
// 4. 计算PID输出(控制周期1ms)
float pid_output = PID_Calculate(&pid, target_current, actual_current, 0.001f);
// 5. 调整逆变器频率(负号表示频率与功率反向变化)
float new_freq = current_freq - pid_output * freq_scale_factor;
// 6. 限制频率在协议范围内(110-205kHz)
if(new_freq < 110000) new_freq = 110000;
if(new_freq > 205000) new_freq = 205000;
// 7. 更新PWM频率
Set_Inverter_Frequency(new_freq);
// 8. 等待下一个控制周期
Delay_ms(1);
}
}
5. 关键工程问题与解决方案
5.1 电流采样噪声处理
无线充电系统中的电流采样面临高频开关噪声干扰,推荐采用以下方法:
- 硬件滤波:在采样电路前端增加RC低通滤波(截止频率约100kHz)
- 软件滤波:采用移动平均或IIR数字滤波
- 采样时机:在PWM周期中点进行采样,避开开关瞬态
示例代码:
c复制#define FILTER_WINDOW 8
float MovingAverage_Filter(float new_sample) {
static float samples[FILTER_WINDOW] = {0};
static uint8_t index = 0;
static float sum = 0;
sum -= samples[index];
samples[index] = new_sample;
sum += new_sample;
index = (index + 1) % FILTER_WINDOW;
return sum / FILTER_WINDOW;
}
5.2 谐振频率跟踪
由于线圈耦合变化和元件参数漂移,系统谐振频率可能变化,建议:
- 实时监测零电压切换(ZVS)状态
- 动态调整工作频率保持ZVS
- 将频率调整范围限制在PID输出范围内
5.3 多模式控制策略
根据充电阶段采用不同控制策略:
- 启动阶段:保守PID参数,避免过冲
- 恒流阶段:积极PID参数,快速响应
- 恒压阶段:减小积分项,提高稳定性
- 异常状态:特殊处理流程(如过热保护)
6. 协议兼容性实现要点
6.1 时序严格遵循
Qi协议对控制时序有严格要求:
- 控制误差包处理延迟(t_delay):5-205ms
- 功率调整窗口(t_active):最大21ms
- 单次迭代时间(t_inner):1-5ms
- 稳定等待时间(t_settle):3-7ms
建议使用硬件定时器精确控制这些时序。
6.2 安全限制实现
必须实现以下安全限制:
- 最大输出电流限制
- 工作频率范围限制(110-205kHz)
- 积分项限幅
- 总输出限幅
- 温度监控和保护
6.3 兼容性测试要点
通过以下测试确保协议兼容性:
- 负载阶跃响应测试(10%-100%变化)
- 耦合系数变化测试(位置偏移)
- 输入电压波动测试(±20%)
- 异物检测(FOD)测试
- 通信协议一致性测试
7. 开发工具与调试技巧
7.1 推荐开发环境
- IDE:VSCode + PlatformIO或Keil MDK
- 调试工具:J-Link调试器+逻辑分析仪
- 辅助工具:Qi协议分析仪(如Power-Z)
7.2 关键调试方法
- 电流波形分析:观察原边电流跟随情况
- 通信解码:验证控制误差包解析正确性
- PID参数调试:采用阶跃响应法调整参数
- 效率测试:优化参数降低开关损耗
7.3 常见问题排查
-
系统震荡:
- 检查微分项是否过大
- 验证电流采样是否准确
- 确认控制时序是否符合协议
-
响应迟缓:
- 增大比例项Kp
- 检查控制误差包接收是否及时
- 验证PID计算周期是否符合要求
-
稳态误差:
- 适当增加积分项Ki
- 检查积分限幅是否过小
- 验证目标电流计算是否正确
在实际开发中,我建议先用仿真工具验证PID算法基本功能,再移植到实际硬件。调试时从低功率开始,逐步提高功率等级,同时密切监测温度等关键参数。对于STM32平台,合理利用定时器和DMA可以显著提高控制精度和实时性。