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.pswp.cn/news/537164.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537164.shtml
英文地址,請注明出處:http://en.pswp.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">…