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(跳表)

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

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

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

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

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

Spring中BeanFactory和FactoryBean的区别

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

Spring中Aware的用法以及实现

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

Spring Bean的生命周期以及IOC源码解析

IOC源码这一块太多只能讲个大概吧&#xff0c;建议还是去买本Spring IOC源码解析的书来看比较好&#xff0c;我也是自己看源代码以及视频整理的笔记 Bean的生命周期大概可以分为四个阶段&#xff0c;具体的等会再说&#xff0c;先看看IOC的源码吧 1、bean的创建 2、bean的属…

MongoDB位运算基本使用以及位运算应用场景

最近在公司业务上用到了二进制匹配数据&#xff0c;但是MongoDB进行二进制运算&#xff08;Bitwise&#xff09;没用过&#xff0c;网上博客文章少&#xff0c;所以就上官网看API&#xff0c;因此记录一下&#xff0c;顺便在普及一下使用二进制位运算的一些应用。 在MongoDB的…

Mybatis源码日志模块分析

看源码需要先下载源码&#xff0c;可以去Mybatis的github上的仓库进行下载&#xff0c;Mybatis 这次就先整理一下日志这一块的源码分析&#xff0c;这块相对来说比较简单而且这个模块是Mybatis的基础模块。 之前的文章有谈到过Java的日志实现&#xff0c;大家也可以参考一下&…

python手机端给电脑端发送数据_期货交易软件有哪些比较好用?分手机端和电脑端...

一、电脑端交易软件期货电脑端交易软件目前市场上用的最多的是文华财经和博易大师&#xff0c;这两个软件都是免费交易使用的。从投资者使用角度来看&#xff0c;目前电脑端文华财经的评价比博易大师高一些。当然每个投资者有自己的使用习惯&#xff0c;博易大师也有自己优点&a…

Find the Difference(leetcode389)

2019独角兽企业重金招聘Python工程师标准>>> Given two strings s and t which consist of only lowercase letters. String t is generated by random shuffling string s and then add one more letter at a random position. Find the letter that was added in …

Mybatis源码之数据源模块分析

先来看看java纯jdbc查询数据的示例&#xff1a; try {//加载对应的驱动类Class.forName("com.mysql.cj.jdbc.Driver");//创建连接Connection connection DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test?serverTimezoneUTC", "roo…

Mybatis源码之缓存模块分析

缓存这个东西在很多应用中都能看到它们的身影&#xff0c;这次就讲讲在Mybatis中的缓存是怎么应用的&#xff0c;虽然说吧Mybatis中的缓存基本不怎么用&#xff0c;用的更多是第三方组件redis、MongoDB、MemCache等等。 Mybatis的缓存是基于Map实现的&#xff0c;从缓存中读写…

Mybatis源码之核心流程分析

终于谈到了Mybatis最核心的东西了&#xff0c;最核心的就是通过配置XML文件或注解中的SQL&#xff0c;直接调用接口就能执行配置好的SQL语句并封装成对应的返回类型的数据。 先看一下Mybatis使用示例&#xff1a; //创建Builder对象 SqlSessionFactoryBuilder builder new S…

Mybatis源码之与Spring集成包

这次讲讲Mybatis与Spring的整合&#xff0c;作为两款优秀的开源框架&#xff0c;被大众广泛使用&#xff0c;自然是需要强强联合的。 使用示例 先看一下怎么使用&#xff0c;首先需要引用这两款框架的jar包&#xff1a; <dependency>//spring-webmvc会自动去引入其他S…

Mybatis源码之插件模块分析

总结完这个Mybatis的整体主要功能基本上就差不多完&#xff0c;还有一些细节的部分&#xff0c;后续都会记录补充。 插件这个东西一般用的比较少&#xff0c;就算用的多的插件也算是PageHelper分页插件&#xff1b; PageHelper官网&#xff1a;https://github.com/pagehelper…

AMD推出7nm高端显卡Radeon VII,直指英伟达RTX 2080

显卡战争已经发展到了2019年&#xff0c;并且变得比任何人预想的都要激烈。 CES 2019大会上&#xff0c;AMD发布了第一款消费级的 7nm GPU&#xff0c;取名&#xff1a;Radeon VII。据了解&#xff0c;这不是 AMD 的第一颗 7nm 处理器&#xff08;早期以 AI 运算为主的 Radeon …

Spring集成Mybatis多数据源配置

既然在整理Mybatis那就把经常用的这个多数据源的笔记也整一下吧。 Spring集成Mybatis在之前就已经提到了。Spring集成Mybatis 集成Mybatis多数据源有两种方式&#xff1a; 1、创建多个SqlSessionFactory&#xff0c;扫描每个SqlSessionFactoryBean对应的包&#xff0c;形成了…

Spring文件上传

2019独角兽企业重金招聘Python工程师标准>>> Spring文件上传 1、所需依赖包&#xff1a;commons-fileupload-1.3.1.jar2、Maven配置文件pom.xml文件中加入依赖Jar包<dependency><groupId>commons-fileupload</groupId><artifactId>commons-…

算法题学到的一些小语言细节

1.要学会用i&#xff1b;可以简化很多代码&#xff1a;i&#xff1b;copyFromMe(i)&#xff1b;可以写成&#xff1a;copyFromeMe(i) 2.StringBuffer也跟列表一样有append函数&#xff1b; 3.if语句是分支不能进行循环&#xff0c;要写成while才能替代循环里面的判断 4. 这里的…