基于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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Node基础--npm相关内容

下面,我们一起来看看Node中的至关重要的一个知识点-----npm 1.npm概述 npm(Node Package Manager),CommonJS包规范是理论,npm是其中一种实践。 对于Node而言,NPM帮助其完成了第三方模块的发布、安装和依赖等。借助npm,Node与第三方模块之间形成了很好的一个 生态系统。(类…

Netty简易聊天室

文章目录 本文目的参考说明环境说明maven依赖日志配置单元测试 功能介绍开发步骤 本文目的 通过一个简易的聊天室案例,讲述Netty的基本使用。同时分享案例代码。项目中用到了log4j2,junit5,同时分享这些基础组件的使用。项目中用到了awt&…

Rust踩雷笔记(5)——刷点链表的题(涉及智能指针Box,持续更新)

目录 leetcode 2 两数相加——模式匹配单链表Box 只能说Rust链表题的画风和C完全不一样,作为新手一时间还不太适应,于是单独为链表、智能指针开一篇,主要记录leetcode相关题型的答案以及注意事项。 leetcode 2 两数相加——模式匹配单链表Bo…

小程序开发之登录授权

小程序开发登录授权流程 看懂这张图登录授权就没问题了(哈哈哈哈哈) 说明: 调用 wx.login() 获取 临时登录凭证code ,并回传到开发者服务器。 调用 auth.code2Session 接口,换取 用户唯一标识 OpenID 和 会话密钥 sess…

【C++】Cmake使用教程(看这一篇就够了)

文章目录 引言一 环境搭建二 简单入门2.1 项目结构2.2 示例源码2.3 运行查看 三 编译多个源文件3.1 在同一个目录下有多个源文件3.1.1 简单版本3.1.1.1 项目结构3.1.1.2 示例代码3.1.1.3 运行查看 3.1.2 进阶版本3.1.2.1 项目结构3.1.2.2 示例源码3.1.2.3 运行查看 3.2 在不同目…

TabView 初始化与自定义 TabBar 属性相关

SWift TabView 与 UIKit 中的 UITabBarController 如出一辙.在 TabView 组件中配置对应的图片和标题; 其中,Tag 用来设置不同 TabView 可动态设置当前可见 Tab;另也有一些常用的属性与 UIKit 中的类似,具体可以按需参考 api 中属性进行单独修改定制; 在 iOS 15.0 之后还可设置角…

系列十一、AOP

一、概述 1.1、官网 AOP的中文名称是面向切面编程或者面向方面编程,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 1.2、通俗描述 不通过…

[JDK8环境下的HashMap类应用及源码分析] capacity实验

🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄、CSDN博客专家 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 系列文章目录 [Java基础] StringBuffer 和 StringBuilder 类应用及源码分析 [Java基础] 数组应用…

横扫“盲区”、“看透”缺陷,维视智造推出短波红外相机

在可见光领域,工业相机的视觉应用已经十分成熟,但在日常的客户咨询中,我们也经常接到一些“超纲需求”——客户想要检测“白底上的白色缺陷”、“不透明包装内的透明物体有无”等,均属于可见光无法实现的检测,而市面上…

API接口开发管理平台--多领域企业数字化管理的解决方案

随着数字化时代的到来,企业需要进行数字化转型才能更好地适应市场需求和用户需求。而API接口则是数字化转型中的重要组成部分,可以帮助企业更好地管理信息,提高效率。本文将介绍一种解决方案--API接口开发管理平台,该平台开发出多…

无线 CBTC 与互联互通

1 无线 CBTC 的技术与经济优势 由于无线 CB TC 可采用移动闭塞的制式,列车能以较小的间隔运行,可使运 营商实现“ 高密度”的运营模式,这使系统可在同样满足客运需求的基 础上,缩短旅客的候车时间,缩小站台长度和候…

微信小程序开发教学系列(13)- 小程序支付与电商功能

13. 小程序支付与电商功能 小程序支付与电商功能是微信小程序中非常重要的一部分,通过支付功能可以实现用户购买商品、支付订单等功能。下面将介绍小程序支付的接入和配置以及实现电商功能和订单管理的方法。 13.1 小程序支付的接入和配置 13.1.1 获取微信支付商…

Pygame编程(1)初始化和退出模块

初始化和退出模块 pygame使用基础流程 初始化模块设置主屏窗口程序主循环(处理键盘、鼠标、游戏杆、触摸屏等事件)退出模块终止程序 import sys import pygame from pygame.locals import *# 1.初始化模块 pygame.init()# 2.设置主屏窗口 display pyg…

SocketTools.NET 11.0.2148.1554 Crack

添加新功能以简化使用 URL 建立 TCP 连接的过程。 2023 年 8 月 23 日 - 12:35新版本 特征 添加了“HttpGetTextEx”函数,该函数在返回字符串缓冲区中的文本内容时提供附加选项。添加了对“FileTransfer”.NET 类和 ActiveX 控件中的“GetText”和“PutText”方法的…

HDLBits-Verilog学习记录 | Verilog Language-Modules(1)

文章目录 20.Module21.Connecting ports by position | Moudle pos22.Connecting ports by name | Module name23.Three modules | Module shift24.Modules and vectors | Module shift8 20.Module practice:You may connect signals to the module by port name or port posi…

FFmpeg支持多线程编码并保存mp4文件示例

之前介绍的示例: (1).https://blog.csdn.net/fengbingchun/article/details/132129988 中对编码后数据保存成mp4 (2).https://blog.csdn.net/fengbingchun/article/details/132128885 中通过AVIOContext实现从内存读取数据 (3).https://blog.csdn.net/fengbingchun/…

几个nlp的小任务(机器翻译)

几个nlp的小任务(机器翻译) 安装依赖库数据集介绍与模型介绍加载数据集看一看数据集的样子评测测试数据预处理测试tokenizer处理目标特殊的token预处理函数对数据集的所有数据进行预处理微调预训练模型设置训练参数需要一个数据收集器,把处理好数据喂给模型设置评估方法参数…

美团面试拷打:ConcurrentHashMap 为何不能插入 null?HashMap 为何可以?

周末的时候,有一位小伙伴提了一些关于 ConcurrentHashMap 的问题,都是他最近面试遇到的。原提问如下(星球原贴地址:https://t.zsxq.com/11jcuezQs ): 整个提问看着非常复杂,其实归纳来说就是两个问题: ConcurrentHashMap 为什么 key 和 value 不能为 null?ConcurrentH…

【C++ 学习 ⑱】- 多态(上)

目录 一、多态的概念和虚函数 1.1 - 用基类指针指向派生类对象 1.2 - 虚函数和虚函数的重写 1.3 - 多态构成的条件 1.4 - 多态的应用场景 二、协变和如何析构派生类对象 2.1 - 协变 2.2 - 如何析构派生类对象 三、C11 的 override 和 final 关键字 一、多态的概念和虚…

mysql建表问题

问题 例如用户表,我们需要建一个字段是创建时间, 一个字段是更新时间. 解决办法可以是指定插入时间,也可以使用数据库的默认时间. 在mysql中如果设置两个默认CURRENT_TIMESTAMP,会出现这样的错误. Error Code: 1293. Incorrect table definition; there can be only one TIMES…