PID原理及控制算法詳解

文章目錄

1. 概念

1.1 PID框圖

1.2 具體示例:無人機高度控制

2. PID原理

3. 常用術語

4. 計算過程

4.1 比例控制(Proportional)

4.2 積分控制(Integral)

4.3 微分控制(Derivative)

5. 代碼實現邏輯

7. 串級PID和代碼實現

6. 模擬仿真


1. 概念

PID是應用最廣泛的閉環控制方法之一,是一種常用的反饋控制方法,對于每個PID控制器由三個部分組成:比例控制(Proportional)、積分控制(Integral)和微分控制(Derivative)。

一般而言,目標值和反饋值為同種物理量,輸出值可以是施加在被控物體上的控制量
舉例:對物體進行位置控制時,目標值=目標位置,反饋值=當前位置,輸出值=施加的驅動力大小,PID就能實時計算出驅動力使物體到達目標位置。

控制程序一般會定時運行PID算法,在每次運行時,先計算出誤差=目標值-反饋值,然后分別由P、I、D三個環節根據誤差計算出輸出分量,三個分量加和即為最終輸出值。

1.1 PID框圖

上圖就是PID的信號框圖,表示了PID的運行過程:

為系統指定一個目標值。PID將目標值與被控對象(無人機)當前的反饋量作差得到誤差。PID將誤差值分別經過三個環節計算得到輸出分量,三個分量加起來得到PID的輸出。將PID的輸出施加到被控對象上,使反饋量向目標值靠攏。

PID三個環節的作用

由控制無人機案例我們可以總結出PID三個環節各自的主要作用和效應:

  • 比例環節:起主要控制作用,使反饋量向目標值靠攏,但可能導致振蕩。

  • 積分環節:消除穩態誤差,但會增加超調量。

  • 微分環節:產生阻尼效果,抑制振蕩和超調,但會降低響應速度。

PID中物理量的設計

我們在設計PID時主要關注三個量:目標值、反饋值、輸出值。PID會根據目標值和反饋值計算輸出值。

需要強調的是,PID并不知道被控對象是什么,它僅負責進行數值計算,而我們——作為控制系統的設計者,就需要為PID指定這三個量所對應的實際物理量,這在不同的控制系統中是不一樣的。

如何確定實際物理量

我為大家總結了一個常用準則:

  • 目標值和反饋值
    • 通常為同種物理量,就是你需要控制的物理量。
  • 輸出值
    • 通常是直接驅動被控對象的控制量。
    • 輸出量作用在被控對象上需要經過時間積累才會產生反饋量的變化,換言之,輸出值通常為反饋值對于時間的低階物理量。例如:目標值和反饋值為位置,則輸出值可以為速度或加速度。

對于線性關系的兩個物理量(只差一個系數),可以直接替換。例如:目標和反饋值為無人機的位置,根據上一條準則,輸出值可以為加速度。但我們無法直接控制加速度,只能控制推力大小,由于由于高度的變化是由推力產生的,且推力與加速度只差一個系數(F=ma),因此可以將輸出值直接定為推力。

?

1.2 具體示例:無人機高度控制

  1. 目標值(Setpoint)無人機希望達到的高度,例如10米。

  2. 反饋值(Measured Value)無人機當前的實際高度,例如8米。

  3. 誤差(Error)

    • 目標高度與實際高度的差值。誤差 = 目標高度 - 實際高度 = 10米 - 8米 = 2米。
  4. 輸出值(Output)

    • 控制電機的推力大小,以使無人機的高度向目標高度靠攏。
    • 由于推力與加速度成正比,我們可以將輸出值設為推力。通過調整推力來改變無人機的加速度,從而改變高度。

2. PID原理

這是一個通過PID控制水管進出水流量的例子。讓我們詳細解釋這個例子:

圖示說明

  • 閥門:水管中間有一個閥門,通過調節閥門的開度來控制水流量。
  • PID控制器:控制系統通過PID控制器來調節閥門,以控制水流量。
  • 流量傳感器:水管上有流量傳感器,用來測量當前的實際流量。

工作原理

  1. 設定值:系統有一個預期流量值(設定值),這是希望達到的水流量。比如2L/S.
  2. 測量值:流量傳感器實時測量當前的實際流量。
  3. 誤差計算:PID控制器將實際流量與預期流量進行比較,得到誤差值(誤差 = 預期流量 - 實際流量)。
  4. 控制輸出
    • 比例控制(P):根據當前誤差值直接調節閥門的開度。誤差越大,調整幅度越大。
    • 積分控制(I):根據誤差隨時間的累積來調節閥門,以消除持續的偏差。積分控制能消除系統的穩態誤差。
    • 微分控制(D):根據誤差變化的速度來調節閥門,預見并平滑誤差的變化,減少超調和振蕩。

實際操作

  • 啟動時:當系統啟動時,PID控制器根據初始誤差進行較大的調整,使流量迅速接近設定值。
  • 穩定階段:當實際流量接近設定值時,比例控制器的作用減小,積分控制器確保誤差歸零,微分控制器平滑誤差變化,避免波動。
  • 擾動響應:當系統受到外部擾動(如水壓變化)時,PID控制器會重新計算誤差,并調整閥門,以重新達到設定的流量值。

3. 常用術語

  • 被控對象:需要控制的對象。例如,溫度控制中的加熱器、速度控制中的電機等。
  • 目標值(Setpoint):期望被控對象達到的狀態量。例如,溫度控制中的期望溫度、速度控制中的目標速度。
  • 反饋值(Measured Value):被控對象當前時刻的狀態量。例如,當前的溫度、當前的速度。
  • 增益(Gain):比例、積分和微分部分的放大系數,分別是Kp、Ki和Kd。
  • 輸出量(Output):PID的計算結果,用于調整被控對象的控制力。例如,加熱器的功率、驅動電機的電壓。
  • 誤差(Error):目標值與反饋值之間的差異。公式為:誤差 = 目標值 - 反饋值。
  • 穩態誤差(Steady-State Error):系統在穩定狀態下仍然存在的誤差。例如,加入干擾后仍存在的誤差。
  • 階躍輸入(Step Input):在系統穩定狀態下,目標值發生突然變化。例如,目標溫度從20°C突然升高到25°C。
  • 階躍響應(Step Response):階躍輸入后,被控對象的響應狀態,能夠代表系統的控制性能。
  • 瞬態響應(Transient Response):系統從初始狀態到達到穩態的過渡過程,包括上升時間、超調量和調節時間等。
  • 響應速度(Response Speed):階躍輸入后,被控對象再次到達目標值的速度。
  • 超調量(Overshoot):階躍輸入后,被控對象到達目標值后超出目標值的距離。

4. 計算過程

這里用無人機的高度控制來舉例

4.1 比例控制(Proportional)

假如讓無人機懸停在10米的高度,但此時高度為2米,所以此時誤差(error)為8米,假設Kp=0.5,比例控制每次調節的高度就為:

Kp * error

所以第一次調節為 0.5*8=4,此時誤差變為4米。

第二次調節:0.5*4=2,此時誤差變為2米。

依次進行調節,誤差逐漸變小。這個過程就叫做比例調節。

Kp值越大,系統反應速度越快,無人機更快靠近誤差。

但是比例控制的缺點為兩點:

  • 干擾:容易受到外界干擾,比如此時有持續的風將無人機向下吹,導致無人機同一周期向下1米,此時比例控制的計算結果為0.5*2=1,所以,這會導致無人機永遠保持在八米的高度,誤差保持在2米。這也叫做穩態誤差。
  • 震蕩:Kp值越大,系統反應速度越快,無人機更快靠近誤差,但同時無人機在接近目標高度時,產生的震蕩也越嚴重。

為了消除穩態誤差的問題,就需要用到積分控制(Integral)。

為了消除系統震蕩的問題,就需要用到微分控制(Derivative)。

4.2 積分控制(Integral)

積分控制是對之前計算的所有的誤差求和,也就是在離散的情況下做累加,比如無人機經過兩次調節,第一次誤差為8米,第二次誤差為4米,加起來就是12米,假如Ki=0.1,計算結果為:

?0.1*12=1.2,所以及時有向下持續的風影響無人機,由于積分控制,無人機還是會向上走1.2米。

所以積分控制會對誤差進行累計,從而提供更大的升力,讓無人機慢慢的朝著目標點靠近,最終誤差消除為0。

所以經過第三次調節,累計誤差從12調整到了12.8,那么第四次調節的結果0.1*12.8=1.28。

但此時無人機距離目標高度僅為0.8米,如果還是調節1.28米,就會出現過沖現象。

此時就需要使用微分控制進行更細致的調節。

4.3 微分控制(Derivative)

微分控制就是通過當前時刻與前一刻誤差量的差值對未來做預測。如果差值為正,就表示誤差在變大,為負就表示誤差在減小。如果誤差在變大,就會加大控制強度,讓誤差降下來。如果誤差減小,就會減小控制強度,讓無人機平穩緩和的到達指定值。

這里也就相當于對距離求微分:

d(error)/dt = 速度

微分控制算法可以對無人機的速度做出響應,當無人機的速度過快時,微分控制會抵消一部分由比例控制計算出來的升力,從而減緩系統的震蕩。所以當我們提高Kd的值,系統的震蕩會逐步減小。

但無論是比例,積分還是微分控制,數值調的過大,無人機就會出現過沖現象。

5. 代碼實現邏輯

這段偽代碼實現了一個基本的PID控制算法。

previous_error := 0
integral := 0loop:error := setpoint - measured_value //計算誤差integral := integral + error * dt //計算積分derivative := (error - previous_error) / dt //計算微分output := Kp * error + Ki * integral + Kd * derivative //計算控制輸出previous_error := error //更新前一次誤差wait(dt) //等待并循環goto loop
  • previous_error 用于存儲前一次循環中的誤差值,初始化為0。
  • integral 是積分部分的累加值,初始化為0。
  • error 是當前的誤差,等于設定值(setpoint)減去測量值(measured_value)。
  • 積分部分通過累加誤差乘以時間步長(dt)來實現。這個部分用于消除系統的穩態誤差。
  • 微分部分通過當前誤差減去前一次誤差,再除以時間步長(dt)來實現。這個部分用于預測誤差的變化趨勢,從而提前進行調整。
  • 控制輸出(output)是比例、積分和微分三部分的加權和。
  • Kp 是比例增益,對應 error。
  • Ki 是積分增益,對應 integral。
  • Kd 是微分增益,對應 derivative。
  • 將當前的誤差值存儲到 previous_error 中,以便下次循環使用。?

這段偽代碼通過不斷地測量誤差、累積積分和計算誤差變化率,動態調整控制輸出,使系統的實際值盡量接近設定值。

7. 串級PID和代碼實現

串級PID可增加系統的穩定性,抗干擾能力更強,包括代碼實現可以看下面這篇:

串級PID控制算原理及法詳解-CSDN博客

6. 模擬仿真

下面這個網站可以模擬調節PID參數來控制無人機

Webpack App

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

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

相關文章

windows@文件高級共享設置@網絡發現功能@從資源管理器網絡中訪問遠程桌面

文章目錄 高級共享設置常用選項其他選項操作界面說明 網絡類型檢查和設置(專用網絡和公用網絡)👺Note 高級共享設置和防火墻👺命令行方式使用圖形界面方式配置 網絡發現網絡發現功能的詳細介紹網絡發現的作用👺網絡發現的工作原理啟用和配置網…

SOC和SOH聯合估計 | 基于集成ELM的鋰離子電池充電截止電壓下的SOC和SOH聯合估計

目錄 研究概述研究內容研究路線研究介紹研究概述 充電截止電壓是大多數電動汽車用戶充電都會經歷的電壓點。針對傳統安時積分法忽略初始容量誤差和電池老化等一系列待優化的問題,提出了雙層集成極限學習機(extreme learning machine, ELM)算法,實現鋰離子電池充電截止電壓下…

【Python實戰因果推斷】2_因果效應異質性2

目錄 CATE with Regression Evaluating CATE Predictions CATE with Regression 我想你可能已經預料到了:與應用因果推理中的大多數情況一樣,答案往往從線性回歸開始。但在走這條路之前,讓我們把事情變得更具體一些。假設你在一家遍布全國的…

[A133]uboot啟動流程

[A133]uboot啟動流程 hongxi.zhu 2024-6-21 1. 第一階段 lds描述 從u-boot.lds中能找到程序的匯編入口ENTRY(_start) brandy/brandy-2.0/u-boot-2018/u-boot.lds OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") OUT…

Spring Boot中的異步編程技巧

Spring Boot中的異步編程技巧 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿!今天我們將探討在Spring Boot應用程序中如何使用異步編程技巧,以提升性…

LeetCode題練習與總結:單詞拆分--139

一、題目描述 給你一個字符串 s 和一個字符串列表 wordDict 作為字典。如果可以利用字典中出現的一個或多個單詞拼接出 s 則返回 true。 注意:不要求字典中出現的單詞全部都使用,并且字典中的單詞可以重復使用。 示例 1: 輸入: s "l…

vant組件 頂部下拉刷新和頁面底部下拉獲取數據+頂部搜索框

1.html部分&#xff08;頂部tab切換無&#xff0c;只有主體list部分&#xff09; <div class"yd" ><!-- yd端 --><!-- 搜索框 --><van-searchv-model"ydsearchvalue"show-actionplaceholder"請輸入搜索關鍵詞"search"…

JavaEE之HTTP協議(1)_HTTP基礎知識,HTTP 請求、響應格式,方法,狀態碼

一、HTTP協議 1.1 基本概念: HTTP全稱超文本傳輸協議&#xff0c;是一種無狀態的、應用層的協議&#xff0c;它基于請求/響應模型。客戶端&#xff08;通常是Web瀏覽器&#xff09;通過發送HTTP請求到服務器來獲取或發送信息&#xff0c;服務器則返回HTTP響應作為回應。HTTP協…

shell (三)shell腳本

SHELL腳本 編程語言的分類 解釋型語言&#xff1a;shell&#xff0c;Python&#xff0c;需要解析器 編譯型語言&#xff1a;C語言&#xff0c;C&#xff0c;需要編譯器 shell腳本 操作系統的結構 shell&#xff08;貝殼&#xff09; 應用層 app&#xff0c;代碼 應用層需要通…

2024年軟件測試面試題大全【答案+文檔】

&#x1f345; 視頻學習&#xff1a;文末有免費的配套視頻可觀看 &#x1f345; 點擊文末小卡片&#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 一、面試基礎題 簡述測試流程&#xff1a; 1、閱讀相關技術文檔&#xff08;如產品PRD、UI設計…

1、線性回歸模型

1、主要解決問題類型 1.1 預測分析(Prediction) 線性回歸可以用來預測一個變量(通常稱為因變量或響應變量)的值,基于一個或多個輸入變量(自變量或預測變量)。例如,根據房屋的面積、位置等因素預測房價。 1.2 異常檢測(Outlier Detection) 線性回歸可以幫助識別數…

鴻蒙開發系統基礎能力:【@ohos.systemTime (設置系統時間)】

設置系統時間 本模塊用來設置、獲取當前系統時間&#xff0c;設置、獲取當前系統日期和設置、獲取當前系統時區。 說明&#xff1a; 本模塊首批接口從API version 7開始支持。后續版本的新增接口&#xff0c;采用上角標單獨標記接口的起始版本。 導入模塊 import systemTime …

沙盒在數據防泄密領域意義

在信息化快速發展的今天&#xff0c;數據已成為企業最寶貴的資產之一。然而&#xff0c;數據泄密事件頻發&#xff0c;給企業的安全和發展帶來了巨大威脅。SDC沙盒防泄密系統&#xff0c;作為一種創新的數據防泄密解決方案&#xff0c;正逐漸在數據防泄密領域發揮著越來越重要的…

理解和使用JavaScript的閉包

閉包 在前端開發中&#xff0c;JavaScript是一種非常重要的編程語言。它的靈活性和強大功能使得開發者可以創建豐富的用戶體驗。然而&#xff0c;JavaScript中有些概念對于初學者來說可能比較難以理解&#xff0c;閉包就是其中之一。本文將深入探討JavaScript中的閉包&#xf…

安裝zabbix時報錯Could not resolve host: mirrors.huaweicloud.com;Unknown error解決辦法

目錄 1、問題原因 2、解決辦法 3、知識拓展 DNS的區別 DNS配置文件解析 域名解析過程 4、書籍推薦 當安裝Zabbix server&#xff0c;Web前端&#xff0c;agent時出現&#xff1a; [rootsc-zabbix-server ~]# yum install zabbix-server-mysql zabbix-agent安裝過程中會出…

Python3極簡教程(一小時學完)上

開始 Python 之旅 本教程基于 Python for you and me 教程翻譯制作&#xff0c;其中參考了 Python tutorial 和 _The Python Standard Library_&#xff0c;并對原教程的內容進行了改進與補充。 相關鏈接地址如下&#xff1a; _Python tutorial_&#xff1a;Python 入門指南…

數字孿生流域:定義、組成等

數字孿生流域&#xff1a;定義、組成等 1 數字孿生流域&#xff08;Digital Twin Basin/Watershed&#xff09;總則1.1 定義1.2 適用范圍1.3 建設目標1.4 建設原則 2 數字孿生流域框架與組成2.1 數字孿生流域框架2.2 數字孿生流域組成2.2.1 數字孿生平臺2.2.2 信息化基礎設施 3…

類的裝飾器

1 使用類定義裝飾器 class Person(object):def __init__(self):self._age 0propertydef age(self):return self._ageage.setterdef age(self,newValue):print(觸發了嗎)self._age newValuep Person() print(p.age) # 0 p.age 20 print(p.age) # 20 2 類屬性 class Pe…

JavaScript學習筆記(二)

12、數字 常規用法和java的用法相似&#xff0c;就不再做詳細的記錄, JavaScript 數字 以下只記錄特殊用法&#xff1a; 12.1 數字字符串運算 在所有數字運算中&#xff0c;JavaScript 會嘗試將字符串轉換為數字&#xff1a; var x "100"; var y "10"…

探索QCS6490目標檢測AI應用開發(一):Yolov8n模型轉換及量化

目標檢測&#xff08;Object Detection&#xff09;是計算機視覺領域的核心任務之一&#xff0c;它旨在識別圖像中的物體并確定其位置&#xff0c;在本期的文章中&#xff0c;我們用一個端到端的目標檢測AI應用為例子。介紹如何在QCS6490 Ubuntu系統上實現一個目標檢測應用開發…