多環串級PID

文章目錄

  • 為什么要多環
  • 程序
    • 主函數
    • 內環
    • 外環
  • 雙環PID調參
    • 內環
    • Kp調法
      • Ki調法
    • 外環
      • Kp
  • 以一定速度到達指定位置
  • 封裝

為什么要多環

單環只能單一控制速度或者位置,如果想要同時控制多個量如速度,位置,角度,就需要多個PID在這里插入圖片描述

  • 速度環一般PI控制,位置環一般PD

程序

主函數

/*定義內環變量*/
float InnerTarget, InnerActual, InnerOut;
float InnerKp =, InnerKi =, InnerKd =;
float InnerError0, InnerError1, InnerErrorInt;/*定義外環變量*/
float OuterTarget, OuterActual, OuterOut;
float OuterKp =, OuterKi =, OuterKd =;
float OuterError0, OuterError1, OuterErrorInt;int main(void)
{Timer_Init();while (1){/*用戶在此處根據需求寫入外環PID控制器的目標值*/OuterTarget = 用戶指定的一個值;}
}

內環

void TIM2_IRQHandler(void)
{static uint64_t Count1, Count2;if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET){Count1 ++;if (Count1 >= 內環調控時間){Count1 = 0;/*內環每隔時間T1,程序執行到這里一次*//*執行內環PID控制*/InnerActual = 讀取內環實際值();InnerError1 = InnerError0;InnerError0 = InnerTarget - InnerActual;InnerErrorInt += InnerError0;InnerOut = InnerKp * InnerError0+ InnerKi * InnerErrorInt+ InnerKd * (InnerError0 - InnerError1);if (InnerOut > 上限) {InnerOut = 上限;}if (InnerOut < 下限) {InnerOut = 下限;}/*內環PID的輸出值作用于執行器*/輸出至被控對象(InnerOut);}}
}

外環

外環調控周期要大于等于內環,具體周期給多少,要不斷嘗試

Count2 ++;
if (Count2 >= 外環調控時間)
{Count2 = 0;/*外環每隔時間T2,程序執行到這里一次*//*執行外環PID控制*/OuterActual = 讀取外環實際值();OuterError1 = OuterError0;OuterError0 = OuterTarget - OuterActual;OuterErrorInt += OuterError0;OuterOut = OuterKp * OuterError0+ OuterKi * OuterErrorInt+ OuterKd * (OuterError0 - OuterError1);if (OuterOut > 上限) {OuterOut = 上限;}if (OuterOut < 下限) {OuterOut = 下限;}/*外環PID的輸出值作用于內環PID的目標值*/InnerTarget = OuterOut;
}
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);

雙環PID調參

  • 參數越大,響應越快,但會出現抖動;參數越小,響應越慢,但更加平滑,需要自己取舍
  • 同時調節內環和外環是不可行的
  • 因為內環可以獨立工作,我們要先調內環(要把外環給注釋調),內環調好了,在內環的基礎上調節外環

內環

Kp調法

  • 先讓出現抖動,再減小使抖動消失

Ki調法

  • 與Kp類似
  • 先讓出現抖動,再減小使抖動消失

外環

Kp

外環Kp不用怕超調,直接調到抖動再減小,用Kd減少超調

以一定速度到達指定位置

不能使innertarget=目標速度
正確做法是更改限幅,速度要小限幅就小

封裝

typedef struct {float Target;float Actual;float Out;float Kp;float Ki;float Kd;float Error0;float Error1;float ErrorInt;float OutMax;float OutMin;
} PID_t;

初始化賦值方法

   PID_t Inner = {.Kp = 0.3,.Ki = 0.3,.Kd = 0,.OutMax = 100,.OutMin = -100};
```c
void PID_Update(PID_t *p)
{p->Error1 = p->Error0;p->Error0 = p->Target - p->Actual;if (p->Ki != 0){p->ErrorInt += p->Error0;}else{p->ErrorInt = 0;}p->Out = p->Kp * p->Error0+ p->Ki * p->ErrorInt+ p->Kd * (p->Error0 - p->Error1);if (p->Out > p->OutMax) {p->Out = p->OutMax;}if (p->Out < p->OutMin) {p->Out = p->OutMin;}
}

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

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

相關文章

基于Kubernetes的Apache Pulsar云原生架構解析與集群部署指南(上)

#作者&#xff1a;閆乾苓 文章目錄 概念和架構概述主要特點消息傳遞核心概念Pulsar 的消息模型Pulsar 的消息存儲與分發Pulsar 的高級特性架構BrokerBookKeeperZooKeeper 概念和架構 概述 Pulsar 是一個多租戶、高性能的服務器到服務器消息傳遞解決方案。Pulsar 最初由雅虎開…

電子電氣架構 --- 如何有助于提安全性并減少事故

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 鈍感力的“鈍”,不是木訥、遲鈍,而是直面困境的韌勁和耐力,是面對外界噪音的通透淡然。 生活中有兩種人,一種人格外在意別人的眼光;另一種人無論…

rest_framework學習之認證 權限

權限 DRF提供如下幾種常見權限&#xff1a; IsAuthenticated, 認證通過 IsAdminUser, 管理員權限 IsAuthenticatedOrReadOnly, 登錄用戶增刪改 非登錄用戶只能查詢 AllowAny&#xff0c;無需認證&#xff08;默認&#xff09; 在rest_framework的APIView基礎類中&#xf…

【使用switch結構輸出季節】2021-11-23

緣由用switch語句設計程序一年有12個月-編程語言-CSDN問答 void 使用switch結構輸出季節(int y) {//緣由https://ask.csdn.net/questions/7577096?spm1005.2025.3001.5141std::cout << y << "\t";switch (y){case 3: case 4: case 5:std::cout <<…

主備Smart Link + Monitor Link組網技術詳細配置

1.實驗拓撲 2.使用設備 eNSP模擬建議下行設備三臺使用S3700模擬&#xff08;全部使用S5700可能會出現流量丟失等異常問題。&#xff09; 3.實驗配置 [SW1]dis cu # sysname SW1 # vlan batch 100 110 # interface Ethernet0/0/1port link-type accessport default vlan 100 …

【hadoop】案例:Sqoop遷移倉庫數據

1 數據導出&#xff1a;Hive導入MySQL [hadoophadoop1 sqoop]$ bin/sqoop export \ > --connect jdbc:mysql://localhost/weather \ > --username root \ > --password 123456 \ > --table mean_temperature \ > --export-dir /user/hive/warehouse/mydb/mean…

Mysql-OCP PPT課程講解并翻譯

#跳過介紹&#xff0c;直接從干貨開始記錄 第一章 安裝mysql

springboot+vue實現在線網盤(云盤)系統

今天教大家如何設計一個網盤&#xff08;云盤&#xff09;系統系統 , 基于目前主流的技術&#xff1a;前端vue&#xff0c;后端springboot。 同時還帶來的項目的部署教程。 視頻演示 springbootvue實現在線網盤&#xff08;云盤&#xff09;系統 圖片演示 一. 系統概述 用過百…

JAVA:Spring Boot 集成 Lua 的技術博客

1、簡述 在現代開發中,Lua 以其輕量級、高性能以及易嵌入的特點廣泛用于腳本擴展、游戲開發以及配置處理場景。將 Lua 與 Spring Boot 集成,可以在 Java 項目中實現動態腳本功能,增強項目的靈活性和動態配置能力。 樣例代碼: https://gitee.com/lhdxhl/springboot-example…

uniapp-商城-43-shop 后臺管理 頁面

后臺管理較為簡單&#xff0c;主要用于后臺數據的管理&#xff0c;包含商品類別和商品信息&#xff0c;其實還可以擴展到管理用戶等等 1、后臺首頁 包含 分類管理 商品管理 關于商家等幾個欄目 主要代碼&#xff1a; <template><view class"manage">…

食物數據分析系統vue+flask

食物數據分析系統 項目概述 食物數據分析系統是一個集食物營養成分查詢、對比分析和數據可視化于一體的Web應用。系統采用前后端分離架構&#xff0c;為用戶提供食物營養信息檢索、食物對比和營養分析等功能&#xff0c;幫助用戶了解食物的營養成分&#xff0c;做出更健康的飲…

學習基本樂理知識

本文主要內容 如何練習吉他 樂理知識補充 ps&#xff1a;本文知識均來自up主 ‘吉他大學霸’ 感謝開源 -^- 練習吉他步驟 打怪升級 右手--> 左手--> 音階--> 拓展 第一階段&#xff1a; 追求手腳配合不出錯、手姿勢不出錯、手不會按錯彈錯。連續不錯的遍數達標就可以進…

吊球技術(劈吊、滑板等)

羽毛球吊球技術&#xff08;劈吊、滑板等&#xff09;是單打和雙打中重要的得分手段&#xff0c;需要通過系統性練習掌握。以下是分步驟的詳細訓練方法&#xff1a; 一、核心技術原理對比 技術類型擊球點拍面控制發力特點適用場景正手劈吊高點偏前斜切&#xff08;拍面45&…

Java實現桶排序算法

1. 桶排序原理圖解 桶排序是一種基于分桶思想的非比較排序算法&#xff0c;適用于數據分布較為均勻的場景。其核心思想是將數據分散到有限數量的“桶”中&#xff0c;每個桶再分別進行排序&#xff08;通常使用插入排序或其他簡單的排序算法&#xff09;。以下是桶排序的步驟&a…

OpenCv實戰筆記(3)基于opencv實現調用攝像頭并實時顯示畫面

一、實現效果 二、實現原理 使用 OpenCV 打開攝像頭&#xff0c;持續捕獲視頻幀&#xff0c;并在一個窗口中實時顯示這些幀&#xff0c;直到用戶按下 ESC 鍵退出。整體流程&#xff1a;打開攝像頭&#xff08;cv::VideoCapture&#xff09;>創建圖像顯示窗口&#xff08;cv…

編譯原理頭歌實驗:詞法分析程序設計與實現(C語言版)

編譯原理頭歌實驗&#xff1a;詞法分析程序設計與實現&#xff08;C語言版&#xff09; 1.實驗描述 任務描述 本關任務&#xff1a;加深對詞法分析器的工作過程的理解&#xff1b;加強對詞法分析方法的掌握&#xff1b;能夠采用一種編程語言實現簡單的詞法分析程序&#xff…

SQL常用操作大全:復制表、跨庫查詢、刪除重復數據

大家好&#xff0c;歡迎來到程序視點&#xff01;我是你們的老朋友.小二&#xff01; SQL常用操作精華總結 表結構與數據操作 復制表結構&#xff1a; SELECT * INTO b FROM a WHERE 1<>1 (SQL Server專用) SELECT TOP 0 * INTO b FROM a (更通用) 拷貝表數據&#…

課外活動:簡單了解原生測試框架Unittest前置后置的邏輯

簡單了解原生測試框架Unittest前置后置的邏輯 一、測試框架執行順序解析 1.1 基礎執行流程 import unittestclass A(unittest.TestCase):classmethoddef setUpClass(cls):print(f"【CLASS START】{cls.__name__}")def setUp(self):print(f"【TEST START】{se…

學習設計模式《八》——原型模式

一、基礎概念 原型模式的本質是【克隆生成對象】&#xff1b; 原型模式的定義&#xff1a;用原型實例指定創建對象的種類&#xff0c;并通過拷貝這些原型創建新的對象 。 原型模式的功能&#xff1a; 1、通過克隆來創建新的對象實例&#xff1b; 2、為克隆出來的新對象實例復制…

olmOCR - PDF文檔處理工具包

文章目錄 一、關于 olmOCR相關資源包含內容團隊 二、安裝三、本地使用示例查看結果多節點/集群使用管道完整文檔 一、關于 olmOCR olmOCR 是用于訓練語言模型處理PDF文檔的工具包&#xff0c;支持大規模PDF文本解析和轉換。 相關資源 源碼&#xff1a;https://github.com/all…