基于鐵頭山羊STM32的平衡車電機轉速開環閉環matlab仿真

基于鐵頭山羊STM32的平衡車電機轉速開環閉環matlab仿真

  • 前言
  • 一、電機開環傳遞函數
    • 1.1 電機開環傳遞函數的零極點
    • 1.2 求系統的參數和繪制波特圖
  • 二、增加PI控制器后系統開環傳遞函數
  • 三、電機系統閉環傳遞函數
  • 四、simulink仿真
  • 五、幅值裕度、相位裕度、相位穿越頻率和截止頻率(補充知識)
    • 5.1 幅值裕度(Gain Margin, GM)
    • 5.2 相位裕度(Phase Margin, PM)
    • 5.3 相位穿越頻率(Phase Crossover Frequency, Wcg)
    • 5.4 截止頻率(Gain Crossover Frequency, Wcp)
    • 5.5 matlab函數margin()
      • 5.5.1 `inf`(Infinity,無窮大)
      • 5.5.2 `NaN`(Not a Number,非數值)

前言

本文首先向鐵頭山羊致敬!在B站上的講平衡車的視頻做的不錯,具體大家可以點擊這個鏈接跳轉觀看。
本文的內容是針對電機開環傳遞函數和閉環傳遞函數的matlab仿真,涉及一些內部的函數,經過仿真,對實際的控制系統理解更深一步。

一、電機開環傳遞函數

對于開環傳遞函數是鐵頭山羊在B站視頻里一步步推導,最后測量參數得出來的,大家有疑問可以去看看,最后的傳遞函數是下面我輸入matlab的公式。

1.1 電機開環傳遞函數的零極點

使用Matlab繪制波特圖,求系統的參數:

clc
clear
s = tf('s');
%電機的開環傳遞函數
MotorOpenLoopTransferFun = 5.591/((s/14.2 +1)*(s/1962+1))
zpk_MotorOpenLoopTransferFun = zpk(MotorOpenLoopTransferFun)

輸出的結果:

MotorOpenLoopTransferFun =1.558e05-----------------------s^2 + 1976 s + 2.786e04連續時間傳遞函數。zpk_MotorOpenLoopTransferFun =1.5577e+05-----------------(s+1962) (s+14.2)連續時間零點/極點/增益模型。

顯然,沒有零點,極點有-1962,-14.2。采用matlab幫我們整理一下:

%增益
MotorOpenLoopTransferFun_K = dcgain(MotorOpenLoopTransferFun)
%零點
MotorOpenLoopTransferFun_Z = zero(MotorOpenLoopTransferFun)
%極點
MotorOpenLoopTransferFun_P = pole(MotorOpenLoopTransferFun)

輸出:

MotorOpenLoopTransferFun_K =

5.5910

MotorOpenLoopTransferFun_Z =

空的 0×1 double 列向量

MotorOpenLoopTransferFun_P =

1.0e+03 *

-1.9620
-0.0142

對輸出結果分析一下,零點是空的列向量,就是沒有零點,極點是-1.920 * 1.0e+03,就是-1.926乘以10的3次方,另一個極點-0.0142 * 1.0e+03,就是-0.0142乘以10的3次方。而增益是5.5910是我們最初設定的開環傳遞函數分子的值,是系統的直流(DC)增益。

1.2 求系統的參數和繪制波特圖

[MotorOpenLoop_Gm MotorOpenLoop_PM MotorOpenLoop_Wcg MotorOpenLoop_Wcp] = margin(MotorOpenLoopTransferFun);
% 波特圖
figure;
bode(MotorOpenLoopTransferFun);
title('電機的開環波特圖');
grid on;

輸出:

MotorOpenLoop_Gm =

Inf

MotorOpenLoop_PM =

98.0336

MotorOpenLoop_Wcg =

Inf

MotorOpenLoop_Wcp =

78.0478

在這里插入圖片描述

二、增加PI控制器后系統開環傳遞函數

PI控制器的參數是我實際調試中確定的。 Kp = 0.5, Ki = 4.5。

%電機開環PI控制器
C_Motor = pid(0.5,4.5,0)
%電機和PI控制器串聯的開環傳遞函數
MotorOpen_C_LoopTransferFun = MotorOpenLoopTransferFun*C_Motor%%%%%%%%%%%%%%%%%%%%%%%%%%%% 求加上PI控制器的系統參數 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
MotorOpen_C_LoopTransferFun_P = pole(MotorOpen_C_LoopTransferFun)
%增益
MotorOpen_C_LoopTransferFun_K = dcgain(MotorOpen_C_LoopTransferFun)
%零點
MotorOpen_C_LoopTransferFun_Z = zero(MotorOpen_C_LoopTransferFun)
%極點
MotorOpen_C_LoopTransferFun_P = pole(MotorOpen_C_LoopTransferFun)
[z,p,k] = zpkdata(MotorOpen_C_LoopTransferFun,'v')[MotorOpenLoopPID_Gm MotorOpenLoopPID_PM MotorOpenLoopPID_Wcg MotorOpenLoopPID_Wcp] = margin(MotorOpen_C_LoopTransferFun);
% 波特圖
figure;
bode(MotorOpen_C_LoopTransferFun);
title('加上PID的電機開環波特圖');
grid on;

輸出:

C_Motor = Kp + Ki * 1 / s

且 Kp = 0.5, Ki = 4.5
并聯型的連續時間 PI 控制器。

MotorOpen_C_LoopTransferFun =

 7.788e04 s + 7.01e05   ---------------------------   s^3 + 1976 s^2 + 2.786e04 s  連續時間傳遞函數。

MotorOpen_C_LoopTransferFun_P =

1.0e+03 *

     0    -1.9620    -0.0142

MotorOpen_C_LoopTransferFun_K =

Inf

MotorOpen_C_LoopTransferFun_Z =

-9

MotorOpen_C_LoopTransferFun_P =

1.0e+03 *

     0    -1.9620    -0.0142

z =

-9

p =

1.0e+03 *

     0    -1.9620    -0.0142

k =

7.7884e+04

MotorOpenLoopPID_Gm =

Inf

MotorOpenLoopPID_PM =

96.0149

MotorOpenLoopPID_Wcg =

Inf

MotorOpenLoopPID_Wcp =

38.2215

上面的zpkdata()函數實際上也求出了傳遞函數的零極點和增益。

在這里插入圖片描述

低頻段的斜率上升了,截止頻率是38.2,相位裕度是96°,系統很穩定。加PID之前截止頻率是78°,明顯右移了,系統響應速度加快了。

三、電機系統閉環傳遞函數

MotorCloseLoopTransferFun = feedback(MotorOpen_C_LoopTransferFun, 1)%%%%%%%%%%%%%%%%%%%%%%%%%%%% 求電機閉環參數 begin %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%[MotorCloseLoop_Gm MotorCloseLoop_PM MotorCloseLoop_Wcg MotorCloseLoop_Wcp] = margin(MotorCloseLoopTransferFun)% %增益
MotorCloseLoop_K = dcgain(MotorCloseLoopTransferFun)% 波特圖
figure;
bode(MotorCloseLoopTransferFun);
title('電機閉環波特圖');
grid on;

輸出:

MotorCloseLoopTransferFun =

      7.788e04 s + 7.01e05   -------------------------------------   s^3 + 1976 s^2 + 1.057e05 s + 7.01e05  連續時間傳遞函數。 

MotorCloseLoop_Gm =

Inf

MotorCloseLoop_PM =

-180

MotorCloseLoop_Wcg =

Inf

MotorCloseLoop_Wcp =
0

MotorCloseLoop_K =
1

在這里插入圖片描述
由波特圖可知,相位裕度PM應該是180°,而不是輸出的-180°,這是matlab的計算誤差導致的。如果是-180°,那么系統就不穩定了!而且閉環增益等于1。

閉環增益等于1表示:

  • 穩態時,系統的輸出能無誤差地跟蹤輸入(對于階躍輸入或直流信號)。

  • 輸入信號經過閉環系統后,幅值既不放大也不衰減,保持原樣。

  • 典型場景:單位負反饋系統(如跟隨器、伺服系統等)。

下面是階躍響應前后的區別。

在這里插入圖片描述
在這里插入圖片描述

四、simulink仿真

在simulink里面繪制如下的框圖。
在這里插入圖片描述
在這里插入圖片描述
這里的參數是上面電機開環傳遞函數的分子、分母系數。大家對照看一下。
在這里插入圖片描述
對于PID的參數,也是實際上的參數。跟上面matlab代碼里的是一致的。

在這里插入圖片描述
把上面代碼的部分截圖在這里,方便大家對照著看。

在這里插入圖片描述

對于電機閉環傳遞函數,輸入單位階躍響應后,得到的波特圖。

在這里插入圖片描述

五、幅值裕度、相位裕度、相位穿越頻率和截止頻率(補充知識)

在控制系統的頻域分析中,幅值裕度、相位裕度、相位穿越頻率和截止頻率是關鍵指標,用于衡量系統的穩定性和動態性能。以下是它們的詳細解釋:

5.1 幅值裕度(Gain Margin, GM)

  • 定義:幅值裕度是指系統在相位達到?180°(相位穿越頻率)時,開環幅頻特性(|G(jω)|)距離0 dB的差值。

  • 物理意義:表示系統在臨界穩定(?180°相位)時允許增益增大的最大倍數。GM > 0 dB 時系統穩定,值越大穩定性越強。


5.2 相位裕度(Phase Margin, PM)

  • 定義:相位裕度是指系統在幅值穿越頻率(截止頻率)處,相位角與?180°的差值。

  • 物理意義:反映系統動態響應的穩健性。PM > 0° 時系統穩定,典型設計目標為 30°~60°,值越大 transient 響應超調越小。


5.3 相位穿越頻率(Phase Crossover Frequency, Wcg)

  • 定義:開環系統相位角達到?180°時的頻率。
  • 作用:用于計算幅值裕度。若在此頻率處幅值增益≥0 dB,系統會振蕩(臨界穩定)。

5.4 截止頻率(Gain Crossover Frequency, Wcp)

  • 定義:開環系統幅值增益為0 dB(|G(jω)|=1)時的頻率,也稱幅值穿越頻率
  • 作用:反映系統帶寬,影響響應速度。截止頻率越高,系統響應越快,但抗高頻噪聲能力可能下降。

5.5 matlab函數margin()

使用函數:

[Gm,Pm,Wcg,Wcp] = margin(sys)

返回值:
Gm是幅值裕度;Pm是相位裕度;Wcg是相位穿越頻率;Wcp是截止頻率。

在這里插入圖片描述
結合上圖更有助于理解上面的概念。

5.5.1 inf(Infinity,無窮大)

  • 含義:表示一個數值超出了計算機浮點數能表示的范圍(即“無窮大”)。
  • 產生場景
    • 正無窮(+inf):例如 1.0 / 0.0(除零)、exp(1000)(指數爆炸)。
    • 負無窮(-inf):例如 -1.0 / 0.0log(0)(對數趨近負無窮)。
  • 特點
    • 參與運算時可能保持無窮(如 inf + 1 = inf)。
    • 比較操作中,inf 大于任何有限數(如 inf > 1e100true)。

5.5.2 NaN(Not a Number,非數值)

  • 含義:表示計算結果未定義或無效。
  • 產生場景
    • 數學上無意義的運算:0.0 / 0.0sqrt(-1.0)(對負數開平方)。
    • 涉及 NaN 的運算:NaN + 1sin(NaN)
    • 數據缺失或未初始化(某些編程語言中)。
  • 特點
    • 具有“傳染性”:任何與 NaN 的運算結果仍是 NaN
    • 比較操作中,NaN 不等于任何值(包括自身):NaN == NaN 返回 false

本文結束,涉及了matlab的仿真,希望可以幫到大家。

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

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

相關文章

P1044 [NOIP 2003 普及組] 棧

P1044 [NOIP 2003 普及組] 棧 - 洛谷 題解來自洛谷題解&#xff0c;做筆記用 假設用一個函數來表示&#xff1a; x表示當前還未入棧的數字個數 y表示當前棧中的數字個數 orz&#xff0c;大佬們真的是很厲害&#xff0c;想著遞推但是只拿了60分 #include <bits/stdc.h&g…

linux mysql 8.X主從復制

準備兩臺linux服務器,注意要鎖ip我這里如上圖 主庫 192.168.5.5/24 從庫 192.168.5.10/24 接下來確定mysql是否啟動成功并且能從外部連接 主庫從庫主服務器配置 vim編輯主服務器配置 vim /etc/my.cnf注意是下面那個添加配置代碼 log-binmysql-bin # 配置二進制日志 server-id1…

豆包新模型矩陣+PromptPilot:AI開發效率革命的終極方案

> **一套讓AI開發者告別“調參煉獄”的黃金組合,效率提升300%的實戰指南** ## 一、AI開發的范式轉移:從通用模型到**場景化矩陣** 2025年,AI應用開發面臨核心矛盾:**業務場景高度細分**與**模型能力同質化**的沖突。火山引擎的破局之道是推出**豆包1.6模型矩陣**——三…

瑞利雜波背景下不同環境的虛警概率與目標檢測概率仿真

仿真方案&#xff0c;研究在瑞利雜波背景下&#xff0c;均勻環境、多目標環境和雜波墻環境中的虛警概率(Pfa)和目標檢測概率(Pd)。 理論基礎 瑞利分布 瑞利分布常用于描述雷達雜波的幅度分布&#xff1a; p(x) (x/σ) * exp(-x/(2σ)), x ≥ 0其中σ是尺度參數&#xff0c;決定…

Spring Boot + Tesseract異步處理框架深度解析,OCR發票識別流水線

Spring Boot Tesseract異步處理框架深度解析&#xff0c;OCR發票識別流水線一、系統架構設計1.1 分布式流水線架構1.2 核心組件職責1.3 數據流設計二、Spring Boot異步框架實現2.1 線程池優化配置2.2 異步服務層設計2.3 異步流水線編排三、Tesseract深度優化3.1 發票專用訓練模…

Arm Qt編譯Qt例程出錯 GLES3/gl3.h: No such file or directory

解決方法 PC&#xff1a;Ubuntu22.04.1 QtCreator&#xff1a; 4.11.1 交叉編譯環境&#xff1a;YC6254 開發板提供的 5-編譯工具鏈->qt交叉編譯工具 在之前博客配置成功的交叉編譯環境&#xff0c;編譯Qt5.14.8自帶部分Example時&#xff0c;出現 GLES3/gl3.h: No such …

HydroOJ:開源在線判題系統的創新與實踐

HydroOJ&#xff1a;開源在線判題系統的創新與實踐 在數字化與信息化深度融合的今天&#xff0c;編程教育已成為全球教育改革的重要方向&#xff0c;而在線判題系統&#xff08;Online Judge&#xff0c;簡稱 OJ&#xff09;作為編程學習、算法訓練和競賽組織的核心工具&#…

tcpdump問題記錄

問題一: scapy發送vlan報文&#xff0c;tcpdump過濾抓包未抓到包的問題 發包 sendp([Ether(src"11:22:33:44:55:00")/Dot1Q(vlan1001)/IP()/UDP()/"Hello, VLAN!"], iface"ens9")vlan過濾抓包&#xff0c;不OK。 # tcpdump -i ens9 -nnvve -Q ou…

計算機視覺面試保溫:CLIP(對比語言-圖像預訓練)和BERT技術概述

一、CLIP技術 CLIP&#xff0c;全稱 Contrastive Language-Image Pre-training&#xff08;對比語言-圖像預訓練&#xff09;&#xff0c;是由 OpenAI 在 2021 年提出的一個里程碑式的模型。它的核心思想在于利用自然語言作為監督信號來學習強大的視覺表示&#xff0c;從而打破…

用戶組權限及高級權限管理:從基礎到企業級 sudo 提權實戰

用戶組權限及高級權限管理&#xff1a;從基礎到企業級 sudo 提權實戰 在 Linux/Unix 系統里&#xff0c;權限管理不是一個可有可無的小功能&#xff0c;而是系統安全的第一道防線。無論是個人電腦、企業服務器還是云環境&#xff0c;權限配置直接影響系統的穩定性和安全性。一、…

oracle-plsql理解和操作

1、plsql的概念PL/SQL(Procedural Language/SQL)是一種過程化語言&#xff0c;屬于第三代語言&#xff0c;它與C、C、Java等語言一樣關注于處理細節&#xff0c;可以用來實現比較復雜的業務邏輯。它允許SQL的數據操縱語言和查詢語句包含在塊結構(block_structured)和代碼過程語…

數據庫恢復技術:保障數據安全的關鍵

文章目錄前言數據庫恢復技術一、事務的基本概念二、數據庫恢復概述三、故障類型與恢復策略1. 故障分類2. 恢復策略與步驟四、恢復實現技術1. 數據轉儲&#xff08;備份&#xff09;2. 日志文件&#xff08;Logging&#xff09;3. 檢查點技術&#xff08;Checkpoint&#xff09;…

C++歸并排序

1 算法核心思想歸并排序是一種高效的排序方式&#xff0c;需要用到遞歸來實現&#xff0c;我們先來看一下動圖演示&#xff1a;算法核心思想如下&#xff1a;1.將數組盡量平均分成兩段。2.將這兩段都變得有序&#xff08;使用遞歸實現&#xff09;。3.將兩段合并。2 代碼實現首…

機器學習算法篇(四)決策樹算法

目錄 一、決策樹概述 1.1 概述 1.2 基本數學原理 二、熵原理形象解讀與計算 2.1 熵的概念 2.2 熵的計算示例 2.3 條件熵 三、決策樹構造實例 3.1 數據集示例 3.2 計算信息增益 3.3 遞歸構建決策樹 四、信息增益和信息增益率 4.1 信息增益的缺陷 4.2 信息增益率 4…

React 狀態管理入門:從 useState 到復雜狀態邏輯

作為前端新手&#xff0c;在學習 React 時&#xff0c;useState 往往是我們接觸的第一個 Hook。很多人最初會覺得它只能處理簡單的計數器之類的狀態&#xff0c;但實際上&#xff0c;useState 配合其他 Hook&#xff08;尤其是 useEffect&#xff09;可以輕松管理各種復雜狀態。…

DirectX 修復工具檢測 C++ 異常的七大解決方法

在使用電腦的過程中&#xff0c;尤其是在進行與圖形處理、游戲運行或多媒體應用相關的操作時&#xff0c;我們可能會用到 DirectX 修復工具。然而&#xff0c;有時這個工具在運行時會檢測到 C 異常&#xff0c;這無疑給我們帶來了困擾。那么&#xff0c;當遇到這種情況時&#…

0.2. RAII原則:嵌入式C++的基石 (Resource Acquisition Is Initialization)

在C語言的世界里&#xff0c;我們背負著一項沉重而危險的職責&#xff1a;手動管理所有資源。無論是 malloc 后的 free&#xff0c;fopen 后的 fclose&#xff0c;還是獲取互斥鎖后的釋放&#xff0c;程序員都必須在代碼的每一個可能的退出路徑上&#xff0c;確保資源被正確釋放…

Uniworld-V1、X-Omni論文解讀

目錄 一、Uniworld-V1 1、概述 2、架構 3、訓練過程 4、實驗 二、X-Omni 1、概述 2、方法 一、Uniworld-V1 1、概述 動機&#xff1a;當前統一模型雖然可以實現圖文理解和文本生成任務&#xff0c;但是難以實現圖像感知&#xff08;檢測/分割&#xff09;與圖像操控&am…

安全常見漏洞

一、OWASP Top 101.注入漏洞(1)SQL 注入原理&#xff1a;通過用戶輸入注入惡意SQL代碼示例&#xff1a;sql-- 惡意輸入OR 11 -- 可能被注入的SQL SELECT * FROM users WHERE username OR 11 AND password (2)防護措施&#xff1a;使用參數化查詢使用ORM框架實施最小權限原則…

管網遙測終端機——管網安全與效率的守護者

管網遙測終端機是一款智能化的管網監測與管理設備&#xff0c;它采用先進的物聯網技術和自動化控制技術&#xff0c;能夠全天候不間斷地對管網系統進行實時監測。該設備通過集成高精度傳感器、穩定可靠的通信模塊和強大的數據處理單元&#xff0c;構建了一套完整的管網運行數據…