发新帖我要提问
12
返回列表
打印
[应用相关]

基于stm32的恒功率无线充电

[复制链接]
楼主: 和下土
手机看帖
扫描二维码
随时随地手机跟帖
21
和下土|  楼主 | 2023-6-30 02:03 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
4.1.2 信号发射电路
信号发射电路采用现成的发射电路,如图4.2所示。发射的正弦波频率为150KHZ,发射功率高达60W左右。信号发射器包括发射控制器、主控电路、发射线圈、供电电源。 图4.2 信号发射电路

使用特权

评论回复
22
和下土|  楼主 | 2023-6-30 02:03 | 只看该作者
4.1.3 无线接收电路板
无线充电接收板包括超级电容保护电路、LC谐振倍压整流电路、PWM控制电路、电压测量电路、电流测量电路、电源管理电路。

图4.3 无线接收电路板

使用特权

评论回复
23
和下土|  楼主 | 2023-6-30 02:03 | 只看该作者
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;

使用特权

评论回复
24
和下土|  楼主 | 2023-6-30 02:04 | 只看该作者
②增量式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;  
}

使用特权

评论回复
25
和下土|  楼主 | 2023-6-30 02:04 | 只看该作者
③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);  
    }  
}

使用特权

评论回复
26
和下土|  楼主 | 2023-6-30 02:04 | 只看该作者
4.2.2积分系数改进(理解不深,可能有错误)
在中断函数中加入下面代码
if(pid.err<-2.2)  //超出10W,增大i消去尖峰  
{  
    pid.iGain=25;  
}  
else  
{  
    pid.iGain=0.5;  
}

使用特权

评论回复
27
和下土|  楼主 | 2023-6-30 02:04 | 只看该作者
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而导致充不了电。

使用特权

评论回复
28
和下土|  楼主 | 2023-6-30 02:05 | 只看该作者
由图4.4~4.7与图4.12~4.15对比可知,从两者的电压变化情况来看,20W的恒功率充电在数据点数等于7000时,超级电容电压已超过10V,而占空比等于100的充电方式下,数据点个数为7000时,超级电容电压维持在9V而不能上升,这说明了恒功率充电可以在超级电容电压较高时维持充电功率,提高充电速度和效率。

使用特权

评论回复
29
和下土|  楼主 | 2023-6-30 02:05 | 只看该作者


使用特权

评论回复
30
和下土|  楼主 | 2023-6-30 02:05 | 只看该作者
4.3.2 PID算法改进前后的对比
由图可见,在改进之前,达到稳定时,电流可以飘升到4A,功率曲线出现16W的尖峰,而改进之后,电流没有飘升,功率曲线出现尖峰大大减小,变为12W左右。

使用特权

评论回复
31
和下土|  楼主 | 2023-6-30 02:06 | 只看该作者
总结
5.1 实验中遇到的问题,怎样解决的

使用特权

评论回复
32
和下土|  楼主 | 2023-6-30 02:06 | 只看该作者
附录
硬件电路图:

使用特权

评论回复
33
和下土|  楼主 | 2023-6-30 02:06 | 只看该作者

使用特权

评论回复
34
和下土|  楼主 | 2023-6-30 02:06 | 只看该作者
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('占空比波形图');

使用特权

评论回复
35
和下土|  楼主 | 2023-6-30 02:06 | 只看该作者
代码:https://gitee.com/guoxianda/Constant-power-wireless-charging-based-on-stm32

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则