PR控制以及使用PR控制用于单相离/并网逆变器

news2025/1/15 23:32:16

文章目录

  • 前言
  • 基本知识
  • 实际使用
    • 单相离网逆变器
    • 单相并网逆变器
  • PR控制器离散化
    • 基本知识
  • DSP实现
  • 总结

前言

最近想学习一下并网逆变器,需要用到PR控制,全网找遍了许多学习资料,终于掌握的差不多了,在此做个记录,以及个人对PR(Proportional Resonant)控制的理解。

基本知识

PR控制的传递函数形式为
H ( s ) = K p + 2 K r s s 2 + ω o 2 H(s)=Kp+\frac{2Krs}{s^2+\omega_o^2} H(s)=Kp+s2+ωo22Krs
利用matlab绘制一下该传递函数的幅频响应,是在谐振频率 ω = ω o \omega=\omega_o ω=ωo的频率点增益无穷大,且没有相位滞后。
在这里插入图片描述

根据PR控制器上述的特性,我们可以设计谐振频率等于电网的角频率,使电网基波信息增益无穷大而其他频段增益下,从而应用在交流电路的控制中。

至于为什么不用传统的PID控制,其原因是PID控制器对于交流信号的控制性能差,对直流信号的跟踪性能好。因此DCDC变换中多采用PID控制,而在交流中也可以通过DQ坐标变换,将需要控制的交流信号变换为直流信号,再用直流控制器PID就可以实现很好的控制效果了。

总而言之,PID是直流信号控制器;PR是交流控制器

实际使用

实际应用中,由于电网频率不会严格的等于50Hz,难免存在波动,因此前文提到的PR控制器在电网频率稍微偏离50Hz,性能大幅变差。为增加控制的鲁棒性,增加截止频率 ω c \omega_c ωc,改写传递函数为
H ( s ) = K p + 2 K r ω c s s 2 + 2 K r w c s + ω o 2 H(s)=Kp+\frac{2Kr\omega_cs}{s^2+2Krw_cs+\omega_o^2} H(s)=Kp+s2+2Krwcs+ωo22Krωcs

修改后的PR控制器,亦称为准比例谐振控制Quasis Proportional Resonant,在谐振频率附近的小范围内,仍然具有高增益,因此能适用电网频率波动的情况。

至此,我们发现应用准谐振控制时需要整定3个参数,Kp,Kr,wc。先回顾一下PID的三个参数。

  • P因子,决定响应速度;
  • I因子,决定稳态误差;
  • D因子,决定抗扰能力。

而通常在电力电子中多用PI控制,电力传动有PI也有PD。PI控制电机无静差调速,可用于舵机消除抖动。

为了观察准比例谐振控制器中三个参数的影响,同样用MATLAB绘制bode图,控制变量法来看。
在这里插入图片描述

figure()
subplot(1,3,1)
Kp=1;Kr=100;wc=0.5*2*pi;wo=100*pi;PRs1=Kp+tf([2*Kr*wc,0],[1 2*wc wo*wo]);bode(PRs1);hold on;
Kp=10;Kr=100;wc=0.5*2*pi;wo=100*pi;PRs1=Kp+tf([2*Kr*wc,0],[1 2*wc wo*wo]);bode(PRs1);hold on;
Kp=100;Kr=100;wc=0.5*2*pi;wo=100*pi;PRs1=Kp+tf([2*Kr*wc,0],[1 2*wc wo*wo]);bode(PRs1);hold on;
legend('KP=1','KP=10','KP=100');title('变KP')
subplot(1,3,2)
Kp=1;Kr=10;wc=0.5*2*pi;wo=100*pi;PRs1=Kp+tf([2*Kr*wc,0],[1 2*wc wo*wo]);bode(PRs1);hold on;
Kp=1;Kr=100;wc=0.5*2*pi;wo=100*pi;PRs1=Kp+tf([2*Kr*wc,0],[1 2*wc wo*wo]);bode(PRs1);hold on;
Kp=1;Kr=1000;wc=0.5*2*pi;wo=100*pi;PRs1=Kp+tf([2*Kr*wc,0],[1 2*wc wo*wo]);bode(PRs1);hold on;
legend('Kr=10','Kr=100','Kr=1000');title('变Kr')
subplot(1,3,3)
Kp=1;Kr=100;wc=0.1*2*pi;wo=100*pi;PRs1=Kp+tf([2*Kr*wc,0],[1 2*wc wo*wo]);bode(PRs1);hold on;
Kp=1;Kr=100;wc=0.5*2*pi;wo=100*pi;PRs1=Kp+tf([2*Kr*wc,0],[1 2*wc wo*wo]);bode(PRs1);hold on;
Kp=1;Kr=100;wc=1*2*pi;wo=100*pi;PRs1=Kp+tf([2*Kr*wc,0],[1 2*wc wo*wo]);bode(PRs1);hold on;
legend('wc=0.1','wc=0.5','wc=1.0');title('变wc')

由bode图可知,Kp越大,其他低频段和高频段的增益越大;Kr越大,谐振点的增益越大,但附近周围频带的增益也相应有所增大;wc越大,周围频带的增益也相应有所增大。

而参数wc可以任意取 2 π × 0.1 2\pi\times 0.1 2π×0.1 2 π × 0.5 2\pi\times 0.5 2π×0.5 2 π × 1 2\pi\times 1 2π×1,真正需要整定的参数也就只有Kp和Kr了。

单相离网逆变器

离网逆变器是把DC逆变出来的AC电直接使用,输出接负载控制对象是输出电压,力争低THD,幅值可控。

控制结构框图
在这里插入图片描述
资源链接
基于PR控制的单相离网逆变器

单相并网逆变器

并网逆变器是把DC逆变出来的AC电送入另一个交流系统,输出端接电网,控制对象是输出电流,力争低THD,幅值可控,且与电网电压同相位。

控制结构框图在这里插入图片描述
资源链接

基于PR控制的单相并网逆变器控制

PR控制器离散化

基本知识

目前而言,同一种控制方式有3种表达形式

  • 时域,有连续时域和离散时域之分
  • 复频域,又称s域
  • z域

在大学之前的学习一直都是时域下的,也是最简单最容易理解的。大学期间接触的拉氏变换是由连续时域到复频域的变换z变换是离散时域到z域的变换

在连续时域下,描述不同时间点的方程称为微分方程
在离散时域下,描述不同时间点的方程称为差分方程

本人目前尚未学习到s域和z域之间的转换,好在有众多前人的研究基础。
在这里插入图片描述
方法很多,选哪一个种呢?在TI写的数字锁相环算法库中有说明文档详细推导各个参数的计算,其中就涉及到连续传递函数离散化的问题,TI采用的Tustin。简单期间我们也选Tustin方法了。

MATLAB也提供了传递函数离散化的内置函数c2d。

Ts=1/25000;
Kp=1;
Kr=100;
wc=0.5*2*pi;
wo=100*pi;
c=Kp+tf([2*Kr*wc,0],[1 2*wc wo*wo]);
d=c2d(c,Ts,'tustin');

但是好像不能用MALTAB计算出准谐振的离散化结果,索性直接带入化简得了。

过程略,结果如下。
在这里插入图片描述
在当初学习的时候一直在思考离散化里面的T到底是什么。我的理解就是,相邻两次以离散化的方式实现连续传递函数的时间间隔,即T。在DSP中的控制一般写在中断中,那么对应的T即中断时间间隔。而在Simulink仿真中,Powergui和模型设置这两个地方都能设置步长,到底哪个才是真正的呢?目前没有想明白,若想要验证的话设置为相同的步长即可。

当时学习的时候也有一个疑问,为什么在学习PID控制器的时候没有所谓的离散化步骤。怎么就直接把PID的C语言实现给写出来了呢?是因为PID的连续时域表达式简单,很容易就能推导出离散时域表达式,用的是微积分的思想。而在学习PR控制器的时候,是先有他的传递函数,即s域表达式,可以直接从s域到z域变换。

那实现数字一阶滤波器的时候呢?也是先根据模拟RC电路推导传递函数,再变到连续时域,离散时域。那稍微复杂一点的二阶甚至高阶滤波器呢,就是直接从s域到z域到离散时域的。

总之,当我们用数字方式实现控制时,根本目的是得到他的离散时域表达式

DSP实现

有了Z域下的表达式,可以直接得到离散时域表达式,即差分方程。

以二阶为例, Y ( z ) X ( z ) = A 0 + A 1 z − 1 + A 2 z − 2 B 0 + B 1 z − 1 + B 2 z − 2 \frac{Y(z)}{X(z)}=\frac{A_0+A_1z^{-1}+A_2z^{-2}}{B_0+B_1z^{-1}+B_2z^{-2}} X(z)Y(z)=B0+B1z1+B2z2A0+A1z1+A2z2
则离散时域表达式为 B 0 y [ n ] + B 1 y [ n − 1 ] + B 2 y [ n − 2 ] = A 0 x [ n ] + A 1 x [ n − 1 ] + A 2 x [ n − 2 ] B_0y[n]+B_1y[n-1]+B_2y[n-2]=A_0x[n]+A_1x[n-1]+A_2x[n-2] B0y[n]+B1y[n1]+B2y[n2]=A0x[n]+A1x[n1]+A2x[n2]

因此可以根据前面推导的PR控制器的在Z域下的通用表达式,写出它的通用离散时域表达式。

/*
 * myPR.c
 *
 *  Created on: 2023年4月25日
 *      Author: EnglishName
 */

#include <myAPP/myPR/myPR.h>

PR pr_v_ac = { 0 };
PR pr_i_ac = { 0 };

void PR_init(PR *p,float32 Kp,float32 Kr,float32 Ts,float32 wc, float32 wo)
{
    float temp = 0;
    p->Ts=Ts;
    p->Kp=Kp;
    p->Kr=Kr;
    p->wc=wc;
    p->wo=wo;
    temp = 4 / p->Ts / p->Ts + 4 * p->wc / p->Ts + p->wo * p->wo;

    p->B0 = (4 * p->Kp / p->Ts / p->Ts + 4 * p->wc * (p->Kp + p->Kr) / p->Ts
            + p->Kp * p->wo * p->wo) / temp;
    p->B1 = (-8 * p->Kp / p->Ts / p->Ts + 2 * p->Kp * p->wo * p->wo) / temp;
    p->B2 = (4 * p->Kp / p->Ts / p->Ts - 4 * p->wc / p->Ts * (p->Kp + p->Kr)
            + p->Kp * p->wo * p->wo) / temp;
    p->A1 = (-8 / p->Ts / p->Ts + 2 * p->wo * p->wo) / temp;
    p->A2 = (4 / p->Ts / p->Ts - 4 * p->wc / p->Ts + p->wo * p->wo) / temp;
    /*PRpr;
     * 差分方程
     * y[n]+A1[n-1]+A2[n-2]=B0x[n]+B1x[n-1]+B2[n-2]
     */
}

void PR_calc(PR *p)
{
    p->vo = -p->A1 * p->vo_1 - p->A2 * p->vo_2 + p->B0 * p->vi + p->B1 * p->vi_1
            + p->B2 * p->vi_2;

    // update and store
    p->vo_2=p->vo_1;
    p->vo_1 = p->vo;
    p->vi_2 = p->vi_1;
    p->vi_1 = p->vi;
}

/*
 * myPR.h
 *
 *  Created on: 2023年4月25日
 *      Author: EnglishName
 */

#ifndef MYAPP_MYPR_MYPR_H_
#define MYAPP_MYPR_MYPR_H_

#include "F28x_Project.h"

typedef struct
{
    float Kp;
    float Kr;
    float wo;
    float wc;
    float Ts;
    float A0, A1, A2, B0, B1, B2;
    float vo, vo_1, vo_2;
    float vi, vi_1, vi_2;
} PR;

extern PR pr_v_ac;
extern PR pr_i_ac;

void PR_init(PR *p, float32 Kp, float32 Kr, float32 Ts, float32 wc, float32 wo);
void PR_calc(PR *p);

#endif /* MYAPP_MYPR_MYPR_H_ */

总结

在去年7月准备电赛的时候偶然看到有几篇讲解数字滤波器,第一次接触传递函数离散化,深刻被数字时代的数字方式折服,改改代码,就可以实现不同的截至频率,甚至不同阶数,而模拟方式还要改元器件。当时就感觉这玩意太他妈牛逼了,很想学懂它,奈何学不会呀。后面全身心做电赛,就忘了这事儿。

直至最近学习PR控制,当初的感觉又回来了,一股劲儿吃下来了。顺带也给自己把一阶、二阶数字滤波器的库给写好了。

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

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

相关文章

【每日一题】23年4月

文章目录 C 技术点多边三角形剖分的最低得分&#xff08;dp思路&#xff0c;选不选问题&#xff09;移动石子到连续&#xff08;思路&#xff09;1027. 最长等差数列(动态规划)1105. 填充书架&#xff08;动态规划&#xff09;1031 两个非重叠子数组的最大和1163.按字典序排在最…

【Java 】从源码全面解析Java 线程池

文章目录 一、引言二、使用三、源码1、初始化1.1 拒绝策略1.1.1 AbortPolicy1.1.2 CallerRunsPolicy1.1.3 DiscardOldestPolicy1.1.4 DiscardPolicy1.1.5 自定义拒绝策略1.2 其余变量 2、线程池的execute方法3、线程池的addWorker方法3.1 校验3.2 添加线程 4、线程池的 worker …

PostgreSQL 基础知识:psql 提示和技巧

对于积极使用和连接到 PostgreSQL 数据库的任何开发人员或 DBA 来说&#xff0c;能够访问psql命令行工具是必不可少的。在我们的第一篇文章中&#xff0c;我们讨论了 psql的简要历史&#xff0c;并演示了如何在您选择的平台上安装它并连接到 PostgreSQL 数据库。 在本文中&…

使用腾讯云快速完成网站备案的详细过程

最近总是被备案弄得血压飙升&#xff0c;明明是一件很简单的事情&#xff0c;不知道大家为什么搞得那么复杂&#xff0c;首先了解下为什么要备案&#xff0c;根据国务院令第292号《互联网信息服务管理办法》和 《非经营性互联网信息服务备案管理办法》规定&#xff0c;国家对经…

【TCP四次挥手】

文章目录 TCP 四次挥手过程是怎样的&#xff1f;为什么挥手需要四次&#xff1f;第一次挥手丢失了&#xff0c;会发生什么&#xff1f;第二次挥手丢失了&#xff0c;会发生什么&#xff1f;第三次挥手丢失了&#xff0c;会发生什么&#xff1f;第四次挥手丢失了&#xff0c;会发…

Lecture 13(Extra Material):Q-Learning

目录 Introduction of Q-Learning Tips of Q-Learning Double DQN Dueling DQN Prioritized Reply Multi-step Noisy Net Distributional Q-function Rainbow Q-Learning for Continuous Actions Introduction of Q-Learning Critic: The output values of a critic…

为生信写的Python简明教程 | 视频3

开源生信 Python教程 生信专用简明 Python 文字和视频教程 源码在&#xff1a;https://github.com/Tong-Chen/Bioinfo_course_python 目录 背景介绍 编程开篇为什么学习Python如何安装Python如何运行Python命令和脚本使用什么编辑器写Python脚本Python程序事例Python基本语法 数…

PySpark基础入门(7):Spark SQL

概述 SparkSQL和Hive的异同 Hive和Spark 均是&#xff1a;“分布式SQL计算引擎”SparkSQL使用内存计算&#xff0c;而Hive使用磁盘迭代&#xff0c;所以SparkSQL性能较好二者都可以运行在YARN之上SparkSQL无元数据管理&#xff0c;但可以和hive集成&#xff0c;集成之后可以借…

极光笔记 | 极光推出“运营增长”解决方案,开启企业增长新引擎

摘要&#xff1a; 移动互联网流量红利见底&#xff0c;营销获客面临更多挑战 随着移动互联网流量红利见顶&#xff0c;越来越多的企业客户发现获取新客户的难度直线上升&#xff0c;获客成本持续攀高。 传统的移动互联网营销以PUSH为代表&#xff0c;采用简单粗暴的方式给用户…

PaddleVideo 简介以及文件目录详解

简介特性许可证书 PaddleVideo 文件目录总述applications 文件夹详述configs 文件夹详述docs 文件夹详述paddlevideo 文件夹详述utils 文件夹tasks 文件夹loader 文件夹modeling 文件夹solver 文件夹metrics 文件夹 简介 PaddleVideo 旨在打造一套丰富、领先且实用的 Video 工…

【阿里云】秒懂云通信

目录 一、秒懂云通信-第一回听什么? 二、短信的使用场景 1. 短信的三种类型&#xff1a;短信通知、验证、会员营销 三、短信平台的选择 1、看成功率 2、看价格 3、看体验 四、秒懂云通信 五、如何使用 Step 1&#xff1a;业务入口 Step 2&#xff1a;注册账号 Step…

云安全技术——Snort安装与配置

目录 一、Snort简介 二、安装Centos7 Minimal系统 三、基本环境配置 四、安装Snort 五、下载规则 六、配置Snort 七、测试Snort 一、Snort简介 Snort是一个开源的网络入侵检测系统&#xff0c;主要用于监控网络数据包并检测可能的攻击行为。它可以实时分析网络流量&…

HJ37 统计每个月兔子的总数

HJ37 统计每个月兔子的总数 描述示例解题思路以及代码分析解法1解法2 描述 描述 有一种兔子&#xff0c;从出生后第3个月起每个月都生一只兔子&#xff0c;小兔子长到第三个月后每个月又生一只兔子。 例子&#xff1a;假设一只兔子第3个月出生&#xff0c;那么它第5个月开始会…

ASEMI代理ADUM3211TRZ-RL7原装ADI车规级ADUM3211TRZ-RL7

编辑&#xff1a;ll ASEMI代理ADUM3211TRZ-RL7原装ADI车规级ADUM3211TRZ-RL7 型号&#xff1a;ADUM3211TRZ-RL7 品牌&#xff1a;ADI/亚德诺 封装&#xff1a;SOIC-8 批号&#xff1a;2023 引脚数量&#xff1a;8 工作温度&#xff1a;-40C~125C 安装类型&#xff1a;表…

操作系统原理 —— 操作系统什么时候会发生进程的调度(十二)

操作系统什么时候需要进程调度&#xff1f; 进程调度的层次中&#xff0c;有一个低级调度&#xff0c;就是按照某种算法从就绪队列中选择一个进程为其分配 CPU。 那操作系统会在什么时候触发进程调度呢&#xff1f; 在这里一共可以分为两大类&#xff1a; 当前运行的进程主动…

04-微服务部署2023系列-centos安装gitlab

目的:为了将来的devops快速部署搭建自己的代码库,保证速度和私密性 前面01-03小节: 完成基本的服务器环境 centos_nginx_java_docker; 这个基础环境是将来集群中每台服务器的基本, 可以先打一个镜像备份。 阿里云的镜像备份比较简单。以后搭建新服务器时,以这个为基础,安…

JUC并发包详解AQS同步队列

一、AQS介绍 在JUC并发包中&#xff0c;AQS为其最关键的作用&#xff0c;全称为abstractQueuedSynchroinzed同步器&#xff0c;为信号量semaphore、同步锁的基础抽象类。 其中内部主要有二大块 state 共享资源&#xff0c;通过并发操作state修改改值为1&#xff0c;如果修改成…

《Linux 内核设计与实现》09. 内核同步介绍

共享资源之所以要防止并发访问&#xff0c;是因为如果多个执行线程同时访问和操作数据&#xff0c;就有可能发生各线程之间相互覆盖共享数据的情况&#xff0c;从而造成被访问的数据不一致状态。 临界区和竞争条件 临界区&#xff1a;访问和操作共享数据的代码段。原子操作&a…

键控流水灯

项目文件 文件 关于项目的内容知识点可以见专栏单片机原理及应用 的第四章 IO口编写 在电路图的基础上&#xff0c;编写可键控的流水灯程序。要求实现的功能为&#xff0c;K1是总开关,当K1首次按下时&#xff0c;流水灯由下往上流动;当K2按下时停止流动&#xff0c;且全部灯灭…

ASK,FSK和PSK

一、ASK&#xff0c;FSK和PSK 数字信号只有有限个离散值&#xff0c;使用数字信号对载波进行调制的方式称为键控(Keying),分为幅度键控&#xff08;ASK)、频移键控&#xff08;FSK)和相移键控&#xff08;PSK)。 幅度键控可以通过乘法器和开关电路来实现&#xff0c;在数字信…