目录
- 整体系统介绍
- 理论模型
- MATLAB实现
- 基于Simulink的阻抗扫频仿真
- 整体思路
- 注意事项
- 流程框图
- 其他
本文主要介绍三相并网逆变器dq阻抗建模的相关知识,和大家分享一下怎么使用MATLAB/Simulink来进行理论模型的搭建以及如何通过扫频获取阻抗模型,一方面是给自己留点学习资料,也希望对大家能有所帮助。如果有什么问题或者错误,欢迎留言。
本文涉及的代码和模型就不提供啦,不过后面会给出一组参数和对应阻抗的Bode图,有兴趣的可以自己做一下然后对照看看有没有问题。
整体系统介绍
图1是本文所使用的系统:三相并网逆变器;输入认为是恒定的直流电压源;滤波采用单电感,同时考虑寄生电阻;控制在dq坐标系下实现,为简单起见,使用单电流环。
理论模型
理论模型不是本文叙述的重点,大家可以去找相关的论文,有比较详细的介绍(特别是一些学位论文),这里只简单提一下。
并网变换器的dq阻抗模型实际上就是一个2*2的传递函数矩阵,输入和输出分别为并网点的电压和电流
建模中,个人认为最重要的就是锁相环。由于锁相环(PLL)的存在,在有小信号扰动时,控制系统的dq坐标系和实际系统的dq坐标系之间存在着相位差Δθ。Δθ的存在引起了dq轴的耦合,使得系统产生了复杂的稳定性问题。
为此,我们需要找出主电路(上标为 s)和控制系统(上标为 c )两个dq坐标系之间的关系。也就是两个坐标系下的电气量之间的转换关系式。根据相关的文献,有
其中 x 表示电压/电流/占空比等。
MATLAB实现
获取dq阻抗模型的控制框图或表达式后,我们可以考虑在MATLAB中用代码实现,并画出对应的Bode图。
要注意的几个点是:
- 不需要写出各个阻抗的具体表达式,直接以矩阵的形式来进行运算;
- 求逆矩阵时,MATLAB里面不推荐使用 inv() 函数,而是用 / 或 \ 予以替代。具体来说
- 似乎没办法直接作出一个2*2传递函数矩阵的Bode图(也可能是我不会),所以需要分别运用 bode() 函数。另外,推荐大伙使用这么几行命令,让每次画出的图的范围都是固定的。
tt = bodeoptions;
tt.XLim={[1 10e3]}; % 横坐标范围
tt.FreqUnits='Hz'; % 设置值模式
tt.PhaseWrapping='on'; % 相频特性 限制范围
tt.PhaseWrappingBranch=-180; % ±180之间bode(Zdd,tt);
基于Simulink的阻抗扫频仿真
整体思路
这里 阻抗扫频仿真 的意思是,我们先在Simulink中搭建电路模型,然后往PCC点注入一定的扰动信号(这里为串联电压扰动信号源),并采集对应的PCC电流,而后对电压电流信号进行处理运算,求解出系统的阻抗模型。
由于待求的阻抗有四个,但是一组扰动信号只有d轴和q轴两组方程,所以需要设计两组线性无关的扰动信号,才能建立起四个方程。
而这只是一个频率下的阻抗,还需要根据情况设计多个扰动频率点,以勾勒出一段频率范围内的阻抗特性。
整体的思路是:
- 搭建电路模型,并且保证其可以正常工作(具有稳态工作点);
- 设计电压扰动信号1和电压扰动信号2;
- 把某一频率下的信号1注入系统,采集PCC处的电压和电流,并进行dq变换;
- 注入扰动信号2,并且采集PCC处的电压和电流;
- 利用FFT,求出相应扰动频率下的两组信号的电压分量和电流分量的幅值和相位;
- 根据前面的公式,得到阻抗矩阵的具体数值;
- 注入另一频率下的扰动信号,并重复上述步骤,直至获得所有频率下的阻抗解;
- 画图。
注意事项
这里针对上面的各个步骤介绍一些可能要加以注意的事项
- 搭建电路模型,这一点没啥好说的,你首先需要确保自己的系统有稳态工作点,再考虑注入小信号扰动的事情;
- 设计扰动信号,对于逆变器,一般采用串联电压源的方式,而两组线性无关的信号可以这样设计:
其中 wg 是电网电压角频率。
- 注入信号,采集信号,为了确保准确性,可以每次注入一个频率的一组扰动信号。采集的时候因为是dq阻抗,所以要进行dq变换。这里要注意θ的选取,需要变换到实际系统dq坐标系下(上标为 s );
- 利用FFT求出幅值和相位,MATLAB中有对应的函数 fft() ,不过还需要自己补充一些内容才能符合需求;
- 求解阻抗方程,如果需要导纳模型,同样也可以求解;
- 注入其他频率的扰动信号,一般要避开工频(50Hz)以及其他谐波频率,免得计算结果有误。
流程框图
如果每次注入信号都手动操作的话,未免过于繁琐和费时(简直非人哉),所以强烈建议大家把这一个过程自动化。
得益于强大的MATLAB,我们最终可以实现这样的效果:在设计好系统和扰动频率点后,待程序运行结束后便可以自动生成理论模型和扫频仿真的Bode图。
个人的思路如下,供大家参考。
在Simulink中搭建模型,扰动信号的频率、幅值等将从MATLAB中获得(同理,也可以设置其他的模块参数从MATLAB中获得);这一功能利用如下函数实现
% 载入仿真模型文件
load_system('xxx.slx');% 设定参数
set_param('xxx/Constant','Value','3');% 运行仿真
sim('xxx', [t_start, t_end]);
具体可以参考这篇文章:MATLAB脚本调用simulink仿真文件及simulink模块参数修改-load_system函数-sim函数-set_param函数
另一方面,采集到的电压电流信号也要传到MATLAB中,以便于进一步的处理。这里可以使用 To Workspace 或 To File 模块;
点击 运行 后,首先启动Simulink模型,并选择注入扰动信号1(这里要设置好合适的仿真时间)。仿真结束后,把数据先存放到一个数组里,然后再注入扰动信号2,并且也给它存起来。获得两组数据后,利用FFT求得幅值和相位,利用阻抗表达式求得这一扰动频率下的阻抗解。为了获得其他频率下的阻抗,可以设计一个扰动频率数组,利用循环语句每次注入不同的信号。最后,把得到的阻抗解利用 plot() 给它画出来,并利用 hold on , 对比理论模型和扫频模型。
其他
这里提供了一组参数和阻抗Bode图,具体系统框图如前面的图1所示,供大家参考。
描述 | 参数 | 数值 |
---|---|---|
直流电压 | Udc | 1000V |
电网电压有效值 | Ug | 220V |
有功功率 | P | 100kW |
无功功率 | Q | 20kVar |
滤波电感 | L | 1mH |
滤波电感寄生电阻 | R | 1mΩ |
锁相环比例系数 | Kp_PLL | 1 |
锁相环积分系数 | Ki_PLL | 100 |
电流环比例系数 | Kp_i | 0.01 |
电流环积分系数 | Ki_i | 0.1 |
其中 蓝色线 表示理论模型,红色线 表示扫频仿真模型。
2023.08.23