当前位置:   article > 正文

基于stm32的恒功率无线充电_stm32f103c8t6无线充电

stm32f103c8t6无线充电

摘要

超级电容作为一种新型电化学元件,和电池相比,其具有寿命不受过充过放影响、充电速度快、功率密度高等特点,同时它也是一种绿色能源。本文中采用恒功率无线充电的方式对超级电容进行充电,同时比较PID恒功率充电方式和固定PWM充电方式的充电速度。无线充电系统包括硬件部分和软件部分,硬件部分给出了无线电接收板的硬件设计、主控板的硬件设计;软件部分给出了PID控制算法的设计。本文对PID控制下的无线充电功率进行了测量和分析,并通过改进增量式中的积分参数来抑制功率达到目标功率时的超调量。

关键词: 无线充电,恒功率,超级电容,PID。

1、前言

1.1DSP的发展现状

现阶段,DSP芯片已经在向专业化、多元化方向发展,各厂家的市场划分越来越细,差异性也越来越大。另外,单纯的DSP芯片已经不多见,更多的是DSP芯片与其它处理核心集成在一起,形成一个集成度高、针对性强的SOC,不仅极大地降低了板级空间,也带来了功耗、成本以及开发周期的全面优势,从而推动了行业的发展和产品性能的提高。
DSP的优势在于灵活的算法集成,可以给产品提供强大的性能以及灵活的定制,同一产品针对各类客户不同的需求实现不同的解决方案。为了提高产品的竞争力,厂商都会在算法上做足文章,算法变得越来越复杂,但是算法的稳定性、产品的功耗、开发周期等都会成为难以驾驭的风险。DSP算法不是一大堆理论公式的堆砌,而是与所使用DSP芯片的具体特点紧密结合的精致软件。
DSP技术产品现在正向着家庭个人化、高度集成化、高性能、运行速度快、低功耗、简单多样便携化等特性方面发展。主要体现在下面三个方面:
①集成DSP方向发展DSP系统级集成电路是将几个DSP核、MPU核、专用处理单元、外围电路单元和存储单元集成在一个芯片上。缩小了芯片的体积,这种高度集成化技术就是DSP技术发展的方向之一。
②DSP内核结构进一步改善DSP的多通道结构及单指令多重数据等内核结构进一步得到改善。多通道结构、单指令多重数据(SIMD)和特大指令字组(VLIM)主导新型高性能处理器。
③DSP融合化把DSP和微处理器结合起来,用单一芯片的处理器同时实现智能控制和数字信号处理两种功能;DSP和高档CPU融合,采用高档CPU的分支预示和动态缓冲技术,结构规范,易于编程,无需担心指令排队;DSP和SOC融合,把整个应用电子系统集成到一个芯片上;DSP和FPGA的融合,集成了核心算法的处理优势和外围控制处理的优势,处理速度得到大幅度提升。
DSP虽然已接近过时,但仍有应用,可参考中研普华的《2021-2026年中国DSP芯片行业市场前瞻与未来投资战略分析报告》。

2、设计目的及要求

2.1 总体介绍

本设计主要搭建无线充电系统的接收端,主要包括硬件和软件两个部分。硬件方面需要搭建LC谐振倍压整流电路、PWM控制电路,电压检测电路,电流检测电路、超级电容保护电路以及STM32C8T6主控板的设计。软件方面需要实现PID算法。接收线圈通过谐振后接收到的信号为正弦信号,正弦信号经过倍压整流后变为直流信号,这个直流电压再通过一个半桥控制电路实现与PWM信号的“相乘”,即可通过PWM的占空比实现对电压大小的调控,这个电压即作为超级电容的充电电压。最后通过电流检测芯片实现对充电电流的检测,将电压与电流相乘得到测量到的充电功率。将目标功率与测量功率相减得到误差量,这个误差量作为PID系统的输入,输出为PWM的占空比,最后实现对超级电容的恒功率充电[4]。

2.2 主要目的

实现对超级电容进行恒功率无线充电,充电功率为10W。

3、原理及实验

3.1 原理

3.1.1 超级电容保护电路


图3.1 超级电容保护电路

采用BW6101实现对超级电容的保护,图3.1中CAP_VCC为超级电容的充电电压,所采用的超级电容容值为100F(5个串联),当第一个超级电容C5充满电时,BW6101的OUT引脚由低电平变为高电平,使MOS管Q1导通,电流经R1、R2流向第二个超级电容C7,这样就实现了充电完上一个超级电容,才向下一个超级电容充电,实现对超级电容的保护。同时用LED指示超级电容是否已经充满,当超级电容充满电时,BW6101的LED引脚变为高电平。

3.1.2 LC谐振倍压整流电路


图3.2 LC谐振倍压整流电路

图3.3 负半周电流走向

图3.4 正半周电流走向

接收线圈接收的信号为正弦波,信号幅值设为 U m U_{m} Um。当信号为负半周时,即A为负、B为正时,D2导通、D1截止,信号经D2向三个谐振电容C1、C2、C3充电,在理想情况下,此半周内D2可看成短路,同时三个谐振电容充电到,其电流走向如上图3.3所示。当信号为正半周时,即A为正、B为负时,D2截止、D1导通,此时信号和C1、C2、C3串联后电压为 2 U m 2U_{m} 2Um,于是向C36充电,使C36充电至最高值 2 U m 2U_{m} 2Um,从而实现倍压,其电流路走向如上图3.4所示。

3.1.3 电流测量电路


图3.5 电流测量电路

图3.6 INA282芯片内部结构图

采用INA282进行电流的测量[1],INA282实际上是一个压差放大芯片,放大的是采样电阻R两端的电压差,即。VS引脚为芯片的供电电源,OUT引脚为放大后电压的输出引脚。VREF1、VREF2为芯片工作方式选择引脚,有如下所示两种工作方式:

①VREF1、VREF2同时接地或同时接VS,电流公式为 I = U o u t 50 R {I=\frac {U_{out}}{50R}} I=50RUout

②VREF1、VREF2一端接地一端接VS,电流公式为 I = U o u t − 1 2 V S 50 R {I=\frac {U_{out}-\frac {1}{2}VS}{50R}} I=50RUout21VS
本设计中采用了第二种方式。

3.1.4 PWM控制电路及测压电路


图3.7 PWM控制电路

图3.8 PWM隔离电路

采用74HC08与门进行信号的隔离,采用IR2104S结合半桥的方式进行PWM的控制。当单片机输入PWM信号时,在H0和L0分别输出反相的PWM信号。H0为正时,N1导通,N2截至,输出DOUBLE_VCC;H0为0时,L0为正,N1截至,N2导通,输出0,因此A处波形与输入的PWM信号相同,幅度变为DOUBLE_VCC(倍压整流之后的电压)。CAP_VCC为超级电容的充电电压,设通过采集ADC1引脚的电压为 U 1 {U_{1}} U1,则 C A P _ V C C = 11 ∗ U 1 {CAP\_VCC=11*U_{1}} CAP_VCC=11U1

3.1.5 PID算法

本设计中采用PID算法进行恒功率充电,PID系统的输入量为期望功率与测量功率之差,输出为PWM的占空比变化量。PID算法有两种方式,即位置式PID和增量式PID,这两种方式的本质是一样的。
①位置式
在位置式中,PID的输出即为输入的更新值。
u ( k ) = K p e r r o r ( k ) + K i ∑ k = 1 n e r r o r ( k ) + K d [ e r r o r ( k ) − e r r o r ( k − 1 ) ] u(k)=K_perror(k)+K_i\sum_{k=1}^{n}error(k)+K_d[error(k)-error(k-1)] u(k)=Kperror(k)+Kik=1nerror(k)+Kd[error(k)error(k1)]
②增量式
将位置式的两个时刻相减便得到了增量式PID,在增量式中,PID的输出即为输入的变化值。
Δ u ( k ) = u ( k ) − u ( k − 1 ) = { K p e r r o r ( k ) + K i ∑ k = 1 n e r r o r ( k ) + K d [ e r r o r ( k ) − e r r o r ( k − 1 ) ] } − { K p e r r o r ( k − 1 ) + K i ∑ k = 1 n e r r o r ( k − 1 ) + K d [ e r r o r ( k − 1 ) − e r r o r ( k − 2 ) ] } = K p [ e r r o r ( k ) − e r r o r ( k − 1 ) ] + K i e r r o r ( k ) + K d [ e r r o r ( k ) − 2 e r r o r ( k − 1 ) + e r r o r ( k − 2 ) ] \Delta{u(k)}=u(k)-u(k-1)\\ = \{K_perror(k)+K_i\sum_{k=1}^{n}error(k)+K_d[error(k)-error(k-1)]\}-\{K_perror(k-1)+K_i\sum_{k=1}^{n}error(k-1)+K_d[error(k-1)-error(k-2)]\}\\ =K_p[error(k)-error(k-1)]+K_ierror(k)+K_d[error(k)-2error(k-1)+error(k-2)] Δu(k)=u(k)u(k1)={Kperror(k)+Kik=1nerror(k)+Kd[error(k)error(k1)]}{Kperror(k1)+Kik=1nerror(k1)+Kd[error(k1)error(k2)]}=Kp[error(k)error(k1)]+Kierror(k)+Kd[error(k)2error(k1)+error(k2)]
本设计中需要对PWM的占空比进行增加或减少,因此采用增量式PID更为方便。PID控制的流程图如图3.9所示。


图3.9 PID控制流程图

对于超级电容的充电,超级电容的电压总是从0或接近于0的值开始往上增加,无论开始的电流多大,初始功率接近0,而控制量是PWM的占空比,所以在开始充电的瞬间,PID算法将会把PWM的占空比拉到100%,此时超级电容的功率还没有达到期望值,因此PWM占空比会维持在100%一段时间。达到期望功率之后,希望PWM的占空比马上下降,因此要求i系数非常大,但非常大的i系数会导致功率达到稳定值后发生振荡,因此对i系数进行分离,在未达到期望功率之前, K i K_i Ki的值非常大,达到期望功率之后, K i K_i Ki的值变小,这样既可以削去达到期望值时的尖峰,又有利于达到期望值时系统的稳定。

4、DSP硬件实验

4.1 硬件(DSP开发板或ARM等部分)介绍

4.1.1 主控器STM32C8T6

STM32的主控频率为72MHZ,本设计中系统配置的时钟树如图4.1所示。


图4.1 STM32时钟树

本设计中使用到的芯片外设有:ADC1(用于测电压和电流,频率12MHZ)、TIM3(用于产生PWM信号,PWM的频率设为10KHZ,其中Counter Period=100,方便占空比百分制控制)、TIM2(用于50ms定时器)、IIC1(用于oled显示)、UART1(用于将数据回传到电脑进行绘图)。

4.1.2 信号发射电路

信号发射电路采用现成的发射电路,如图4.2所示。发射的正弦波频率为150KHZ,发射功率高达60W左右。信号发射器包括发射控制器、主控电路、发射线圈、供电电源。


图4.2 信号发射电路

4.1.3 无线接收电路板

无线充电接收板包括超级电容保护电路、LC谐振倍压整流电路、PWM控制电路、电压测量电路、电流测量电路、电源管理电路。


图4.3 无线接收电路板

4.2 关键程序代码

4.2.1 传统PID算法代码

①PID结构体定义

typedef struct PID_Add  
{  
  float pGain;        
  float iGain;         
  float dGain;         
  float err;         
  float last_err;    
  float prev_err;
  float pidout;  
}PID2; 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

②增量式PID输出函数定义

void Add_pid_update(PID2* pid)  
{  
    float ep,ei,ed;  
    ep = pid->err - pid->last_err;  
    ei = pid->err;  
    ed = pid->err - 2*pid->last_err + pid->prev_err;  
    pid->pidout = pid->pGain * ep + pid->iGain*ei + pid->dGain*ed;  
    pid->prev_err = pid->last_err;  
    pid->last_err = pid->err;  
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

③50ms中断中进行ADC读取、测量功率、计算误差,计算PID输出

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)  
{  
    if (htim == (&htim2))  
    {  
            //计算40次取均值  
            for(int i=0;i<40;i++)  
            {  
                HAL_ADC_Start_DMA(&hadc1,ADC_Value,4);  
                voltage_ISN_sum+=ADC_Value[1]*3.3/4096.0*11;  
                electric_current_sum+=(ADC_Value[3]*33/4096.0-16.8);  
            }  
            voltage_ISN=voltage_ISN_sum/40;  
            electric_current=electric_current_sum/40;  
            voltage_ISN_sum=0;  
            electric_current_sum=0;  
            if(electric_current<0)  
            {  
                electric_current=0;  
            }  
            //计算功率  
            power=voltage_ISN*electric_current;  
            //计算误差  
            pid.err=power_want-power;  
            //计算pid输出  
            Add_pid_update(&pid);  
            //将输出与原来的占空比叠加  
            duty+=(int)pid.pidout;  
            if(duty>100)//限制功率  
            {  
                duty=100;  
            }  
            if(duty<0)  
            {  
                duty=0;  
            }  
            //duty=40;  
            Set_Tim3_Duty(&htim3,duty);  
             //串口发送数据  
            printf("%04.2f %04.2f %04.2f %03d %04.2f\r\n",voltage_ISN,electric_current,power,duty,pid.err);  
    }  
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

4.2.2积分系数改进(理解不深,可能有错误)

在中断函数中加入下面代码

if(pid.err<-2.2)  //超出10W,增大i消去尖峰  
{  
    pid.iGain=25;  
}  
else  
{  
    pid.iGain=0.5;  
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

4.3 实验结果

4.3.1 固定占空比与PID算法的对比

图4.4~4.7为在占空比等于100的情况下测得的数据,图4.8~4.11为使用PID算法恒定10W的情况下测得的数据,图4.12~4.15为使用PID算法恒定20W的情况下测得的数据。由于数据串口回传是放在中断函数中的,所以各个图中的数据点数可以代表时间。
由图4.4~4.7与图4.8~4.11对比可知,使用PID算法之后充电功率稳定在了10W左右,而没有使用PID算法时,最后电流很容易变得接近于0而导致充不了电。
由图4.4~4.7与图4.12~4.15对比可知,从两者的电压变化情况来看,20W的恒功率充电在数据点数等于7000时,超级电容电压已超过10V,而占空比等于100的充电方式下,数据点个数为7000时,超级电容电压维持在9V而不能上升,这说明了恒功率充电可以在超级电容电压较高时维持充电功率,提高充电速度和效率。
在这里插入图片描述
在这里插入图片描述

4.3.2 PID算法改进前后的对比

由图可见,在改进之前,达到稳定时,电流可以飘升到4A,功率曲线出现16W的尖峰,而改进之后,电流没有飘升,功率曲线出现尖峰大大减小,变为12W左右。
在这里插入图片描述

5、总结

5.1 实验中遇到的问题,怎样解决的

遇到的问题解决方法
倍压整流电路中二次充电电容耐压太小爆裂更换为100V耐压的电解电容
ADC数据读取收到高频信号的影响,使读取的数据发生上下波动ADC信号收正弦高频信号影响,所以测40次取均值可以滤除噪声
最开始是自制发射端,实验过程中可以发射出640KHZ的信号,但是MOS管会发烫,信号达到15V直接冒烟,更换MOS管依然发烫使用现成的发射电路,保证发射功率

附录

硬件电路图:

在这里插入图片描述

在这里插入图片描述

Matlab画图程序:

% 关闭所有的Figure窗口  
close all;   
% 清除工作空间的所有变量,函数,和MEX文件  
clear all;  
  
% 加载数据文件,并命名为A  
A = load('data_add.txt');  
% 矩阵A的规模,[,]  
[m,n] = size(A);  
  
% 绘制txt文件第一列的数据s  
figure(1);  
plot(A(:,1));  
axis([0 10000 0 10]);   
% 横坐标  
xlabel('数据点数(个)');  
% 纵坐标  
ylabel('幅值(V)');  
% 标题  
title('电压波形图');  
  
figure(2);  
plot(A(:,2));  
axis([0 10000 0 10]);   
% 横坐标  
xlabel('数据点数(个)');  
% 纵坐标  
ylabel('幅值(A)');  
% 标题  
title('电流波形图');  
  
figure(3);  
plot(A(:,3));  
axis([0 10000 0 15]);   
% 横坐标  
xlabel('数据点数(个)');  
% 纵坐标  
ylabel('幅值(W)');  
% 标题  
title('功率波形图');  
  
figure(4);  
plot(A(:,4));  
axis([0 10000 0 120]);   
% 横坐标  
xlabel('数据点数(个)');  
% 纵坐标  
ylabel('幅值(%)');  
% 标题  
title('占空比波形图'); 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50

代码:https://gitee.com/guoxianda/Constant-power-wireless-charging-based-on-stm32

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/495001
推荐阅读
相关标签
  

闽ICP备14008679号