計算機控制系統的最小拍控制器設計及仿真分析

1題目

?開環傳遞函數 G(s)= 2/(s(0.5s+1)) ,采樣周期 T=0.5 秒,設計單位速度輸入下的最小拍控制器

1.1 方法1

根據課本中的步驟,最小拍控制器的設計步驟如下:

1. 確定對象的離散傳遞函數G(z),并確定其零極點。

2. 確定輸入信號類型,確定誤差傳遞函數Φ_e(z)需要包含的因子。例如,對于速度輸入,Φ_e(z)必須包含(1 - z^{-1})^2。

3. 確定Φ_e(z)的形式,考慮對象的零極點:

a. Φ_e(z)必須包含G(z)中單位圓外的零點作為零點。

b. Φ_e(z)必須包含G(z)中單位圓外的極點作為零點。

c. Φ_e(z)必須包含(1 - z^{-1})^m,其中m是輸入信號類型(階躍為1,速度2,加速度3等)。

4. 確定Φ(z) = 1 - Φ_e(z),其中Φ(z)必須包含G(z)中單位圓外的極點作為零點,以及可能的延遲項。

5. 解出Φ_e(z)和Φ(z),使得系統方程滿足,并解出控制器D(z)。

1.2 方法2

最小拍控制器的設計步驟如下:

1. 確定被控對象G(z)的零點和極點,以及是否存在單位圓外的零極點,這可能會影響穩定性,需要特殊處理。

2. 根據輸入類型,確定誤差傳遞函數E(z)的結構。對于單位速度輸入,E(z)必須包含(1 - z^{-1})^2的因子。

3. 設計閉環傳遞函數Φ(z) = 1 - E(z),使得閉環系統穩定且在有限拍內達到穩態。

4. 通過Φ(z)和G(z)求出控制器D(z) = Φ(z)/(G(z) * E(z))。不過可能更具體的公式可能需要調整。

或者,更準確地說,控制器D(z) = Φ(z)/(G(z)*(1 - Φ(z))),因為閉環傳遞函數Φ(z) = D(z)G(z)/(1 + D(z)G(z)),所以D(z) = Φ(z)/(G(z)(1 - Φ(z)))。

?1.3 方法3:于微波教材法

2代碼

按照于老師教材設計

2.1 傳遞函數的零階保持器的離散化GZ

% 系統參數
T = 0.5; % 采樣周期
s = tf('s');% 連續時間開環傳遞函數
Gc = 2/(s*(0.5*s + 1));% 使用零階保持法將連續傳遞函數轉換為離散傳遞函數
Gd = c2d(Gc, T, 'zoh');% 顯示離散傳遞函數
disp('離散化后的開環傳遞函數 G(z):');
Gd
Gd =0.3679 z + 0.2642----------------------z^2 - 1.368 z + 0.3679采樣時間: 0.5 seconds
離散時間傳遞函數。

2.2 閉環傳遞函數phiz

% 定義Φ(z)和Φ_e(z)
Phi = tf([0 2 -1], [1], T, 'Variable', 'z^-1'); % Φ(z) = 2z^{-1} - z^{-2}
Phi_e = tf([1 -2 1], [1], T, 'Variable', 'z^-1'); % Φ_e(z) = (1 - z^{-1})^2% 計算控制器D(z)
D = Phi / (G_discrete * Phi_e)
% 簡化控制器傳遞函數
D = minreal(D); % 消除公共零極點% 顯示控制器傳遞函數
disp('最小拍控制器 D(z):');
D

2.3 數字控制器DZ



D =

??? 5.437 - 10.15 z^-1 + 5.718 z^-2 - z^-3
? ------------------------------------------
? 1 - 1.282 z^-1 - 0.4366 z^-2 + 0.7183 z^-3

采樣時間: 0.5 seconds
離散時間傳遞函數。

我沒有對其因數分解!

2.4 仿真分析

單位速度分析

% 驗證閉環系統性能
closed_loop = feedback(D*G_discrete, 1)
t = 0:T:10; % 時間向量
r = t; % 單位速度輸入
[y, t_out] = lsim(closed_loop, r, t);% 繪制輸入輸出響應
figure;
plot(t_out, r, 'r--', t_out, y, 'b-');
xlabel('時間 (秒)');
ylabel('幅值');
legend('輸入信號', '輸出響應');
title('單位速度輸入下的閉環響應');
grid on;% 顯示穩態誤差
steady_state_error = r(end) - y(end);
disp(['穩態誤差: ', num2str(steady_state_error)]);

我認為單位速度響應還不錯,但教材說不行!

單位階躍響應

[y, t] = step(closed_loop, 10); % 計算10秒內的脈沖響應
figure
stem(t/T, y, 'filled');
xlabel('采樣周期')
ylabel('響應y(k)')

% 單位速度輸入的Z變換z = tf('z', T); % 聲明 z 變量
Rz = T * z/(z - 1)^2

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/73397.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/73397.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/73397.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

哈希--哈希桶

哈希桶是哈希表(散列表)中的一個概念,是哈希表數組中的每個元素 ,用于存儲鍵值對數據。它有以下特點和相關要點: 結構與原理:哈希表底層常由數組構成,數組的每個元素即哈希桶。通過哈希函數計算…

Linux多線程詳解

Linux多線程詳解 一、Linux多線程概念1.1 什么是線程1.2 進程和線程1.3 進程的多個線程共享1.4 進程和線程的關系 二、Linux線程控制2.1 POSIX線程庫2.2 線程創建2.3 獲取線程ID pthread_self2.4 線程等待pthread_join2.5 線程終止2.6 線程棧 && pthread_t2.7 線程的局…

Midscene.js自然語言驅動的網頁自動化全指南

一、概述 網頁自動化在數據抓取、UI 測試和業務流程優化中發揮著重要作用。然而,傳統工具如 Selenium 和 Puppeteer 要求用戶具備編程技能,編寫復雜的選擇器和腳本維護成本高昂。Midscene.js 通過自然語言接口革新了這一領域,用戶只需描述任…

winstart.wsf 病毒清理大作戰

0x00 背景 發現感染了winstart.wsf 病毒如何清理。 0x01 現象 遍歷Users下每個目錄以及C:\和C:\Windows\Temp 2個目錄寫入病毒文件。 C:\Users\Administrator\AppData\Local\Temp\winstart.wsf C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Program…

多路轉接Poll

在之前我們講過select是最古老的多路轉接方案,古老就意味著他不是很方便使用,他需要用戶手動保存fd_set這個位圖結構,來表示讀寫事件的關注與否或者就緒性。 而且由于fd_set的大小是固定的,這就意味著他能管理的套接字文件描述符是…

多層感知機的簡潔實現

《動手學深度學習》-4.3-筆記 import torch from torch import nn from d2l import torch as d2l 導入必要的庫和模塊 net nn.Sequential(nn.Flatten(),nn.Linear(784, 256),nn.ReLU(),nn.Linear(256, 10))def init_weights(m):if type(m) nn.Linear:nn.init.normal_(m.we…

【GoLang】調用llm時提示詞prompt的介紹以及使用方式

介紹 提示詞是一種與大模型交互的對話格式,它以 JSON 格式定義了一個消息列表(messages),包含了系統消息和用戶消息。 我們向AI提問時,其實發給AI的都是提示詞,別看我們只是簡單輸入了一句話,…

內核編程十二:打印task_struct中的數據

在Linux內核中,current 是一個宏,用于獲取當前正在執行的進程的 task_struct 結構體指針。current 宏返回一個指向當前正在運行的進程的 task_struct 結構體的指針。通過這個指針,內核代碼可以訪問和修改當前進程的各種屬性和狀態。 打印單個…

區間端點(java)(貪心問題————區間問題)

deepseek給了一種超級簡單的做法 我是真的想不到 貪心的思路是 局部最優——>全局最優 這種我是真的沒有想到,這樣的好處就是后面便利的時候可以通過foreach循環直接便利qu的子元素也就是對應的某一個區間, 將一個二維數組變成一維數組,每一個一維…

Qt事件處理(處理鼠標事件、鍵盤事件、定時器事件、窗口移動和大小變化事件)

事件處理 事件是應用程序內部或者外部產生的事情或者動作的統稱。 在 Qt 中,事件是用一個對象來管理一個事件的。所有的事件對象都繼承自抽象類 QEvent 。事件包括鼠標事件、鍵盤事件等,發出自 Qt 或操作系統本身。 處理事件一般通過重寫相關的 Event 函…

Apache Hive:基于Hadoop的分布式數據倉庫

Apache Hive 是一個基于 Apache Hadoop 構建的開源分布式數據倉庫系統,支持使用 SQL 執行 PB 級大規模數據分析與查詢。 主要功能 Apache Hive 提供的主要功能如下。 HiveServer2 HiveServer2 服務用于支持接收客戶端連接和查詢請求。 HiveServer2 支持多客戶端…

利用 @eslint/eslintrc 實現 ESLint9的適配

深度解析:利用 eslint/eslintrc 實現 ESLint 的高效配置管理 在前端開發領域,代碼質量和一致性是至關重要的。ESLint 作為一款流行的代碼檢查工具,幫助開發者發現代碼中的潛在問題并保持代碼風格的一致性。而隨著項目的復雜度增加和團隊規模…

cfca 申請國密證書流程

之前給某銀行開發項目,需要用到cfca國密雙證證書,證書類型為企業雙證的作為接口加密的密鑰。 因為是第一次對接,其中走了不少的彎路,現將申請的流程發布出來做下記錄 1、需要找到cfca的相關人員進行測試證書的申請 2、大概1天的…

基于Spring Boot的鄉村養老服務管理系統的設計與實現(LW+源碼+講解)

專注于大學生項目實戰開發,講解,畢業答疑輔導,歡迎高校老師/同行前輩交流合作?。 技術范圍:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容:…

數字孿生技術如何為制造業開辟新天地?

1. 數字孿生在制造業的崛起背景 1.1 數字孿生的概念演進 “數字孿生”(Digital Twin)一詞最早由美國密歇根大學Michael Grieves博士在2002年提出,但當時并未稱之為“數字孿生”,而是以“信息鏡像模型”描述數字世界與物理世界的映射關系。直到2010年前后,美軍、NASA等在…

學一個前端 UI 框架,要學些什么內容?

假如你現在要自學 React/Vue 框架,怎么學? 絕大部分同學可能是這樣學的: 直接去看官方文檔,或者是找一些視頻看一遍,學會這個框架的一些基礎語法,特性功能等等參考一些例子上手編寫 demo,簡單…

asp.net core mvc模塊化開發

razor類庫 新建PluginController using Microsoft.AspNetCore.Mvc;namespace RazorClassLibrary1.Controllers {public class PluginController : Controller{public IActionResult Index(){return View();}} }Views下Plugin下新建Index.cshtml {ViewBag.Title "插件頁…

2024年MathorCup數學建模C題物流網絡分揀中心貨量預測及人員排班解題全過程文檔加程序

2024年第十四屆MathorCup高校數學建模挑戰賽 C題 物流網絡分揀中心貨量預測及人員排班 原題再現: 電商物流網絡在訂單履約中由多個環節組成,圖1是一個簡化的物流網絡示意圖。其中,分揀中心作為網絡的中間環節,需要將包按照不同流…

鴻蒙Flutter開發故事:不,你不需要鴻蒙化

在華為牽頭下,Flutter 鴻蒙化如火如荼進行,當第一次看到一份上百個插件的Excel 列表時,我也感到震驚,排名前 100 的插件赫然在列,這無疑是一次大規模的軍團作戰。 然后,參戰團隊魚龍混雜,難免有…

Unity音頻混合器如何暴露參數

音頻混合器是Unity推薦管理音效混音的工具,那么如何使用代碼對它進行管理呢? 首先我在AudioMixer的Master組中創建了BGM和SFX的分組,你也可以直接用Master沒有問題。 這里我以BGM為例,如果要在代碼中進行使用就需要將參數暴露出去…