比例谐振(PR)控制器的学习过程记录

2023-11-07

目录

0、前言

1、PR控制器和PI控制器对比

1.1 传递函数表达式对比

1.2 波特图对比

2、离散化预备知识

2.1 离散化表达式

2.2 离散化方法

2.3 离散化练习题

3. 使用Matlab离散PR控制器

4、逆变器仿真模型中使用PR闭环控制器


 

0、前言

在一个闭环控制系统中,可分为输入参考值、闭环控制器、执行机构、输出参数,反馈系数,这几个部分。

设计一款控制器,可以让系统的输出参数跟踪输入参考值,达到了控制的目的。在直流控制系统中,常用的控制器就是比例微分积分(Proportion Integration Differentiation,PID)控制器了。然而,在交流系统中,PID控制器由于对高频信号的跟踪性能较差,并不能满足设计要求。而PR控制器,对特定频率信号的跟踪效果是良好的。

本文首先对PR控制器和PI控制器进行对比。然后讨论了比例谐振(Proportion, Resonant, PR)控制器的数字化实现。笔者目前在一款DCDC电路中使用过PI控制器,同时PI控制器的资料比较好找。然而PR控制器只在软件仿真中使用过,并没有在实际项目中使用。

希望我和读者们,都能从本文中获益,谢谢。

 

1、PR控制器和PI控制器对比

1.1 传递函数表达式对比

比例积分控制器的传递函数如下:

G_{PI}\left ( s \right )=K_p + \frac{K_i}{s}

比例谐振控制器的传递函数如下:

G_{PR-ideal}\left ( s \right )=K_p + \frac{K_rs}{s^{2}+\omega _o^{2}}

本文称这个PR控制器为理想的PR控制器。

以上的G_{PR-ideal}这个控制器,在下文的波特图上可见,只对单一的频率起作用。但实际上,例如逆变器,参考波形可能在频率上有正负1Hz的变化,或者由于测量采样的不确定性,因此在运用中,会用以下的变形,替代上面的Gpr-ideal。

G_{PR}\left ( s \right )=K_p + \frac{2K_r\omega _cs}{s^{2}+2\omega _cs+\omega _o^{2}}

本文称这个PR控制器为实际的PR控制器。

1.2 波特图对比

下图是当Kp分别取为1、10、100,Ki=10时PI控制器的波特图(蓝色是Kp=1,绿色是Kp=10,红色是Kp=100)。

附上实现代码:

% this is Matlab code:
Ki=10;
Kp=1;
PIs1=tf([Kp,Ki],[1,0])
Kp=10;
PIs2=tf([Kp,Ki],[1,0])
Kp=100;
PIs3=tf([Kp,Ki],[1,0])
bode(PIs1,PIs2,PIs3)
title('Bode Diagram of PI: Kp=1,10,100. Ki=10')
grid on

下图是当Kp=1,Ki分别取为1、10、100时PI控制器的波特图(蓝色是Ki=1,绿色是Ki=10,红色是Ki=100)。

附上实现代码:

Kp=1
Ki=1
PIs1=tf([Kp,Ki],[1,0])
Ki=10
PIs2=tf([Kp,Ki],[1,0])
Ki=100
PIs3=tf([Kp,Ki],[1,0])
figure(2)
bode(PIs1,PIs2,PIs3)
grid on
title('Bode Diagram of PI: Kp=1. Ki=1,10,100')

可以看到,PI控制器对高频信号的增益会较低,而对低频信号会有较大的放大作用。假如使用PI控制器对50Hz及以上(角频率314rad/sec)的正弦波进行跟踪,系统的跟踪特性会较差。而且会把低频噪声放大。

 

 

下图是当Kp分别取为1、10、100,Kr=1时理想的PR控制器的波特图(蓝色是Kp=1,绿色是Kp=10,红色是Kp=100)。

附实现代码

Kr=1;
Kp=1;
PR_ideal1 = Kp + tf([Kr,0],[1,0,wo^2])
Kp=10;
PR_ideal2 = Kp + tf([Kr,0],[1,0,wo^2])
Kp=100;
PR_ideal3 = Kp + tf([Kr,0],[1,0,wo^2])
bode(PR_ideal1,PR_ideal2,PR_ideal3)
grid on
title('Bode Diagram of ideal PR: Kp = 1,10,100. Kr = 1')

 

下图是当Kp=1,Kr分别取为1、10、100时理想的PR控制器的波特图(蓝色是Kr=1,绿色是Kr=10,红色是Kr=100)。

附实现代码

Kp=1;
Kr=1;
PR_ideal1 = Kp + tf([Kr,0],[1,0,wo^2])
Kr=10;
PR_ideal2 = Kp + tf([Kr,0],[1,0,wo^2])
Kr=100;
PR_ideal3 = Kp + tf([Kr,0],[1,0,wo^2])
figure(4)
bode(PR_ideal1,PR_ideal2,PR_ideal3)
grid on
title('Bode Diagram of ideal PR: Kp = 1. Kr = 1,10,100')

上面理想PR的波特图,可以看到就算调整PR的参数,波形也没什么大的变化。在实际使用中,可能进行实时调参的。图像变化这么小,跟踪效果也不会好。

接下来看看实际使用的PR控制器的波特图。

下图是当Kp分别取为1、10、100,Kr=1时实际的PR控制器的波特图(蓝色是Kp=1,绿色是Kp=10,红色是Kp=100)。

附实现代码

Kr=1;
Kp=1;
PR1=Kp+tf([2*Kr*wc,0],[1,2*wc,wo^2])
Kp=10;
PR2=Kp+tf([2*Kr*wc,0],[1,2*wc,wo^2])
Kp=100;
PR3=Kp+tf([2*Kr*wc,0],[1,2*wc,wo^2])
bode(PR1,PR2,PR3)
grid on
title('Bode Diagram of actual PR: Kp = 1,10,100. Kr = 1')

下图是当Kp=1,Kr分别取为1、10、100时实际的PR控制器的波特图(蓝色是Kr=1,绿色是Kr=10,红色是Kr=100)。

附实现代码

Kp=1;
Kr=1;
PR1=Kp+tf([2*Kr*wc,0],[1,2*wc,wo^2])
Kr=10;
PR2=Kp+tf([2*Kr*wc,0],[1,2*wc,wo^2])
Kr=100;
PR3=Kp+tf([2*Kr*wc,0],[1,2*wc,wo^2])
bode(PR1,PR2,PR3)
grid on
title('Bode Diagram of actual PR: Kp = 1. Kr = 1,10,100')

PI和PR的Kp作用类似,都是增大开环增益,增加控制精度。

Ki和Kr作用类似:降低系统稳态误差。

 

2、离散化预备知识

目的是对PR控制器的传递函数进行离散化。使其可以在数字控制器上编程实现。在这过程之前,要复习相关知识。同时便于检查离散化过程有无错误。

2.1 离散化表达式

传递函数离散化后,函数中消掉了拉普拉斯算子“s”,同时出现了“z”。有一个公式需要认识。

\frac{Y\left ( z \right )}{U\left ( z \right )}=\frac{a_0+a_1z^{-1}+a_2z^{-2}+...+a_nz^{-n}}{b_0+b_1z^{-1}+b_2z^{-2}+...+b_nz^{-n}}

以上公式,转化为单片机或DSP可以执行的命令为:

b_0y\left ( k \right )+b_1y\left ( k-1 \right )+b_2y\left ( k-2 \right )+...+b_ny\left ( k-n \right )=a_0u\left ( k \right )+a_1u\left ( k-1 \right )+a_2u\left ( k-2 \right )+...+a_nu\left ( k-n \right )

2.2 离散化方法

离散化方法一览表[来自参考文献1]
Zero-order hold X\left ( z \right )=\left ( 1-z^{-1} \right )Z\left \{ L^{-1}\left \{ \frac{X\left ( s \right )}{s} \right \} \right \}
First-order hold X\left ( z \right )=\frac{\left ( z-1 \right )^2}{zT_s} Z\left \{ L^{-1}\left \{ \frac{X\left ( s \right )}{s^2} \right \} \right \}
Forward Euler s=\frac{z-1}{T_s}
Backward Euler s=\frac{z-1}{zT_s}
Trapezoid(Tustin) s=\frac{2}{T_s}\frac{z-1}{z+1}
Tustin with pre-warping s=\frac{\omega _0}{tan\left ( \frac{\omega _0T_s}{2} \right )}\frac{z-1}{z+1}
Zero-pole matching z=e^{sT_s}
Impulse invariant X\left ( z \right )=Z\left \{ L^{-1}\left \{ X\left ( s \right ) \right \} \right \}

看起来比较简单的方法是Forward Euler、Backward Euler、Trapezoid(Tustin)这三种了。直接把公式代入,用z消掉s就好了。

2.3 离散化练习题

用Trapezoid(Tustin)方法离散化PID控制器。

\frac{Y\left ( s \right )}{U\left ( s \right )}=K_p+\frac{K_i}{s}+K_ds

s=\frac{2}{T_s}\frac{z-1}{z+1}代入上式,得到

\frac{Y\left ( s \right )}{U\left ( s \right )}=K_p+\frac{K_i}{\frac{2}{T_s}\frac{z-1}{z+1}}+K_d\frac{2}{T_s}\frac{z-1}{z+1}

化简过程略,得到:

\frac{Y\left ( z \right )}{U\left ( z \right )}= \frac{\frac{\left ( 2T_sK_p+T_s^2K_i+4K_d \right )}{2T_s}+\frac{\left ( 2T_s^2K_i-8K_d \right )}{2T_s}z^{-1}+\frac{\left ( -2T_sK_p+T_s^2K_i+4K_d \right )}{2T_s}z^{-2}}{1-z^{-2}}

代入Kp=1;Ki=2;Kd=3;Ts=1/1000;可得到

\frac{Y\left ( z \right )}{U\left ( z \right )}= \frac{6001-12000z^{-1}+5999z^{-2}}{1-z^{-2}}

在Matlab中验证结果:

 Kp=1;Ki=2;Kd=3;Ts=1e-3;
 PID=tf([Kd,Kp,Ki],[1,0])
 c2d(PID,1e-3,'tustin')

可得到:

Transfer function:
6001 z^2 - 1.2e004 z + 5999
---------------------------
          z^2 - 1
 
Sampling time: 0.001

和计算结果一致。

同时Matlab的c2d()函数总共支持五种离散方法。


    SYSD = C2D(SYSC,TS,METHOD) computes a discrete-time model SYSD with 
    sampling time TS that approximates the continuous-time model SYSC.
    The string METHOD selects the discretization method among the following:
       'zoh'       Zero-order hold on the inputs
       'foh'       Linear interpolation of inputs
       'impulse'   Impulse-invariant discretization
       'tustin'    Bilinear (Tustin) approximation.
       'matched'   Matched pole-zero method (for SISO systems only).
    The default is 'zoh' when METHOD is omitted.

 

3. 使用Matlab离散PR控制器

Kp=1;
Kr=10;
wc=2*pi*5;
wo=2*pi*50;
PRs=Kp+tf([2*Kr*wc,0],[1,2*wc,wo^2])
PRz = c2d(PRs,1e-3,'tustin')

命令行输出:

Transfer function:
1.297 z^2 - 1.847 z + 0.643
---------------------------
  z^2 - 1.847 z + 0.9405
 
Sampling time: 0.001

 

可得到,离散化后,数字实现的C语言为:

y_k - 1.847*y_k1 + 0.9405*y_k2 = 1.297*u_k - 1.847*u_k1 +0.643*u_k2;

y_k = 1.297*u_k - 1.847*u_k1 +0.643*u_k2 + 1.847*y_k1 - 0.9405*y_k2 ;

 

4、逆变器仿真模型中使用PR闭环控制器

Matlab/Simulink搭建了模型:

电气主回路中参数:滤波电感Lf=47uH,滤波电容Cf=1uF,负载Lf1=30欧姆。

控制回路:

PR控制器实现框图:

经过参数优化后,Kp=1000,Kr=100;wc=2*pi*5;wo=2*pi*50;

上图中,error = Vref - Vout/311。Vref为频率50Hz、幅值为1的正弦波。Vout是逆变器输出。可以看到闭环系统中误差可降到1mV *311=0.331V之内(1mV为error波形的幅值,311为电压标幺化基准值)。

 


参考资料1:Effects of Discretization Methods on the Performance of Resonant Controllers, Alcjandro G. Ycpcs, IEEE transactions on Power Electronics

参考资料2:PID控制器的数字实现及C语法讲解

参考资料3:比例谐振控制的一种实现(含代码)

参考资料4:采用比例谐振控制器的逆变器_叶礼清

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

比例谐振(PR)控制器的学习过程记录 的相关文章

  • std::vector中swap()函数使用解析以及去重复操作

    1 常用方式 交换vector内部的两个元素 int main int argc char argv std vector
  • 磁盘操作--分区大于2T的硬盘

    一 说明 分区大于2TB的硬盘 云上操作 基于linux系统 Linux parted GPT ext4或xfs 步骤如下 1 分区类型为gpt 2 创建主分区 3 查看是否对其 4 重读分区表 5 创建文件系统 6 挂载目录 二 分区硬盘
  • R语言实验报告【全集】

    若对你有帮助 记得点赞 关注我哦 7个实验 R语言环境安装 R语言包的安装 创建和使用R语言数据集 数据的导入导出 R语言数据的清洗 高级数据管理 基本统计分析和函数与包实验 其实是两个实验 内容较长 本实验是在我同学做的云平台上运行的 所
  • mysql binlog 目录_怎么查看mysql 的binlog日志存放的位置(linux和win)

    这个你可以看配置文件 启用了才有这样的记录默认是没有的 linux系统中的 etc my cnf my cnf内容 log bin mysqlbin 默认配置 比如上面的设置重启数据库会生成mysqlbin 000001文件 常用的命令 1
  • 在虚拟机ubuntu64位系统中配置jdk

    在虚拟机ubuntu64位系统中配置jdk 第一步 下载jdk 第二步 新建一个文件夹后将压缩包解压到这个文件中 第三步 任意地方打开一个终端 这里在桌面打开 第四步 将系统的配置文件备份 第五步 在终端中打开配置界面 第六步 检查配置是否
  • antd pro mock数据方法

    export default POST api aaa bbbbb req res gt send里是mock数据返回的数据结构 res send code 200 data steps 2 downFile name 需求 url htt
  • 视觉注意力收集

    参考博文 神经网络学习小记录64 Pytorch 图像处理中注意力机制的解析与代码详解 pynq 注意力机制 Bubbliiiing的博客 CSDN博客 计算机视觉 详解 自注意力 Non local 模块与 Self attention
  • 概率论与数理统计(一)

    本文主要讲了什么是事件 事件与概率的关系 事件常见的分类 事件的基本关系及运算 什么是条件概率以及由条件概率引出的事件独立性 由事件独立性引出来的概率0乘法定理 概率的三条公理 文章目录 事件与概率 概率的三条公理 事件的关系与运算 条件概

随机推荐

  • Postman传入的Date参数类型

    需要定义全局变量 postman setGlobalVariable time Date parse new Date 2020 11 11 00 00 00 进行引用 time time
  • DX杂记之细分着色器和利用贝塞尔曲面平滑模型

    细分着色器的构成 细分着色器是为了将一大块的区域继续划分 划分成很多的小块 大体上由三部分构成 但也会涉及一些其它阶段的内容 这三个阶段分别为 Hull Shader Stage Tesslator Stage Domain Shader
  • Day3: 前端路由(基础篇)

    目标 持续输出 每日分享关于web前端常见知识 面试题 性能优化 新技术等方面的内容 主要面向群体 前端开发工程师 初 中 高级 应届 转行 培训等同学 Day3 今日话题 想必大家经常会在面试中或者工作生活中听到 前端路由 相关的问题或者
  • Training a deep autoencoder or a classifier on MNIST digits_Rbm训练(Matlab)

    这是第一次阅读matlab版的RBM程序所做的笔记 其中有好多没有理解的地方 希望能跟各位博友一起学习 一起研究 一起讨论 共同进步 一 Rbm阅读材料 http en wikipedia org wiki Restricted Boltz
  • statsmodels 0.10.0中文文档

    为什么翻译 本人会计出身 转行数据分析 更多是用excel sql spss等工具 30岁开始入坑python 在学习statsmodels包的过程中 在知乎 百度 CSDN和github上均没有找到statsmodels的中文文档 一开始
  • 自然图像目标检测数据集汇总

    参考 自然图像目标检测数据集汇总 云 社区 腾讯云 目录 一 PASCAL VOC 1 Challenge and tasks 2 Dataset 3 Detection Ground Truth 4 Evaluation 二 ImageN
  • 测试离线音频转文本模型Whisper.net的基本用法

    微信公众号 dotNET跨平台 中的文章 OpenAI的离线音频转文本模型Whisper的 NET封装项目 介绍了基于 net封装的开源语音辨识Whisper神经网络项目Whisper net 其GitHub地址见参考文献2 本文基于Whi
  • springMvc 自定义注解以及自定义异常处理

    上一篇写到自定义错误处理 那么有这么个需求 如果每个模块需要错误处理页面不同 那么上面一篇写死为error jsp就不合理了 所以就需要我们想跳哪个错误页面就哪个页面 这样就灵活多了 我采用自定义注解的方式了指定我们需求跳转的错误页面 具体
  • 菜鸡刷题-1

    很久不刷题了 再次刷题手太生了 痛定思痛 还是继续刷吧 立帖为证 天天坚持 217 存在重复元素 给定一个整数数组 判断是否存在重复元素 如果存在一值在数组中出现至少两次 函数返回 true 如果数组中每个元素都不相同 则返回 false
  • 目标检测详解

    文章目录 前言 一 基本概念 目标检测的思路 边界框 锚框 交并比 loU 标注锚框 在训练数据中标注锚框 将真实边界框分配给锚框 标记类别和偏移量 使用非极大值抑制预测边界框 二 模型介绍 两阶段 R CNN Fast R CNN Fas
  • Spring Boot如何让自己的bean优先加载

    背景介绍 在一些需求中 可能存在某些场景 比如先加载自己的bean 然后自己的bean做一些DB操作 初始化配置问题 然后后面的bean基于这个配置文件 继续做其他的业务逻辑 因此有了本文的这个题目 实现方法 DependsOn注解 这个
  • word交叉引用——在正文中给参考文献做链接

    word交叉引用只需两步即可 3分钟即会 第一步 插入编号 文档中有如下参考文献 但还没有 1 2 3 等编号 那么先给参考文献编号序号 使用word gt 开始 gt 编号 接下来给参考文献标好序号 光标选到某参考文献前 点编号即可自动编
  • opencv-python实现去雾操作

    通过仿真自动色阶算法 发现其去雾效果十分明显 并且速度快于暗通道算法 python实现 python3 6 import numpy as np import cv2 def ComputeHist img h w img shape hi
  • LINUX下编译c++11的代码

    C 11 即ISO IEC 14882 2011 是目前的C 编程语言的最新正式标准 它取代了第二版标准 第一版公开于1998年 第二版于2003年更新 分别通称C 98以及C 03 两者差异很小 新的标准包含核心语言的新机能 而且扩展C
  • Ubuntu 18 系统中对openssl进安降级安装方法总结

    1 下载openssl 下载链接 https www openssl org source snapshot 里边是当前仍支持版本的快照 同版本不同日期内容可能不同的 所以下载一般下对应版本的最新快照 安装出错则尝试另一个快照 解压后的文件
  • qt中的菜单栏的隐藏功能

    有时候为了能让菜单栏中的部分功能进行隐藏 我们就需要在构造函数中进行操作 一般的控件隐藏可以直接hide 就行 然后菜单栏中的部分功能进行隐藏 就需要ui gt 菜单栏名称 gt menuAction gt setVisible false
  • 5G NR 网络切片是什么意思

    网络切片可以理解为支持特定使用场景或商业模式的通信服务要求的一组逻辑网络功能的集合 是基于物理基础设施对服务的实现 这些逻辑网络功能可以看作是由EPC下的网络功能 NetworkFuncTIon 分解而来的一系列子功能 Networksub
  • 线性代数—学习笔记

    对分类超平面方程
  • ubutun安装停留在界面

    这几天都在折腾 都在出问题记录一下 ubuntu安装时停留在界面 怎么办解决方法 重新开机 光标选中 Install Ubuntu 按 e 进入grub界面 将倒数第二行中的 quiet splash 改为 nomodeset F10保存
  • 比例谐振(PR)控制器的学习过程记录

    目录 0 前言 1 PR控制器和PI控制器对比 1 1 传递函数表达式对比 1 2 波特图对比 2 离散化预备知识 2 1 离散化表达式 2 2 离散化方法 2 3 离散化练习题 3 使用Matlab离散PR控制器 4 逆变器仿真模型中使用