最小拍控制系统详细解读(阶跃输入+速度输入2个案例)【Simulink仿真】

目录索引

  • 1.符号说明与结构框图
  • 2.最小拍控制系统构造原则
    • 2.1数字控制器D(z)的构造
  • 3.简单控制对象的最小拍控制器设计
    • 3.1阶跃输入
    • 3.2速度输入

1.符号说明与结构框图

  1. y(k)——系统响应输出的离散值
  2. u(k)——数字PID控制输出的离散值
  3. r(k)——期望输出的离散值(事先已知),在本例中为常数(即阶跃输入)
  4. e(k)——e(k)=r(k)-y(k),为期望值-实际值,是单位负反馈的误差比较信号
  5. D(z)——数字控制器的脉冲传递函数
  6. G(s)——被控对象的传递函数,G(z)——广义被控对象的脉冲传递函数
  7. Φ(z)=C(z)/R(z)\Phi(z)=C(z)/R(z)Φ(z)=C(z)/R(z)——系统的闭环传递函数,Φe(z)=E(z)/C(z)\Phi_e(z)=E(z)/C(z)Φe(z)=E(z)/C(z)——系统的闭环误差传递函数
    系统的结构框图如下:
    系统结构框图

2.最小拍控制系统构造原则

最少拍系统是指系统对某些典型的输入(阶跃、速度、加速度输入)具有最快的响应特性。具体来说,最少拍系统应满足对典型输入在有限个采样周期内结束过渡过程且稳态误差为零。研究误差序列e(k)e(k)e(k)的特性之前,不妨通过在Z域研究Φe(z)\Phi_e(z)Φe(z)的表达式来得出使得e(k)e(k)e(k)最快收敛至0的条件。
最小拍控制系统的设计原理是使得系统的闭环误差传递函数Φe(z)=a1z−1+a2z−2+...+anz−n\Phi_e(z)=a_1z^{-1}+a_2z^{-2}+...+a_nz^{-n}Φe(z)=a1z1+a2z2+...+anzn具有最简单的表达式。因为z−kz^{-k}zk的反Z变换为δ(t−k)\delta(t-k)δ(tk),因此e(k)=a1δ(t−T)+a2δ(t−2T)+...+anδ(t−nT)(an≠0)e(k)=a_1\delta(t-T)+a_2\delta(t-2T)+...+a_n\delta(t-nT)(a_n≠0)e(k)=a1δ(tT)+a2δ(t2T)+...+anδ(tnT)(an̸=0),即e(1)=a1,e(2)=a2,...,e(n)=ane(1)=a_1,e(2)=a_2,...,e(n)=a_ne(1)=a1,e(2)=a2,...,e(n)=ann的值是有限的说明系统能在有限拍内达到最小,n的值越小,Φe(z)\Phi_e(z)Φe(z)的表达式越简单,能达到稳态值所需的拍数(周期数)越少。而我们的目的就是设计控制器D(z)使其达到稳态误差e(k)(甚至是e(t))的要求。
设计步骤大体如下:

  1. 根据被控对象的数学模型求出广义被控对象的脉冲传递函数G(z)
  2. 根据输入信号的类型,确定模型Φe(z)=1−Φ(z)\Phi_e(z)=1-\Phi(z)Φe(z)=1Φ(z),其对应关系如下表:
典型输入Z域表达式Φe(z)的形式\Phi_e(z)的形式Φe(z)
u(t)u(t)u(t)11−z−1\frac{1}{1-z^{-1}}1z11(1−z−1)F(z)(1-z^{-1})F(z)(1z1)F(z)
tu(t)tu(t)tu(t)Tz−1(1−z−1)2\frac{Tz^{-1}}{{(1-z^{-1})}^2}(1z1)2Tz1(1−z−1)2F(z){(1-z^{-1})}^2F(z)(1z1)2F(z)
12t2u(t)\frac{1}{2}t^2u(t)21t2u(t)T2z−1(1+z−1)2(1−z−1)3\frac{T^2z^{-1}(1+z^{-1})}{2{(1-z^{-1})}^3}2(1z1)3T2z1(1+z1)(1−z−1)3F(z){(1-z^{-1})}^3F(z)(1z1)3F(z)

当被控对象不含有不稳定零极点,不含有纯滞后环节z−1z^{-1}z1时,F(z)=1,此时的被控对象也称为简单对象。
满足以上条件的任意一个,被控对象称为复杂对象,当G(s)中含有不稳定零点或纯滞后环节时,不能使用D(z)或者Φe(z)\Phi_e(z)Φe(z)中增加因式消除,只能保留至Φ(z)\Phi(z)Φ(z),当G(s)中含有不稳定极点时,在Φe(z)\Phi_e(z)Φe(z)中增加对应的零点抵消Φ(z)\Phi(z)Φ(z)中的不稳定极点。
3. 求控制器的脉冲传递函数D(z),求取原理如下:
由于C(z)=E(z)D(z)G(z)C(z)=E(z)D(z)G(z)C(z)=E(z)D(z)G(z),所以C(z)R(z)=D(z)G(z)E(z)R(z)\frac{C(z)}{R(z)}=D(z)G(z)\frac{E(z)}{R(z)}R(z)C(z)=D(z)G(z)R(z)E(z),即Φe(z)=D(z)G(z)Φe(z)\Phi_e(z)=D(z)G(z)\Phi_e(z)Φe(z)=D(z)G(z)Φe(z)在单位负反馈系统中Φe(z)=1−Φ(z)\Phi_e(z)=1-\Phi(z)Φe(z)=1Φ(z),因此D(z)=Φ(z)G(z)(1−Φ(z))D(z)=\frac{\Phi(z)}{G(z)(1-\Phi(z))}D(z)=G(z)(1Φ(z))Φ(z)
4. 根据D(z)生成控制算法(或者脉冲传递函数)求出输出序列,画出系统的响应曲线。

2.1数字控制器D(z)的构造

我们已经知道D(z)=Φ(z)G(z)(1−Φ(z))D(z)=\frac{\Phi(z)}{G(z)(1-\Phi(z))}D(z)=G(z)(1Φ(z))Φ(z),因此欲求出D(z)只需知道Φ(z)\Phi(z)Φ(z)Φe(z)\Phi_e(z)Φe(z)即可。
Φ(z)=(a0+a1z−1+a2z−2+...+anz−n)(1−z1z−1)(1−z2z−1)...(1−zkz−1)z−m\Phi(z)=(a_0+a_1z^{-1}+a_2z^{-2}+...+a_nz^{-n})(1-z_1z^{-1})(1-z_2z^{-1})...(1-z_kz^{-1})z^{-m}Φ(z)=(a0+a1z1+a2z2+...+anzn)(1z1z1)(1z2z1)...(1zkz1)zm
其中z1,z2,...,zkz_1,z_2,...,z_kz1,z2,...,zkΦ(z)\Phi(z)Φ(z)保留的的广义被控对象G(z)不稳定零点,z−mz^{-m}zm是闭环传递函数Φ(z)\Phi(z)Φ(z)保留的,在G(z)里面出现的纯滞后环节z−mz^{-m}zm,而输入形式决定了前面多项式a0+a1z−1+a2z−2+...+anz−na_0+a_1z^{-1}+a_2z^{-2}+...+a_nz^{-n}a0+a1z1+a2z2+...+anzn的阶数n,阶数n和Φe(z)=(1−z−1)pF(z)\Phi_e(z)={(1-z^{-1})}^pF(z)Φe(z)=(1z1)pF(z)中的p是一致的,即n=p,系数a0、a1、...、ana_0、a_1、...、a_na0a1...an依赖于条件Φe(z)=(1−z−1)pF(z)\Phi_e(z)={(1-z^{-1})}^pF(z)Φe(z)=(1z1)pF(z)而定,Φe(z)\Phi_e(z)Φe(z)中含有p重零点z=1,因此它的0阶导到p-1阶导在z=1处的值都应该是0,即

{Φe(z)∣z=1=0dΦe(z)dz∣z=1=0d2Φe(z)dz2∣z=1=0...dnΦe(z)dzn∣z=1=0\begin{cases} \left. \Phi_e(z) \right| _{z=1}=0 \\ \left. \frac{{\rm d}\Phi_e(z)}{{\rm d}z} \right| _{z=1}=0 \\ \left. \frac{{\rm d^2}\Phi_e(z)}{{\rm d}z^2} \right| _{z=1}=0 \\ ...\\ \left. \frac{{\rm d^n}\Phi_e(z)}{{\rm d}z^n} \right| _{z=1}=0 \end{cases}Φe(z)z=1=0dzdΦe(z)z=1=0dz2d2Φe(z)z=1=0...dzndnΦe(z)z=1=0
根据上面的方程组可以解出Φe(z)\Phi_e(z)Φe(z)中的未知参数a0、a1、...、ana_0、a_1、...、a_na0a1...an,因此Φe(z)\Phi_e(z)Φe(z)已经确定,D(z)即可求得。

3.简单控制对象的最小拍控制器设计

3.1阶跃输入

假设被控对象的传递函数为G(s)=9.40.017s+1G(s)=\frac{9.4}{0.017s+1}G(s)=0.017s+19.4求阶跃输入下的最小拍控制器D(z)的表达式。在Simulink的仿真中,我们设定了Z变换的采样频率是0.005s,(其他地方默认为-1,即服从系统的采样频率)
Simulink仿真图示意
先求取广义被控对象的传递函数
G(z)=Z[1−e−Tss9.40.017s+1]=(1−z−1)Z[(9.4s(0.017s+1))]=2.394z−11−0.745z−1G(z) =Z[\frac{1-e^{-Ts}}{s}\frac{9.4}{0.017s+1}] =(1-z^{-1})Z[(\frac{9.4}{s(0.017s+1)})] =\frac{2.394z^{-1}}{1-0.745z^{-1}} G(z)=Z[s1eTs0.017s+19.4]=(1z1)Z[(s(0.017s+1)9.4)]=10.745z12.394z1
没有不稳定零极点和纯滞后环节,因此选取Φe(z)=(1−z−1),Φ(z)=z−1\Phi_e(z)=(1-z^{-1}),\Phi(z)=z^{-1}Φe(z)=(1z1),Φ(z)=z1
此时D(z)=Φ(z)G(z)(1−Φ(z))=0.4174z−0.7452z−1D(z)=\frac{\Phi(z)}{G(z)(1-\Phi(z))}=0.4174\frac{z-0.7452}{z-1}D(z)=G(z)(1Φ(z))Φ(z)=0.4174z1z0.7452
我们搭建好Simulink仿真电路如下:
Simulink的仿真图
按照我们的理论,系统的应该在控制算法作用的第一拍(0.005s处)时达到0稳态误差,仿真曲线如下图(给定值为1500):
最小拍的阶跃响应
可以看到验证结果与我们理论推导相符。注意我们这里示波器取的采样周期为-1(inherited),说明是Matlab内置的采样时间,会比我们定的Ts=1s要短的多,非常接近于连续系统的仿真结果。可以看出响应曲线在上升段有很微小的纹波抖动,在进入稳态值后,纹波消失。产生纹波的原因在于Y(z)Y(z)Y(z)

3.2速度输入

假设被控对象的传递函数为G(s)=2s(s+1)G(s)=\frac{2}{s(s+1)}G(s)=s(s+1)2,求系统在采样时间1s,输入信号为单位速度输入的条件下的最小拍控制器D(z)。系统的结构框图如下图所示:
系统结构框图
下面我们借助Matlab的命令轻松地解决这个问题。首先按照第二部分最小拍控制系统的设计原则的步骤,我们应该求出带零阶保持器的广义被控对象的Z域脉冲传递函数G(z)=Z[1−e−Tss⋅G(s)]G(z)=Z[\frac{1-e^{-Ts}{s}\cdot G(s)}]G(z)=Z[]1eTssG(s),在Matlab工作区输入代码并获得输出的脉冲传递函数:

>> syms s;%定义符号变量s
>> s=tf('s');%s定义为tf(transfer function传递函数)类型的结构体
>> Gs=2/(s*(s+1));
>> Ts=1;
>> Gz=c2d(Gs,Ts,'zoh')%带零阶保持器(ZOH)的离散化,采样时间为1sGz =0.7358 z + 0.5285----------------------z^2 - 1.368 z + 0.3679Sample time: 1 seconds
Discrete-time transfer function.>> zpk(Gz)%展示为零极点模式ans =0.73576 (z+0.7183)------------------(z-1) (z-0.3679)Sample time: 1 seconds
Discrete-time zero/pole/gain model.

可以看出脉冲传递函数G(z)中含有1个不稳定极点z=1,但是考虑到此时的Φe(z)=(1−z−1)2F(z)\Phi_e(z)={(1-z^{-1})}^2F(z)Φe(z)=(1z1)2F(z),具有z=1这个零点,说明D(z)的表达式D(z)=Φ(z)G(z)Φe(z)D(z)=\frac{\Phi(z)}{G(z)\Phi_e(z)}D(z)=G(z)Φe(z)Φ(z)中可以将极点z=1约去,不必再增加额外的(1−z−1)(1-z^{-1})(1z1)因式,因此可以取F(z)=1即Φe(z)=(1−z−1)2\Phi_e(z)={(1-z^{-1})}^2Φe(z)=(1z1)2,此时Φ(z)=1−Φe(z)=1−(1−z−1)2=2z−1−z−2\Phi(z)=1-\Phi_e(z)=1-{(1-z^{-1})}^2=2z^{-1}-z^{-2}Φ(z)=1Φe(z)=1(1z1)2=2z1z2,根据D(z)=Φ(z)G(z)Φe(z)D(z)=\frac{\Phi(z)}{G(z)\Phi_e(z)}D(z)=G(z)Φe(z)Φ(z)可以求出控制器表达式D(z)。

>> syms z;
>> z=tf('z');
>> Phiez=(1-z^(-1))^2;
>> Phiz=1-Phiez;%得到Φ(z)
>> Dz=Phiz/(Gz*Phiez);%得到数字控制器的脉冲传递函数
>> minreal(zpk(Dz))%得到最简零极点式ans =2.7183 (z-0.5) (z-0.3679)-------------------------(z+0.7183) (z-1)Sample time: 1 seconds
Discrete-time zero/pole/gain model.

我们按照此要去搭建好Simulink仿真图如下
Simulink仿真图
D(z)的Sample time设置为1(因为我们的采样时间是Ts=1s),仿真时间设为10s(差不多可以清楚地看见过渡过程)
速度输入的仿真
黄色为指令信号(单位速度输入),蓝色为响应曲线。我们将示波器的图形(print to figure)打印到图形。利用数据游标工具找到t=1和t=2的点。如果我们的理论正确,那么e(0)=0,e(1)=1,e(2)=0.e(3)=e(4)=…=0;

t数据游标(采样时刻的值)
1在这里插入图片描述
2在这里插入图片描述
3在这里插入图片描述
4在这里插入图片描述

由于r(k)=k,y(k)的采样值依次为0,2,3.002,3.997,e(k)=r(k)-y(k)基本满足e(0)=0,e(1)=1,e(2)=0.e(3)=e(4)=…=0。
从我们仿真的结果看,采样点处的值只需要两拍就达到了稳态,但是采样点之间有纹波(这是因为E(z)=a1z−1+a2z−2+...+anz−nE(z)=a_1z^{-1}+a_2z^{-2}+...+a_nz^{-n}E(z)=a1z1+a2z2+...+anzn并不是有限项,U(z)也并不是有限项,即u(k)最终并没有达到恒定,误差也并没有最终严格归0),这种控制属于有纹波的最小拍控制。还可以通过增加积分可牺牲控制拍数的手段,达到无纹波的最小拍控制,这是连续系统所做不到的。
希望本文对您有帮助,感谢大家对本站点的支持。

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

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

相关文章

php中重写和final关键字的使用

为什么把重写和final放在一起,原因就是一条:final的意思是不可更改的,也就是说final定义的东西是不可改变的,下面具体来说一下。 来看一段简单的代码: 1 class BaseClass {2 final public function test() {3 …

java vector_Java Vector lastElement()方法与示例

java vector向量类的lastElement()方法 (Vector Class lastElement() method) lastElement() method is available in java.util package. lastElement()方法在java.util包中可用。 lastElement() method is used to return the last element of this Vector. lastElement()方法…

SpringBoot官方热部署和远程调试神器,真带劲!

平时使用SpringBoot开发应用时,修改代码后需要重新启动才能生效。如果你的应用足够大的话,启动可能需要好几分钟。有没有什么办法可以加速启动过程,让我们开发应用代码更高效呢?今天给大家推荐一款SpringBoot官方的热部署工具spri…

【Python】输入任意个数元素并保存至列表

目录1.导入任意个数元素到列表1.1.编程思路1.2.代码片2.查找一个重复元素在列表中的所有位置2.1.编程思路2.2代码片1.导入任意个数元素到列表 1.1.编程思路 输入未知个数的元素需要用列表来存储,由于Python具有内存的动态分配能力,列表不需要手动动态分…

MySQL 性能优化的 9 种姿势,面试再也不怕了!

大家好,我是磊哥!今天给大家分享一些简单好用的数据库优化方式!1、选择最合适的字段属性Mysql是一种关系型数据库,可以很好地支持大数据量的存储,但是一般来说,数据库中的表越小,在它上面执行的…

containsall_Java Vector containsAll()方法与示例

containsall向量类containsAll()方法 (Vector Class containsAll() method) containsAll() method is available in java.util package. containsAll()方法在java.util包中可用。 containsAll() method is used to test the existence of all the elements of this Vector in t…

Excel的规划求解【详细步骤】

本文目录1.说明2.准备加载项步骤1步骤2步骤33.线性规划问题步骤4步骤5步骤61.说明 使用Lingo程序也可以实现线性规划、非线性规划以及0-1规划,但是在缺少Lingo程序的情况下,我们使用Excel照样可以很容易地完成。在这里我给大家提供了解决此类问题的详细…

4 种方法!检查字符串是否为合法的日期格式

哈喽大家好,今天咱们来讲一下,Java 中如何检查一个字符串是否是合法的日期格式?为什么要检查时间格式?后端接口在接收数据的时候,都需要进行检查。检查全部通过后,才能够执行业务逻辑。对于时间格式&#x…

linux下tomcat无法显示图片验证码

在catalina.sh中的-Djava.io.tmpdir"$CATALINA_TMPDIR" \后一行增加 -Djava.awt.headlesstrue \ 共8处转载于:https://blog.51cto.com/zhangfeikr/1673312

Java Throwable toString()方法与示例

Throwable类toString()方法 (Throwable Class toString() method) toString() Method is available in java.lang package. toString()方法在java.lang包中可用。 toString() Method is used to return a short description of the exception. toString()方法用于返回对该异常的…

【Matlab】根据图生成带权邻接矩阵,并求出最短路径

目录图的简介无向图(Graph)生成带权邻接矩阵求两点最短路径有向图(Digraph)生成带权邻接矩阵求最短路径图的简介 图是拓扑学中的一个重要概念,分为无向图和有向图两种。图有两个重要属性,即点(…

阿里二面:为什么要分库分表?

在高并发系统当中,分库分表是必不可少的技术手段之一,同时也是BAT等大厂面试时,经常考的热门考题。你知道我们为什么要做分库分表吗?这个问题要从两条线说起:垂直方向 和 水平方向。1 垂直方向垂直方向主要针对的是业务…

java scanner_Java Scanner nextDouble()方法与示例

java scanner扫描仪类的nextDouble()方法 (Scanner Class nextDouble() method) nextDouble() method is available in java.util package. nextDouble()方法在java.util包中可用。 nextDouble() method is used to scans the next token of the input scanned into a double v…

Java 中 List 分片的 5 种方法!

作者 | 王磊来源 | Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG_Stone)前些天在实现 MyBatis 批量插入时遇到了一个问题,当批量插入的数据量比较大时,会导致程序执行报错&a…

Matlab仿真炮弹飞行轨迹——探究射弹参数对飞行轨迹的影响

目录1.分析炮弹受力2.设定参数并仿真3.通过仿真寻找最佳射弹速度3.1.射弹角度的影响3.2.射弹速率的影响3.3.炮弹属性和空气的影响3.3.1.空气阻力系数的影响3.3.2.炮弹质量的影响1.分析炮弹受力 假设炮弹在飞行过程中可以看成质点,运动时仅考虑初始速度、重力加速度…

EL与JSTL注意事项汇总

EL使用表达式(5一个 问题) JSTL使用标签(5问题) 什么是EL。它可以用做? EL全名Expression Language在JSP使用页面 格公式${表达式} 样例${requestScope.customer.id} 功能: 1.才四个域对象中取出属性数据显…

nextboolean()_Java Random nextBoolean()方法与示例

nextboolean()随机类nextBoolean()方法 (Random Class nextBoolean() method) nextBoolean() method is available in java.util package. nextBoolean()方法在java.util包中可用。 nextBoolean() method is used to return the next pseudo-random Boolean value from this Ra…

50行代码,搞定敏感数据读写!

每天早上七点三十,准时推送干货一、介绍在实际的软件系统开发过程中,由于业务的需求,在代码层面实现数据的脱敏还是远远不够的,往往还需要在数据库层面针对某些关键性的敏感信息,例如:身份证号、银行卡号、…

【Python】导入资源管理器的文件列表(计算文件和文件夹大小)

文章目录1.按照扩展名进行分类2.导出文件的大小3.计算文件夹大小4.分类到字典5.完整代码及效果1.按照扩展名进行分类 使用Python查询一个路径下的所有文件可以借助glob模块以及os模块。 在导入文件列表之前,我们需要指定我们的操作目录,操作目录一经指定…

SublimeText2使用笔记

将Sublime Text2 加入右键菜单(转) 1. 运行中输入 regedit 打开注册表 2. 在HKEY_CLASSES_ROOT/*/shell/ 下新建’项’ ,名称自己觉得.我用的是Sublime Text 3. 在 Sublime Text 下 新建’项’ 名字:command (这个貌似不可以修改) 4. 点击 command ,在右…