simulink显示多个数据_如何在 Simulink 中使用 PID Tuner 进行 PID 调参?

0b24987ca8903c2d36d20e67b1d19cbc.gif53b5dbe3c3f87e9f7d05854f1d3ba822.png作者 | 安布奇责编 | 胡雪蕊出品 | CSDN(ID: CSDNnews)本文为一篇技术干货,主要讲述在Simulink如何使用PID Tuner进行PID调参。fe82f3c46d96ab178fdadd68e4ae40af.png

PID调参器( PIDTuner)概述

1.1 简介

使用PID Tuner可以对Simulink模型中的PID控制器,离散PID控制器,两自由度PID控制器,两自由度离散PID控制器进行调参,实现控制性能和健壮性的良好平衡。在使用PID Tuner的时候,它会自动做一些工作:
  • 自动计算被控装置的线性模型。PID Tuner会将PID控制块输入和输出之间所有Simulink块的组合看作为一个被控装置,因此被控装置将会包括控制环中所有块体,不仅仅是控制器本身。

  • 自动给出一个经过控制性能和鲁棒性(健壮性)平衡的初始PID控制设计。这个过程基于经过线性化的被控装置模型的开环频率响应特性。

  • 提供交互性工具和响应曲线来帮助设计满足要求的PID控制系统。

1.2 PID Tuner 使用场景

  • 自动地、交互性地对位于单环、单位反馈的系统前向通路中的单输入单输出(SISO)PID控制器进行调参。

  • 自动地、交互性地调整如下例子中位于环形结构中的两自由度PID控制器参数:

    63339abbd95cf2ef573b8bc59fa452fb.png
  • 交互性地使用SISO系统的响应数据来拟合一个控制原型并自动进行调参从而得到最终的控制模型。(需要System IdentificationToolbox工具)

1.3 应用 PID Tuner 的典型设计流程:

(1)启动 PID Tuner 。在启动的时候,这个软件将会从Simulink模型自动计算得到一个被控装置的线性近似模型并生成一个初始的PID控制器。(2)通过在两个设计模型(上述的线性近似模型和原始控制器模型)中手动调节设计准则(设计偏好)来调整PID Tuner的参数,PID Tuner会计算出使系统稳定的PID参数。(3)从设计好的控制模型中导出参数到原始被控装置的PID控制器中,在Simulink中验证PID控制器表现是否符合要求。

1.4 PID Tuner对被控装置的近似

PID Tuner会将PID控制块输入和输出之间所有块的组合看作为一个被控装置。在被控装置中使用的Simulink块可以是非线性的,但是因为自动调参需要使用一个线性模型,PID Tuner会给出一个被控装置的线性化近似模型来代替原来包含非线性部分的装置模型。这个线性化的模型是对非线性系统的近似,并且在原系统给定工作点的邻域内有效。默认情况下,PID Tuner对装置进行线性化的时候,将使用在Simulink模型中配置的初始条件作为近似装置的工作点,然后根据近似装置设计一个初始PID控制器。但是有时需要为一个工作点不是模型初始条件的装置设计PID控制器,比如:
  • Simulink模型在初始条件下工作没有达到稳态,而PID控制器是针对稳态设计的。

  • 在增益调节应用中需要设计多个控制器,且要求每个控制器的工作点不相同。

在这些情况下,需要在PID Tuner中改变近似装置的工作点。限于篇幅,这里暂不做讨论。

1.5 PID调参算法简介

典型PID调参目标包括:
  • 闭环稳定性。即闭环系统对于有界输入保持输出有界。

  • 足够的性能。闭环系统跟踪参考信号变化和对干扰的抑制要尽可能快,拥有更大的环路带宽(单位开环增益)以及对参考信号变化和干扰有更快的响应速度。

默认情况下,PID Tuner内置的PID调参算法将基于装置的动力学模型选择穿越频率(环路带宽)并且设计目标相位裕度为60°。每次在PID Tuner中改变PID控制器的响应时间、带宽、过渡特性(超调等)以及相位裕度时,调参算法都会重新计算PID增益。如果给定健壮性指标(最小相位裕度),调参算法将会给出一个经过参考信号跟踪性能和干扰抑制性能平衡的控制器设计。如果需要更改设计偏好(design focus),可以在PID Tuner的Options选项中进行设置。d903a4240a59f92225feda1fc3a4f67a.png当调整设计偏好的时候,调参算法将会尝试调整增益来满足跟踪性能或者干扰抑制性能中的一项(取决于设计偏好),同时实现与之前相同的最小相位裕度。系统中的可调参数越多,越有可能在不牺牲鲁棒性的情况下得到期望的 PID控制算法。例如,对PID控制器设置设计偏好比对P控制器或者PI控制器设置更有效。在任何时候,调整控制系统性能很大程度上依赖于被控装置的特性,对于一些装置,调整设计偏好是没有用的。42b2a104e3bed6bb687e5bada4c47304.png

自动调参实践

2.1 打开一个示例模型

在MATLAB命令行中打开一个引擎速度控制器模型来进行操作:open_system('scdspeedctrlpidblock')打开如图所示系统:8570aeacddbd65fb4523e95625264f2c.png

2.2 设计概要

设计一个PI控制器完成引擎速度控制。设计目标是跟踪一个来自Simulink step block的参考信号scdspeedctrlpidblock/SpeedReference。设计要求如下:
  • 过渡时间小于5秒。

  • 稳态误差为0。

在这个例子中,通过在 PID Tuner中设计PI控制器 scdspeedctrl/PID来稳定反馈回路并实现对参考信号的良好跟踪。

2.3 打开PID Tuner

双击PID控制块来打开一个对话框。在Main这个选项中点击Tune。f737d2e870f264c1a088ab21f972da03.png

2.4 初始化PID设计

当PID Tuner启动时,它会自动识别出被控装置的输入和输出,计算得出装置的线性近似模型。原始被控装置可以有任意的阶数和延时。PID Tuner将计算出一个控制性能和健壮性经过合理折中的初始PI控制器。默认情况下,阶跃参考信号跟踪性能将会用曲线展示出来。下图展示了PID Tuner给出的初始PI控制模型:4ed5855354134ecfd452e19710fbbab0.png

2.5 显示PID参数

点击 Show parameters 来显示控制参数P和I以及一系列控制性能和健壮性的度量指标。a9eec2f1c509275619e8184ab72d01b6.png19d998b1b790f8894ae3d3afa07c8a5b.png在这个例子中,初始PI控制器的过渡时间为2秒,满足设计要求。

2.6 在 PID Tuner中调整PID 设计

参考信号跟踪响应的超调大概为2.5%。因为在满足过渡时间要求的前提下还有一些余量,我们可以通过增加响应时间来减小超调。向左移动响应时间滑块来增加闭环系统的响应时间。注意在调整响应时间的时候,响应曲线和控制器参数以及性能指标也在不断更新。下图展示了调整后的PID设计,此时超调为零,过渡时间为3.6秒。这个设计好的控制器已经满足设计要求。0ea175c4b1b4b2312207e1dc7f9eff5d.pngec1cebd35a1de107f5b02c823d0dc7aa.png094a5bf5bce77ab2d0bfbb582bc64bee.png

2.7 进行性能折中

为了在过渡时间小于2秒的情况下实现零超调,需要同时调节响应时间和瞬态特性滑块。我们需要控制器的响应更快以缩短过渡时间,增加控制器的健壮性来减小超调。例如,将响应时间从3.4秒减小到1.5秒同时将健壮性从0.6增加到0.72。下图展示了进行上述设置后的闭环响应。fd63adeb8552949467f101884a1537ed.pngcf594446ab3866d1926f8baa9db6dbdc.png

2.8 将调整好的的参数写入原始装置的PID控制块中

在经过线性近似的装置模型上得到性能满意的控制器之后,还需要在原来的非线性装置上进行检验。在PID Tuner中点击Update Block按钮,把调好的参数写入Simulink模型中的PID控制器。dbe0786062162387eb22ca40dafab37f.png更新后的PID控制器参数如图:a7bcd86309b5132bc8d7ef410eecde3c.png

2.9 验证设计

设计好的闭环系统响应如图所示:

fc1cea98f4a5dae2a41bc257d3b3ce72.png设计好的系统满足设计要求:
  • 过渡时间小于5秒。

  • 稳态误差为0

作者简介:安布奇,笔名单雨,90后工科男,伪文艺青年。目前就读于北京理工大学宇航系,喜欢研究AI,网络爬虫,微信小程序以及机器人,痴迷于Coding,睡前必撸码。

【END】1857f76be28f6d467622e7cf44ac6fb5.png

☞今日七夕!不取标题,只想娶你

☞TIOBE 8 月编程语言排行榜:Python 奋力追赶 C,Swift 下跌

☞被罚 50 亿后,Google 不再强制绑定 Android 默认引擎!

☞ 张一鸣:我用排除法选工作和择偶

☞重磅!AI Top 30+案例评选正式启动☞自然语言处理十问!独家福利☞容器快速入门完全指南☞媒体巨头进军区块链!纽约时报将用区块链技术打击假新闻☞为什么雷军说“华为不懂研发”?

90ed929fad436812b352c7c830e18faa.gif

c142033b99ad37403641b46fc4da7ab8.png你点的每个“在看”,我都认真当成了喜欢

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

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

相关文章

Java并发编程之堵塞队列介绍以及SkipList(跳表)

堵塞队列 先了解一下生产者消费者模式: 生产者就是生产数据的一方,消费者就是消费数据的另一方。在多线程开发中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继…

python生成list的时候 可以用lamda也可以不用_python 可迭代对象,迭代器和生成器,lambda表达式...

分页查找#5.随意写一个20行以上的文件(divmod)# 运行程序,先将内容读到内存中,用列表存储。# l []# 提示:一共有多少页# 接收用户输入页码,每页5条,仅输出当页的内容def read_page(bk_list,n,endlineNone):startline …

数据挖掘技术简介[转]

关键词: 关键词:数据挖掘 数据集合 1. 引言  数据挖掘(Data Mining)是从大量的、不完全的、有噪声的、模糊的、随机的数据中提取隐含在其中的、人们事先不知道的、但又是潜在有用的信息和知识的过程。随…

树莓派安装smbus_树莓派使用smbus不兼容问题(no module named 'smbus')

树莓派使用smbus不兼容问题(no module named ‘smbus’)python3.5–3.6可以使用smbus2代替smbus1. 先参考以下方法:github讨论树莓派社区2.Pypi上可以下载smbus2smbus2PyPi介绍:当前支持的功能有:获取i2c功能(I2C_FUNCS)read_bytewrite_byter…

Java并发编程之线程池ThreadPoolExecutor解析

线程池存在的意义 平常使用线程即new Thread()然后调用start()方法去启动这个线程,但是在频繁的业务情况下如果在生产环境大量的创建Thread对象是则会浪费资源,不仅增加GC回收压力,并且还浪费了时间,创建线程是需要花时间的&…

面向过程的门面模式

{*******************************************************}{ }{ 业务逻辑一 }{ }{ 版权所有 (C) 2008 陈…

Java并发编程之线程定时器ScheduledThreadPoolExecutor解析

定时器 就是需要周期性的执行任务,也叫调度任务,在JDK中有个类Timer是支持周期性执行,但是这个类不建议使用了。 ScheduledThreadPoolExecutor 继承自ThreadPoolExecutor线程池,在Executors默认创建了两种: newSin…

python xml转换键值对_Python 提取dict转换为xml/json/table并输出

#!/usr/bin/python#-*- coding:gbk -*-#设置源文件输出格式import sysimport getoptimport jsonimport createDictimport myConToXMLimport myConToTabledef getRsDataToDict():#获取控制台中输入的参数,并根据参数找到源文件获取源数据csDict{}try:#通过getopt获取…

应用开发框架之——根据数据表中的存储的方法名称来调用方法

功用一:在框架里面根据存储在数据表中的方法名来动态调用执行方法。 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 class(TForm) Button1: TButton; procedu…

Spring IOC容器组件注入的几种方式

整理一下之前Spring的学习笔记,大致有一下几种Spring注入到容器中的方法: 1)、配置在xml的方式。 2)、开启包扫描ComponentScan使用Component,Service,Controller,Repository(其实后三个都继承…

我们是如何拿下Google和Facebook Offer的?

http://posts.careerengine.us/p/57c3a1c1a09633ee7e57803c 大家好,我是小高,CMU CS Master,来Offer第一期学员,2014年初在孙老师的带领下我在几个月的时间内进入了Yahoo,并工作了近2年。2016年初,Yahoo工作…

Spring中BeanFactory和FactoryBean的区别

先介绍一下Spring的IOC容器到底是个什么东西&#xff0c;都说是一个控制反转的容器&#xff0c;将对象的控制权交给IOC容器&#xff0c;其实在看了源代码之后&#xff0c;就会发现IOC容器只是一个存储单例的一个ConcurrentHashMap<String, BeanDefinition> BeanDefiniti…

python中数字和字符串可以直接相加_用c语言或者python将文件中特定字符串后面的数字相加...

匿名用户1级2014-08-31 回答代码应该不难吧。既然用爬虫爬下来了&#xff0c;为什么爬取数据的时候没做处理呢。之前用过Scrapy爬虫框架&#xff0c;挺好用的&#xff0c;你可研究下。代码&#xff1a;#!codingutf-8import osimport reimport random# 获取当前目录文件列表def …

Spring中Aware的用法以及实现

Aware 在Spring当中有一些内置的对象是未开放给我们使用的&#xff0c;例如Spring的上下文ApplicationContext、环境属性Environment&#xff0c;BeanFactory等等其他的一些内置对象&#xff0c;而在我们可以通过实现对应的Aware接口去拿到我们想要的一些属性&#xff0c;一般…

c#字符型转化为asc_C#字符串和ASCII码的转换

//字符转ASCII码&#xff1a;public static int Asc(string character){if (character.Length 1){System.Text.ASCIIEncoding asciiEncoding new System.Text.ASCIIEncoding();int intAsciiCode (int)asciiEncoding.GetBytes(character)[0];return (intAsciiCode);}else{thr…

topcoder srm 625 div1

problem1 link 假设第$i$种出现的次数为$n_{i}$&#xff0c;总个数为$m$&#xff0c;那么排列数为$T\frac{m!}{\prod_{i1}^{26}(n_{i}!)}$ 然后计算回文的个数&#xff0c;只需要考虑前一半&#xff0c;得到个数为$R$&#xff0c;那么答案为$\frac{R}{T}$. 为了防止数字太大导致…

Spring的组件赋值以及环境属性@PropertySource

PropertySource 将指定类路径下的.properties一些配置加载到Spring当中&#xff0c; 有个跟这个差不多的注解PropertySources Target(ElementType.TYPE) Retention(RetentionPolicy.RUNTIME) Documented public interface PropertySources {PropertySource[] value();} 使用…

python语音识别框架_横评:五款免费开源的语音识别工具

编者按&#xff1a;本文原作者 Cindi Thompson&#xff0c;美国德克萨斯大学奥斯汀分校(University of Texas at Austin)计算机科学博士&#xff0c;数据科学咨询公司硅谷数据科学(Silicon Valley Data Science&#xff0c;SVDS)首席科学家&#xff0c;在机器学习、自然语言处理…

csharp read excel file get sheetName list

1 /// <summary>2 /// 3 /// 塗聚文4 /// 201208035 /// Geovin Du6 ///找到EXCEL的工作表名称 要考慮打開的文件的進程問題7 /// </summary>8 /// <param name"filename">…