基于MATLAB/Simulink的三相并网逆变器dq阻抗建模及扫频仿真

目录

  • 整体系统介绍
  • 理论模型
    • MATLAB实现
  • 基于Simulink的阻抗扫频仿真
    • 整体思路
    • 注意事项
    • 流程框图
  • 其他

本文主要介绍三相并网逆变器dq阻抗建模的相关知识,和大家分享一下怎么使用MATLAB/Simulink来进行理论模型的搭建以及如何通过扫频获取阻抗模型,一方面是给自己留点学习资料,也希望对大家能有所帮助。如果有什么问题或者错误,欢迎留言。

本文涉及的代码和模型就不提供啦,不过后面会给出一组参数和对应阻抗的Bode图,有兴趣的可以自己做一下然后对照看看有没有问题。

整体系统介绍

图1是本文所使用的系统:三相并网逆变器;输入认为是恒定的直流电压源;滤波采用单电感,同时考虑寄生电阻;控制在dq坐标系下实现,为简单起见,使用单电流环。

在这里插入图片描述

图1 三相并网变换器系统框图

理论模型

理论模型不是本文叙述的重点,大家可以去找相关的论文,有比较详细的介绍(特别是一些学位论文),这里只简单提一下。

并网变换器的dq阻抗模型实际上就是一个2*2的传递函数矩阵,输入和输出分别为并网点的电压和电流

在这里插入图片描述

(1)

建模中,个人认为最重要的就是锁相环。由于锁相环(PLL)的存在,在有小信号扰动时,控制系统的dq坐标系和实际系统的dq坐标系之间存在着相位差ΔθΔθ的存在引起了dq轴的耦合,使得系统产生了复杂的稳定性问题。

为此,我们需要找出主电路(上标为 s)和控制系统(上标为 c )两个dq坐标系之间的关系。也就是两个坐标系下的电气量之间的转换关系式。根据相关的文献,有

在这里插入图片描述

(2)

其中 x 表示电压/电流/占空比等。

MATLAB实现

获取dq阻抗模型的控制框图或表达式后,我们可以考虑在MATLAB中用代码实现,并画出对应的Bode图。

要注意的几个点是:

  1. 不需要写出各个阻抗的具体表达式,直接以矩阵的形式来进行运算;
  2. 求逆矩阵时,MATLAB里面不推荐使用 inv() 函数,而是用 / 或 \ 予以替代。具体来说

在这里插入图片描述

(3)
  1. 似乎没办法直接作出一个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轴两组方程,所以需要设计两组线性无关的扰动信号,才能建立起四个方程。

在这里插入图片描述

(4)

而这只是一个频率下的阻抗,还需要根据情况设计多个扰动频率点,以勾勒出一段频率范围内的阻抗特性。

整体的思路是:

  1. 搭建电路模型,并且保证其可以正常工作(具有稳态工作点);
  2. 设计电压扰动信号1和电压扰动信号2;
  3. 把某一频率下的信号1注入系统,采集PCC处的电压和电流,并进行dq变换;
  4. 注入扰动信号2,并且采集PCC处的电压和电流;
  5. 利用FFT,求出相应扰动频率下的两组信号的电压分量和电流分量的幅值和相位;
  6. 根据前面的公式,得到阻抗矩阵的具体数值;
  7. 注入另一频率下的扰动信号,并重复上述步骤,直至获得所有频率下的阻抗解;
  8. 画图。

注意事项

这里针对上面的各个步骤介绍一些可能要加以注意的事项

  1. 搭建电路模型,这一点没啥好说的,你首先需要确保自己的系统有稳态工作点,再考虑注入小信号扰动的事情;
  2. 设计扰动信号,对于逆变器,一般采用串联电压源的方式,而两组线性无关的信号可以这样设计:

在这里插入图片描述

(5)

其中 wg 是电网电压角频率。

  1. 注入信号,采集信号,为了确保准确性,可以每次注入一个频率的一组扰动信号。采集的时候因为是dq阻抗,所以要进行dq变换。这里要注意θ的选取,需要变换到实际系统dq坐标系下(上标为 s );
  2. 利用FFT求出幅值和相位,MATLAB中有对应的函数 fft() ,不过还需要自己补充一些内容才能符合需求;
  3. 求解阻抗方程,如果需要导纳模型,同样也可以求解;
  4. 注入其他频率的扰动信号,一般要避开工频(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 WorkspaceTo File 模块;

点击 运行 后,首先启动Simulink模型,并选择注入扰动信号1(这里要设置好合适的仿真时间)。仿真结束后,把数据先存放到一个数组里,然后再注入扰动信号2,并且也给它存起来。获得两组数据后,利用FFT求得幅值和相位,利用阻抗表达式求得这一扰动频率下的阻抗解。为了获得其他频率下的阻抗,可以设计一个扰动频率数组,利用循环语句每次注入不同的信号。最后,把得到的阻抗解利用 plot() 给它画出来,并利用 hold on , 对比理论模型和扫频模型。

图2 流程框图

图2 流程框图

其他

这里提供了一组参数和阻抗Bode图,具体系统框图如前面的图1所示,供大家参考。

描述参数数值
直流电压Udc1000V
电网电压有效值Ug220V
有功功率P100kW
无功功率Q20kVar
滤波电感L1mH
滤波电感寄生电阻R1mΩ
锁相环比例系数Kp_PLL1
锁相环积分系数Ki_PLL100
电流环比例系数Kp_i0.01
电流环积分系数Ki_i0.1

在这里插入图片描述

图3 dq阻抗模型Bode图

其中 蓝色线 表示理论模型,红色线 表示扫频仿真模型。

2023.08.23

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/93384.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分类预测 | MATLAB实现SSA-CNN-SVM基于麻雀算法优化卷积支持向量机分类预测

分类预测 | MATLAB实现SSA-CNN-SVM基于麻雀算法优化卷积支持向量机分类预测 目录 分类预测 | MATLAB实现SSA-CNN-SVM基于麻雀算法优化卷积支持向量机分类预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现SSA-CNN-SVM基于麻雀算法优化卷积支持向量机分类预测…

k8s的学习篇1

一 k8s的概念 1.1 k8s k8s是一个轻量级的,用于管理容器化应用和服务的平台。通过k8s能够进行应用的自动化部署和扩容缩容。 1.2 k8s核心部分 1.prod: 最小的部署单元;一组容器的集合;共享网络;生命周期是短暂的; …

hive-列转行

转成 select customer_code,product_type from temp.temp_xx LATERAL VIEW explode(SPLIT(product_types,,)) table_tmp AS product_type where customer_code K100515182

数据结构(Java实现)-优先级队列(堆)

队列是一种先进先出(FIFO)的数据结构,但有些情况下,操作的数据可能带有优先级,一般出队 列在这种情况下,数据结构应该提供两个最基本的操作,一个是返回最高优先级对象,一个是添加新的对象。 这种数据结构就…

Seaborn绘制热力图的子图

Seaborn绘制热力图的子图 提示:如何绘制三张子图 绘制的时候,会出现如下问题 (1)如何绘制1*3的子图 (2)三个显示条,如何只显示最后一个 提示:下面就展示详细步骤 Seaborn绘制热力…

权限提升-手工-系统权限提升

权限提升基础信息 1、具体有哪些权限需要我们了解掌握的? 后台权限,网站权限,数据库权限,接口权限,系统权限,域控权限等 2、以上常见权限获取方法简要归类说明? 后台权限:SQL注入,数…

8.28day48

198. 打家劫舍 - 力扣(LeetCode) 知识点:动规五部 1.dp数组的含义:dp数组表示打劫改房间的最大收益 2.递推公式:打劫i家:从后往前推 我们如果打劫第i家 那么第i-1家绝对不可能背打劫 所以:dp…

【100天精通python】Day46:python网络编程基础与入门

目录 专栏导读 1 网络编程的基础 2. 基本概念和协议 2.1 计算机网络基础 2.2 网络协议、IP地址、端口号 2.3 常见网络协议 3. 套接字编程 3.1 套接字的基本概念 3.2 套接字的基本操作 3.3 套接字通信模型和方法:send、recv 3.3.1 TCP通信模型 3.3.2 U…

Linux系统编程:线程互斥

目录 一. 与线程互斥相关的概念 二. 线程安全问题 2.1 多个执行流访问临界区资源引发线程安全问题 2.2 可重入函数和线程安全的关系 三. 互斥锁 mutex 3.1 互斥锁功能 3.2 互斥锁的使用 3.3 互斥锁的实现原理 四. 死锁问题 四. 总结 一. 与线程互斥相关的概念 临界…

9.oracle中sign函数

在Oracle/PLSQL中, sign 函数返回一个数字的正负标志. 语法如下&#xff1a;sign( number ) number 要测试标志的数字. If number < 0, then sign returns -1. If number 0, then sign returns 0. If number > 0, then sign returns 1. 应用于: Oracle 8i, Oracle …

mysql my.ini、登录、用户相关操作、密码管理、权限管理、权限表,角色管理

my.ini 配置文件格式 登录mysql mysql -h hostname | IP -P port -u username -p database -e “select 语句”&#xff1b; 创建用户、修改用户、删除用户 create user ‘zen’ identified by ‘密码’ ## host 默认是 % create user ‘zen’‘localhost’ identified by ‘密…

<高阶数据结构>图

图 必要概念大致用途 存图邻接矩阵邻接表 遍历BFS(广度优先)DFS(深度优先) 最小生成树Kruskal算法Prim算法 寻最短路径Dijkstra算法 必要概念 图根据有无方向分为&#xff0c;有向图和无向图 组成&#xff1a;G (V, E) 顶点集合 V边的集合 E G(Graph),V(Vertex),E(Edge) 图可…

Docker容器:docker consul的注册与发现及consul-template

Docker容器&#xff1a;docker consul的注册与发现及consul-template守护进程 一.docker consul的注册与发现介绍 1.什么是服务注册与发现 &#xff08;1&#xff09;服务注册与发现是微服务架构中不可或缺的重要组件。 &#xff08;2&#xff09;为解决服务都是单节点的&a…

李沐pytorch学习-BatchNormalization

一、意义 在使用较深的网络时&#xff0c;BatchNormalization&#xff08;批量归一化&#xff09;几乎是必需的&#xff0c;可以加速收敛。 对于图1所示的全连接层神经网络&#xff0c;输出节点的GroundTruth为&#xff0c;损失函数为&#xff0c;则损失对权重的梯度为&#xf…

接口测试总结分享(http与rpc)

接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相互逻辑依赖关系等。 一、了解一下HTTP与RPC 1. HTTP&#xff08;H…

YOLOv5屏蔽区域检测(选择区域检测)

YOLOv5屏蔽区域检测以及选择区域检测 前期准备labelme选择mask区域 代码改动 前期准备 思路就是通过一个mask掩膜&#xff0c;对我们想要屏蔽或者选择的区域进行遮挡处理&#xff0c;在推理的时候&#xff0c;将有mask掩膜的图像输入&#xff0c;将最后的结果显示在原始图像上…

【Go 基础篇】Go语言中的自定义错误处理

错误是程序开发过程中不可避免的一部分&#xff0c;而Go语言以其简洁和高效的特性闻名。在Go中&#xff0c;自定义错误&#xff08;Custom Errors&#xff09;是一种强大的方式&#xff0c;可以为特定应用场景创建清晰的错误类型&#xff0c;以便更好地处理和调试问题。本文将详…

基于微信小程序的汽车租赁系统的设计与实现ljx7y

汽车租赁系统&#xff0c;主要包括管理员、用户二个权限角色&#xff0c;对于用户角色不同&#xff0c;所使用的功能模块相应不同。本文从管理员、用户的功能要求出发&#xff0c;汽车租赁系统系统中的功能模块主要是实现管理员后端&#xff1b;首页、个人中心、汽车品牌管理、…

算法通关村十三关 | 进制转换问题处理模板

1. 七进制数 题目&#xff1a;LeetCode504&#xff1a;504. 七进制数 - 力扣&#xff08;LeetCode&#xff09; 思路 进制转换&#xff0c;对几转换就是对几求余&#xff0c;最后将所有的余数反过来即可、如果num< 0&#xff0c;先取绝对值&#xff0c;再进行操作。 100转7…

MYSQL表的增删改查(单表)

文章目录 一、CRUD二、creat(新增)三、查询&#xff08;Retrieve&#xff09;四、修改&#xff08;update&#xff09;五、删除&#xff08;Delete&#xff09; 一、CRUD SQL 最核心的就是增删改查&#xff0c;后端开发工作中&#xff0c;遇到的最核心的操作也是这个 二、creat…