单相功率因数校正PFC电路的simulink仿真(从电路图搭建到C语言实现PID控制),直接拿来做课设啦!

  本文介绍功率因数校正(PFC)的simulink仿真实现,并用PID控制器将功率因数调整为近似1。最后将控制器离散化,用C语言的形式编写代码实现PID控制simulink中的模型实现同样的效果。(仅作为学习参考作用,若有不足请指出讨论。)

一、功率因数校正(PFC)电路原理

1.PFC含义

  功率因数校正(Power Factor Correction,PFC)电路,是指在传统的不控整流中融入有源器件,使得交流侧电流在一定程度上正弦化,从而减小装置的非线性、改善功率因数的一种高频整流电路。
  基本的单相PFC电路在单相桥式不可控整流器和负载电阻之间增加一个DC-DC功率变换电路,通常采用Boost电路(Boost电路原理及simulink仿真可以参考这个链接)。通过适当的控制Boost电路中开关管的通断,将整流器的输入电流校正成为与电网电压同相位的正弦波,消除谐波和无功电流,将电网功率因数提高到近似为1。电路的原理图如图所示:
在这里插入图片描述

2.PFC电路原理

  假定开关频率足够高,保证电感 L L L的电流连续;输出电容 C C C足够大,输出电压 u o u_o uo可认为是恒定直流电压。电网电压 u i u_i ui为理想正弦,即 u i = U m ∗ s i n ( w t ) u_i=U_m*sin(wt) ui=Umsin(wt),则不可控整流桥的输出电压 u d u_d ud为正弦半波, u d = ∣ u i ∣ = U m ∗ ∣ s i n ( w t ) ∣ u_d=|u_i|=U_m*|sin(wt)| ud=ui=Umsin(wt)
  当开关管 Q Q Q导通时,对电感 L L L充电,电感电流 i L i_L iL增加,电容 C C C向负载放点;当 Q Q Q关断,二极管 D i o d e Diode Diode导通时,电感两端电压 u L u_L uL反向, u d u_d ud u L u_L uL对电容充电,电感电流 i L i_L iL减小。电感电流满足:
在这里插入图片描述

  通过控制 Q Q Q的通断,即调节占空比 D D D,可以控制电感电流 i L i_L iL。若能控制 i L i_L iL近似为正弦半波电流,且与 u d u_d ud同相位,则整流桥交流侧电流也近似为正弦电流,且与电网电压 u i u_i ui同相位,即可达到功率因数校正的目的。为此,需要引入闭环控制。

3.闭环控制设计原理

  控制器必须满足以下两个要求:
  ①实现输出直流电压 u o u_o uo的调节,使其达到给定值;
  ②保证电网侧电流正弦化,且功率因数为1.
  即在稳定输出电压 u o u_o uo的情况下,使电感电流 i L i_L iL u d u_d ud波形相同。采用电压外环、电流内环的单相PFC双闭环控制的原理图如下所示:
在这里插入图片描述

4.电压外环的任务

  电压外环的任务是得到可以实现控制目标的电感电流指令值 i L ∗ i^{*}_L iL。给定输出电压 u o ∗ u^{*}_o uo减去测量到的实际输出电压 u o u_o uo的差值,经过PI调节器后输出电感电流 I L ∗ I^{*}_L IL的指令。测量到的整流桥出口电压 u d u_d ud除以其幅值 U m U_m Um后,可以得到 u d u_d ud表示波形的量 u d ’ u^’_d ud u d ’ u^’_d ud为幅值为1的正弦半波,相位与 u d u_d ud相同。 I L ∗ I^{*}_L IL u d ’ u^’_d ud相乘,便可以得到电感电流的指令值 i L ∗ i^{*}_L iL i L ∗ i^{*}_L iL为与 u d u_d ud同相位的正弦半波电流,其幅值可控制直流电压 u o u_o uo的大小。

5.电流内环的任务

  电流内环的任务是通过控制开关管 Q Q Q的通断,使实际的电感电流 i L i_L iL跟踪其指令值 i L ∗ i^{*}_L iL。此处采用滞环电流控制法。根据电流的公式,当 Q Q Q导通时电感电流增大,而当 Q Q Q关断时,电感电流减小。令 i L ∗ i^{*}_L iL减去 i L i_L iL,若差值△ i L i_L iL大于规定的上限△ i L m a x i_{L_{max}} iLmax,则令 Q Q Q导通,以增大 i L i_L iL;若差值△ i L i_L iL小于规定的下限△ i L m i n i_{L_{min}} iLmin,则令 Q Q Q关断,以减小 i L i_L iL。通过滞环控制,可以保证实际的电感电流 i L i_L iL在其指令值 i L ∗ i^{*}_L iL附近波动,波动的大小与滞环宽度有关,即与设定的△ i L m a x i_{L_{max}} iLmax和△ i L m i n i_{L_{min}} iLmin相关。

二、Simulink仿真电路搭建

1.给定元器件参数

① 输入电压有效值为220V,频率为50Hz;
② 输出直流电压指令u*o为400V;
③ 电感L=6mH;电容C=320uF;负载电阻R=160Ω;
④ 二极管整流桥:Rs=1e5Ω,Cs=1e-6F,Ron=1e-3Ω,Lon=0,Vf=0;
⑤ 开关管Q采用MOSFET,Ron=0.001Ω,Lon=0,Vf=0.8V,Ic=0,Rs=1e5Ω,Cs=inf;
⑥ Boost电路中二极管参数:Ron=0.001Ω,Lon=0,Vf=0.8V,Ic=0,Rs=500Ω,Cs=250e-9F。
⑦ Relay滞环电流控制模块宽度设置为[-0.5,0.5],Switch on point为1,Switch off point为-1;
⑧ 仿真算法:ode23tb

2.Boost电路搭建

  Boost电路的搭建可以参考这篇文章。搭建好的电路图如下:
在这里插入图片描述

3.PID控制电路搭建(搭建simulink自带PID控制器)

在这里插入图片描述

4.测量电路搭建

在这里插入图片描述

  其中,功率因数计算函数如下:
在这里插入图片描述

5.电路汇总

在这里插入图片描述

三、仿真电路分析

  将powergui设置为离散模型,Ts=1e-6,PID控制器的P为0.02,I为10。

1.直流输出电压波形及平均值

  输出电压波形如下:
在这里插入图片描述

  输出电压平均值如下:
在这里插入图片描述

  可以发现,直流电压波动周期为0.01s,频率为工频(50Hz)的两倍。

2.直流输出电压的FFT分析

在这里插入图片描述

3.整流器输出电压与电感电流波形

在这里插入图片描述

4.电网电压和电网电流的波形图

在这里插入图片描述

5.电流畸变系数、功率因数计算

在这里插入图片描述

  可以看出,电压和电流是同相位的,即功率因数基本为1(0.9997)。也可以观察Fourier模块的相角观察到电流与电压是同相位的,这满足控制器实现电网侧电流正弦化,且功率因数为1的要求,达到了PFC的目的。

四、C语言编写PID控制器

1.搭建simulink中C语言的编译环境

  拖出s-function-builder模块。(需要去了解一下如何在simulink中搭建C语言的编译环境,本文是装好了进行应用。可以参考:链接1链接2链接3
在这里插入图片描述

2.电路连接图

在这里插入图片描述

3.C语言编写的PID控制代码

/*
 * Include Files
 *
 */
#if defined(MATLAB_MEX_FILE)
#include "tmwtypes.h"
#include "simstruc_types.h"
#else
#include "rtwtypes.h"
#endif
 
/* %%%-SFUNWIZ_wrapper_includes_Changes_BEGIN --- EDIT HERE TO _END */
#include <math.h>
/* %%%-SFUNWIZ_wrapper_includes_Changes_END --- EDIT HERE TO _BEGIN */
#define u_width 1
#define y_width 1
 
struct _pid{
    float SetSpeed;//定义设定值
    float ActualSpeed;//定义实际值
    float err;//定义偏差值
    float err_last;//定义最上前的偏差值
    float err_next;//定义上一个偏差值 
    float Kp,Ki,Kd;//定义比例、积分、微分系数
};

static struct _pid pid={
0,0,0,0,0,0.02,0.01,1.15
};
 
float PID_realize(float Err)
{
 //pid.SetSpeed=speed;//设定值 
 pid.err=Err;//pid.SetSpeed-pid.ActualSpeed;//误差项 
 float incrementSpeed=
  pid.Kp*(pid.err-pid.err_next)+
  pid.Ki*pid.err;
  //pid.Kd*(pid.err-2*pid.err_next+pid.err_last) ;//这里不用微分环节
 pid.ActualSpeed+=incrementSpeed;
 pid.err_last=pid.err_next;
 pid.err_next=pid.err;
 return pid.ActualSpeed;
}
 //u0是输入的误差项,y0是控制器的输出
void mytest_Outputs_wrapper(const real_T *u0,
   real_T *y0)
{
     y0[0] =PID_realize(u0[0]);
}

4.控制器分析

①比例环节
在这里插入图片描述
在这里插入图片描述

  可以发现仅有比例环节的情况下系统存在稳态误差,需要增加积分环节消除稳态误差。

②比例积分环节
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  引入比例积分环节后,系统的稳态误差消失,输出为给定的400V电压。电网电流和电压同相位,功率因数由和计算得近似为1。以上是C语言实现PID控制器的效果,具体的PID参数可自行设置。

五、仿真文件获取

1.积分获取

Matlab2017b仿真文件地址

2.免费获取

关注公众号【凯期可期】后台回复:电力电子

在这里插入图片描述

六、其余电力电子电路

其余电路参考

  • 58
    点赞
  • 387
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 20
    评论
半桥LLC仿真CSDN是一个虚拟的仿真实验平台,旨在为用户提供一个学习和实践计算机科学知识的环境。通过该平台,用户可以模拟各种计算机科学相关的实验和场景,从而增强自己的学习效果和实践能力。 半桥LLC是一个创新型的技术公司,专注于虚拟仿真技术的研发和应用。CSDN(中国软件开发者网)是中国最大的IT社区和开发者社区,汇集了海量的技术文章、问题解答和资源分享,为广大开发者提供学习和交流的平台。 半桥LLC仿真CSDN的目的是为了将虚拟仿真技术与开发者社区结合起来,为用户提供丰富的学习资源和实验机会。用户可以在仿真环境中进行编程实践、算法优化、系统设计等各种计算机科学相关的操作和实验。通过这些实践,用户可以加深对知识的理解和掌握,提升自己的技术水平和解决问题的能力。 与传统的学习方式相比,半桥LLC仿真CSDN具有以下优势:首先,它提供了一个安全和可控的学习环境,用户可以在仿真平台上尝试各种实验,而不会对真实的系统和网络造成损害。其次,它提供了丰富的学习资源和案例,用户可以随时学习和参考,提升自己的知识水平和技术能力。此外,用户还可以与其他开发者进行交流和分享经验,进一步提高自己。 综上所述,半桥LLC仿真CSDN是一个有益于开发者学习和实践的虚拟仿真平台,通过模拟各种计算机科学相关的实验和场景,用户可以提升自己的技术能力和解决问题的能力。这将进一步助推中国的计算机科学发展和技术创新。
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值