通过一个单相逆变器仿真深度学习PR控制器

目录

前言

​编辑

PR控制器的理论

PR控制器不同表达式及其建模

 PR控制器连续积分组合及模型

 PR控制器连续传递函数及模型

 PR控制器离散积分及模型

 PR控制器离散传递函数及模型

 PR控制器差分方程及模型

系统仿真效果

总结


前言

在项目开发中常用PI控制器,这次在做单相逆变器的时候发现PI控制器在有些工况有局限性,于是引入了PR控制器。简单来说当控制器的输入是直流量大多用PI控制器,当控制器输入是一定频率的正弦量时PR控制器相比于PI控制器就好很多。如在单相逆变的电压环输入的就是目标电压的参考,给定值是50Hz,220V的交流电。如果要用PI控制器需要对给定电压进行变换转换成直流量,但是由于50Hz的频率比较低,转换后的直流量控制起来响应和带宽做不高。

在电机控制里电流环也可以采用PR控制器,需要输入当前电频率。

 在单/三相FPC整流和逆变同样也可以有类似的用法。如下图是单相逆变电压环简化的PR控制器。

PR控制器的理论

很多论文都有下面这样的描述,这里不再过多解释,网上对PR控制器的解释很多,包括伯德图等。这里主要以改进型的PR控制器根据实际的工程需要如何建模仿真。

PR控制器不同表达式及其建模

在实际开发中,s域的传递函数是没法写成C代码或者直接生成代码的,需要对其进行离散化,或者写成积分形式,或者写成差分方程的形式,直接用离散传递函数也是可以生成代码的,具体用哪种形式可以从方便或者代码量方面去考虑。

如下是能在单相系统中正常工作的参数。

Tprs是离散后的采样频率,对应控制环路执行频率,暂定70Khz.

Kpr_p,Kpr_r类似于PI的控制参数。
wcpr控制器的截止频率
wopr谐振频率,对应给定的参考变量频率,如果是电压环就是给定的参考交流电压频率。为了方便建模可以考虑把Kp单独拿出来,也可以整合成一个完整的传递函数。

根据PR控制器的传递函数

 PR控制器连续积分组合及模型

 写成积分组合形式Kp单独拿出来:

 R(s)=\frac{y(s)}{u(s)}=\frac{2K_{r}W_{c}s}{s^{2}+2W_{c}s+W_{o}^{2}}

 分子分母调换一下:

\frac{u(s)}{y(s)}=\frac{s^{2}+2W_{c}s+W_{o}^{2}}{2K_{r}W_{c}s}=\frac{s}{2K_{r}W_{c}}+\frac{1}{K_{r}}+\frac{W_{o}^{2}}{2K_{r}W_{c}s}

把u(s)提出来:

u(s)=\frac{s}{2K_{r}W_{c}}*y(s)+\frac{1}{K_{r}}*y(s)+\frac{W_{o}^{2}}{2K_{r}W_{c}s}*y(s)

 再把y(s)挪到等号左边:

\frac{s}{2K_{r}W_{c}}*y(s)=u(s)-\frac{1}{K_{r}}*y(s)-\frac{W_{o}^{2}}{2K_{r}W_{c}s}*y(s)

 得到如下的表达式:

y(s)=\left [ u(s)-\frac{1}{K_{r}}*y(s)-\frac{W_{o}^{2}}{2K_{r}W_{c}s}*y(s) \right ]*\frac{2K_{r}W_{c}}{s}

 到这一步就可以用Simulink搭成积分的形式了。

 实际中,把1/Kr这一项去掉也不影响系统正常工作,所以有些PR控制器可能没有这一项。如下所示:

 对比如下,有1/Kr和没有区别不是很大,特别是Kr选取比较大的时候,这一项的影响较小,实际中可以根据取值决定是否需要,可以节省那么一丢丢的算力。

 黄色省掉了1/Kr的项,蓝色保留

 PR控制器连续传递函数及模型

 采用连续传递函数直接控制,如下是包含Kp的控制器完整传递函数,在仿真中直接用Transfer Fcn模块做控制器也是可以的。

 和通过模块搭建的积分形式在相同输入的情况下,输出完全重合,这也从侧面验证了前面搭的积分组合形式没任何问题。

 PR控制器离散积分及模型

前面都是连续系统的仿真,实际工程需要离散化,对于积分组合形式只需要加上个速率转换,把连续积分换成离散积分就能得到离散积分的形式,如下:

 Matlab可以通过c2d的函数把连续传递函数转换成离散传递函数,如下:

只需要根据实际工程中的控制器执行频率设置采样时间和离散方式就可以了,这里选择tustin双线性变换的离散方法。

Dpr_Z=c2d(Cpr_s,Tprs,'tustin');

离散化的方法有很多:前向差分法、后向差分法、双线性变换、预插值双线性变换、脉冲响应不变法、零极点匹配法、零阶保持不变法、一阶保持不变法,实际的嵌入式系统用零阶保持和双线性变换都差不多,反正都是通过Matlab直接得到离散化后的传递函数,Bode图也都差不多。

 PR控制器离散传递函数及模型

R(s)离散化后得到R(z)

 这里有个坑需要注意,按照得到的离散传递函数直接构建的控制器输出和连续传递函数控制器输出不一样,完全不能让系统收敛,如下图:

 这里需要把Matlab的数据显示精度改成long。不然会影响控制器的正常工作,改完后得到的传递函数如下:

 连续的PR控制器和离散的PR控制器输出重合。

 细节上连续的更光滑,离散的会有70Khz的突变,不影响实际的控制系统。

 PR控制器差分方程及模型

这里只对R(z)进行差分方程化,其实在前面离散积分组合,离散传递函数都可以直接生成代码应用到工程里面,这里再多一个差分方程的形式方便另一种方式手写代码实现。

 为了方便差分方程的推导,可以把离散传递函数写成表达式:

R(z)=\frac{az^{2}-a}{z^{2}-bz+c}=\frac{y(z)}{x(z)}

 分子分母同时除以z^2:

\frac{a-az^{-2}}{1-bz^{-1}+cz^{-2}}=\frac{y(z)}{x(z)}

 交叉相乘提出y(z):

y(z)=bz^{-1}y(z)-cz^{-2}y(z)+ax(z)-az^{-2}x(z)

 把上式写成差分方程:

y(k)=by(k-1)-cy(k-2)+ax(k)-ax(k-2)

 根据差分方程建模得到:

 不管用哪种形式作为控制器,同样的输入经过控制器后输出都一样,证明不管是传递函数还是差分方程还是积分组合的方式模型搭建都没有错误。

系统仿真效果

最后通过一个单相逆变器系统仿真验证

 给定电压和反馈电压重合

 输出的交流电压和电流

总结

通过一个单相逆变器,引入了PR控制器,从仿真的角度来讲不管是s域传递函数还是Z域传递函数仿真都没有问题,实际工程中程序是在单片机里执行,需要把PR控制器离散化,对于手写代码和基于模型的自动代码生成来讲可以考虑差分方程或者积分组合的形式,不考虑去饱和直接写离散传递函数也可以。

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

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

相关文章

深入探索PHP中的多维数组:构建复杂数据结构的艺术

深入探索PHP中的多维数组:构建复杂数据结构的艺术 引言 在PHP开发中,数组(Array)是一种非常重要的数据类型,它允许我们存储多个值,并且这些值可以是不同类型的。而多维数组(Multidimensional …

BeanUtils拷贝List数据

工具类: package com.ssdl.baize.pub;import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; import java.util.function.Supplier; import org.springframework.beans.BeanUtils;public class BeanConvertUti…

【BUUCTF-PWN】10-bjdctf_2020_babystack

简单的栈溢出,ret2text 64位,开启了NX保护 执行效果: main函数: 因为读入的字符长度可以由用户输入的第一个参数值决定,因此read函数存在栈溢出 覆盖距离为0x108 存在后门函数: 后门函数地址0x4…

AIGC | 在机器学习工作站安装NVIDIA cuDNN 深度学习库

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] 0x03.初识与安装 cuDNN 深度学习库 什么是cuDNN? cuDNN(CUDA Deep Neural Network library)是由英伟达(NVIDIA)开发的深度学习库,专门用…

昇思学习打卡-5-基于Mindspore实现BERT对话情绪识别

本章节学习一个基本实践–基于Mindspore实现BERT对话情绪识别 自然语言处理任务的应用很广泛,如预训练语言模型例如问答、自然语言推理、命名实体识别与文本分类、搜索引擎优化、机器翻译、语音识别与合成、情感分析、聊天机器人与虚拟助手、文本摘要与生成、信息抽…

LLMs之gpt_academic:gpt_academic的简介、安装和使用方法、案例应用之详细攻略

LLMs之gpt_academic:gpt_academic的简介、安装和使用方法、案例应用之详细攻略 目录 gpt_academic的简介 1、版本更新历史 版本: 1、新增功能及其描述 新界面(修改config.py中的LAYOUT选项即可实现“左右布局”和“上下布局”的切换) 所…

Linux shell编程学习笔记62: top命令 linux下的任务管理器

0 前言 top命令是Unix 和 Linux下常用的性能分析工具,提供了一个动态的、交互式的实时视图,显示系统的整体性能信息,以及正在运行的进程的相关信息,包括各个进程的资源占用状况,类似于Windows的任务管理器。 1 top命令…

鸿蒙:1.入门

概述 简介 鸿蒙操作系统(HarmonyOS)是华为公司发布的一款智能终端系统,是基于微内核的面向全场景的分布式操作系统。它致力于提供更加安全、高效、低延迟、低功耗的操作体验,可通过技术手段对应用程序和设备进行智能协同&#xf…

mac鼠标键盘共享:ShareMouse for Mac 激活版

hareMouse 是一款 Windows 和 macOS 操作系统上的共享和切换鼠标和键盘的实用工具。这款软件允许用户在多台计算机之间无缝地共享鼠标和键盘,使得在不同设备之间进行工作和操作变得更加便捷。占用资源少: ShareMouse 设计轻量,占用系统资源较…

JVM原理(十五):JVM虚拟机静态分配与动态分配

1. 分派 本节讲解的分派调用过程将会揭示多态性特征的一-些最基本的体现,如“重载”和“重写”在Java虚拟机之中是如何实现的。 1.1. 静态分派 案例: 我们先来看一段代码: Human mannew Man(); 我们把上面代码中的“Human"称为变量的“静态类型…

alibabacloud学习笔记10

讲解微服务链路追踪系统的作用 讲解什么Sleuth链路追踪系统 注释掉我们的网关过滤器。 注释掉断言。 网关服务,视频服务,订单服务,我们都给这段依赖添加进来。 调用一个请求。 我们可以看到控制台上会有输出。 讲解zipkin介绍和部署实战 访问…

Vite: 实现 no-bundle 开发服务 (2)

概述 基于前文 Vite: 实现 no-bundle 开发服务 (1) 我们基于下面的导图继续实现 no-bundle 构建服务 接下来我们需要完成如下的模块: CSS 编译插件静态资源加载插件模块依赖图开发,并在 transform 中间件中接入HMR 服务端代码开发HMR 客户端代码开发 CSS 编译插件…

泰国内部安全行动司令部数据泄露

BreachForums 论坛的一名成员宣布发生一起重大数据泄露事件,涉及泰国内部安全行动司令部 (ISOC),该机构被称为泰国皇家武装部队的政治部门。 目前,我们无法准确确认此次泄露的真实性,因为该组织尚未在其网站上发布有关该事件的任…

数据库管理-第217期 Oracle的高可用-02(20240704)

数据库管理217期 2024-07-04 数据库管理-第217期 Oracle的高可用-02(20240704)1 GDS简介2 GDS架构2.1 全局数据服务池2.2 全局数据服务域2.3 全局服务管理2.4 全局数据服务目录2.5 Oracle通知服务 3 GDS简图3.1 负载均衡3.2 只读服务失败转移3.3 多主复制…

项目基础知识

1.JDBC编程和MySQL数据库 数据库的连接(以前写qq项目时的代码) package com.wu.Util; import java.sql.*; public class JDBCUtil {private static JDBCUtil jdbcUtil null;private JDBCUtil() {}public static JDBCUtil getJdbcUtil() {if (jdbcUtil…

剧本杀小程序:助力商家发展,提高游戏体验

近几年,剧本杀游戏已经成为了当下年轻人娱乐的游戏社交方式。与其他游戏相比,剧本杀游戏具有强大的社交性,玩家在游戏中既可以推理玩游戏,也可以与其他玩家交流互动,提高玩家的游戏体验感。 随着互联网的发展&#xf…

Vue通过Key管理状态

Vue通过Key管理状态 Vue 默认按照“就地更新”的策略来更新,通过 v-for 渲染的元素列表。当数据项的顺序改变时,Vue 不会随之移动 DOM 元素的顺序,而是就地更新每个元素,确保它们在原本指定的索引位置上渲染。为了给 Vue 一个提示…

VIO(Virtual_Input_Output) IP 使用笔记

VIO(Virtual Input/Output)IP 核,即虚拟输入输出 IP,可以通过调试界面模拟 IO 的变化,这可以在板子没有按键等外设、或外设不足的情况下,来模拟外部输入。然而网上关于 VIO 的教程都说的不是很清楚&#xf…

html高级篇

1.2D转换 转换(transform)你可以简单理解为变形 移动:translate 旋转:rotate 缩放:sCale 移动:translate 1.移动具体值 /* 移动盒子的位置: 定位 盒子的外边距 2d转换移动 */div {width…

【python】OpenCV—Nighttime Low Illumination Image Enhancement

文章目录 1 背景介绍2 代码实现3 原理分析4 效果展示5 附录np.ndindexnumpy.ravelnumpy.argsortcv2.detailEnhancecv2.edgePreservingFilter 1 背景介绍 学习参考来自:OpenCV基础(24)改善夜间图像的照明 源码: 链接&#xff1a…