久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2407|回復: 20
收起左側

請教什么是PID控制?有最簡單的例程嗎?能理解的那種

  [復制鏈接]
ID:891876 發表于 2024-3-19 09:36 | 顯示全部樓層 |閱讀模式
請教如題,謝謝!
回復

使用道具 舉報

ID:69038 發表于 2024-3-19 14:06 | 顯示全部樓層
有一個很好理解的“例程”。。。
你有沒有過背上發癢,自己抓不到,請別人幫忙抓癢的經歷?
“左邊。”
“再左一點。”
“過了過了,返回去一點。”
“再返回去一小點。”
“對對對,就是這,使勁抓。。”
回復

使用道具 舉報

ID:1112840 發表于 2024-3-19 14:26 來自手機 | 顯示全部樓層
PID控制是一種常見的反饋控制算法,它通過比例(Proportional)、積分(Integral)、微分(Derivative)三個環節來調整控制器輸出,以便讓系統輸出盡可能接近期望值。簡單來說,PID控制就是一個調節過程,它可以根據當前值與目標值之間的差異(偏差),動態地調整輸出,以達到控制目標。
回復

使用道具 舉報

ID:883242 發表于 2024-3-19 15:05 | 顯示全部樓層
zhuls 發表于 2024-3-19 14:06
有一個很好理解的“例程”。。。
你有沒有過背上發癢,自己抓不到,請別人幫忙抓癢的經歷?
“左邊。”

PID就是中間有大的時間延遲環節的控制方法,從發出命令到實際執行有很長時間的不響應,其目的就是為了防止你說的“過了過了,返回去一點。”這種事情的發生。如果允許“過了”,完全沒必要用PID,直接反饋多簡單啊!
回復

使用道具 舉報

ID:69038 發表于 2024-3-19 15:19 | 顯示全部樓層
Hephaestus 發表于 2024-3-19 15:05
PID就是中間有大的時間延遲環節的控制方法,從發出命令到實際執行有很長時間的不響應,其目的就是為了防 ...

某些執行有慣量存在,一下子調整過頭是很正常的。
而如果一味的延遲,又似乎達不到快速控制的目的。
所以,調節量在目標值附近往返拉鋸、飄忽不定,也算是正常的。
記得做過一款U段射頻產品,是PLL+VCO方式 ,PLL輸出就是一個類似三角波疊加一個直流成分的波形。當然,這個三角波有幅度很小。

回復

使用道具 舉報

ID:961114 發表于 2024-3-19 16:55 | 顯示全部樓層
四軸飛控里 都有PID的應用 四軸飛控-STC32G12K128-LQFP48.zip (219.1 KB, 下載次數: 26)
回復

使用道具 舉報

ID:517951 發表于 2024-3-20 07:40 | 顯示全部樓層
PID 在車輛行駛中的應用: 定速巡航功能, 當車行駛途中有上坡時候, 單片機自動加油門; 下坡時候, 單片機自動減油門, 這樣時鐘保持速度恒定. 80km時速設定100km時速, 單片機會自動加油門加速到100km的時速后,維持100km速度保持恒速.
回復

使用道具 舉報

ID:420836 發表于 2024-3-20 08:24 | 顯示全部樓層
這個論壇里有很多PID控制的例子。 可以搜索一些最好的并從中學習。
回復

使用道具 舉報

ID:458247 發表于 2024-3-20 08:41 | 顯示全部樓層
rayin 發表于 2024-3-20 07:40
PID 在車輛行駛中的應用: 定速巡航功能, 當車行駛途中有上坡時候, 單片機自動加油門; 下坡時候, 單片機自動 ...

自適應巡航不是用的pid,是另一種算法;定速巡航不太清楚
回復

使用道具 舉報

ID:401564 發表于 2024-3-20 12:48 | 顯示全部樓層
首先,你要把PID里的微積分之類的排除,雖然它是這么叫的,但它本質上只有加法和簡潔,除法
以溫度為例子
P就是比例,假設你設定的P為10,設定溫度為100度,當前溫度為50
那么,這個時候,P項的輸出為: (100 - 50) * 10 = 500,這個500可能換算成PWM的占空比,或者是加熱功率,這其中的換算過程,可以認為是在調試PID的過程
I就是積分項,就是把誤差不斷的累加,累加的結果可能是正數,也可能是負數,再*I,加上P項,就是一個PI輸出的結果了
這就是PI控制,這里面沒有說到D項,因為PI控制能解決大多的問題,一旦你理解了PI控制,自然就能理解PID控制了
回復

使用道具 舉報

ID:1110945 發表于 2024-3-20 13:32 | 顯示全部樓層
以前在網上抄的一段,記不清在哪兒抄的了。

pid算法詳細介紹
  一、PID算法簡介
  在智能車競賽中,要想讓智能車根據賽道的不斷變化靈活的行進,PID算法的采用很有意義。
  首先必須明確PID算法是基于反饋的。一般情況下,這個反饋就是速度傳感器返回給單片機當前電機的轉速。簡單的說,就是用這個反饋跟預設值進行比較,如果轉速偏大,就減小電機兩端的電壓;相反,則增加電機兩端的電壓。
  顧名思義,P指是比例(Proportion),I指是積分(Integral),D指微分(Differential)。在電機調速系統中,輸入信號為正,要求電機正轉時,反饋信號也為正(PID算法時,誤差=輸入-反饋),同時電機轉速越高,反饋信號越大。要想搞懂PID算法的原理,首先必須先明白P,I,D各自的含義及控制規律:
  比例P:比例項部分其實就是對預設值和反饋值差值的發大倍數。舉個例子,假如原來電機兩端的電壓為U0,比例P為0.2,輸入值是800,而反饋值是1000,那么輸出到電機兩端的電壓應變為U0+0.2*(800-1000)。從而達到了調節速度的目的。顯然比例P越大時,電機轉速回歸到輸入值的速度將更快,及調節靈敏度就越高。從而,加大P值,可以減少從非穩態到穩態的時間。但是同時也可能造成電機轉速在預設值附近振蕩的情形,所以又引入積分I解決此問題。
  積分I:顧名思義,積分項部分其實就是對預設值和反饋值之間的差值在時間上進行累加。當差值不是很大時,為了不引起振蕩。可以先讓電機按原轉速繼續運行。當時要將這個差值用積分項累加。當這個和累加到一定值時,再一次性進行處理。從而避免了振蕩現象的發生。可見,積分項的調節存在明顯的滯后。而且I值越大,滯后效果越明顯。
  微分D:微分項部分其實就是求電機轉速的變化率。也就是前后兩次差值的差而已。也就是說,微分項是根據差值變化的速率,提前給出一個相應的調節動作。可見微分項的調節是超前的。并且D值越大,超前作用越明顯。可以在一定程度上緩沖振蕩。比例項的作用僅是放大誤差的幅值,而目前需要增加的是“微分項”,它能預測誤差變化的趨勢,這樣,具有比例+微分的控制器,就能夠提前使抑制誤差的控制作用等于零,甚至為負值,從而避免了被控量的嚴重超調。
  由各個參數的控制規律可知,比例P使反應變快,微分D使反應提前,積分I使反應滯后。在一定范圍內,P,D值越大,調節的效果越好。
  二、PID調試一般原則
  a. 在輸出不振蕩時,增大比例增益P。
  b. 在輸出不振蕩時,減小積分時間常數Ti。
  c. 輸出不振蕩時,增大微分時間常數Td。
  三、pid算法參數調整一般步驟
  a.確定比例增益P
  確定比例增益P 時,首先去掉PID的積分項和微分項,一般是令Ti=0、Td=0,PID為純比例調節。輸入設定為系統允許的最大值的60%~70%,由0逐漸加大比例增益P,直至系統出現振蕩;再反過來,從此時的比例增益P逐漸減小,直至系統振蕩消失,記錄此時的比例增益P,設定PID的比例增益P為當前值的60%~70%。比例增益P調試完成。
  b.確定積分時間常數Ti
  比例增益P確定后,設定一個較大的積分時間常數Ti的初值,然后逐漸減小Ti,直至系統出現振蕩,之后在反過來,逐漸加大Ti,直至系統振蕩消失。記錄此時的Ti,設定PID的積分時間常數Ti為當前值的150%~180%。積分時間常數Ti調試完成。
  c.確定積分時間常數Td
  積分時間常數Td一般不用設定,為0即可。若要設定,與確定 P和Ti的方法相同,取不振蕩時的30%。
  d.系統空載、帶載聯調,再對PID參數進行微調,直至滿足要求
  找三個以上PID算法應用實例,結合實例明確參數調試的方法以及參數的意義,同時給小組成員做介紹
  四、pid算法應用環境
  當被控對象的結構和參數不能完全掌握,或得不到精確的數學模型時,控制理論的其它技術難以采用時,系統控制器的結構和參數必須依靠經驗和現場調試來確定;(由于賽道的參數事先未知,所以只能根據實時采集到的賽道數據控制小車沿著賽道行進)。
  五、PID算法原理
  在工業應用中PID及其衍生算法是應用最廣泛的算法之一,是當之無愧的萬能算法,如果能夠熟練掌握PID算法的設計與實現過程,對于一般的研發人員來講,應該是足夠應對一般研發問題了,而難能可貴的是,在我所接觸的控制算法當中,PID控制算法又是最簡單,最能體現反饋思想的控制算法,可謂經典中的經典。經典的未必是復雜的,經典的東西常常是簡單的,而且是最簡單的,想想牛頓的力學三大定律吧,想想愛因斯坦的質能方程吧,何等的簡單!簡單的不是原始的,簡單的也不是落后的,簡單到了美的程度。先看看PID算法的一般形式:
  PID的流程簡單到了不能再簡單的程度,通過誤差信號控制被控量,而控制器本身就是比例、積分、微分三個環節的加和。這里我們規定(在t時刻):
  1.輸入量為rin(t);
  2.輸出量為rout(t);
  3.偏差量為err(t)=rin(t)-rout(t);
  pid的控制規律為
  理解一下這個公式,主要從下面幾個問題著手,為了便于理解,把控制環境具體一下:
  1.規定這個流程是用來為直流電機調速的;
  2.輸入量rin(t)為電機轉速預定值;
  3.輸出量rout(t)為電機轉速實際值
  4.執行器為直流電機;
  5.傳感器為光電碼盤,假設碼盤為10線;
  6.直流電機采用PWM調速轉速用單位轉/min表示;不難看出以下結論:
  1.輸入量rin(t)為電機轉速預定值(轉/min);2.輸出量rout(t)為電機轉速實際值(轉/min);3.偏差量為預定值和實際值之差(轉/min)
  六、PID算法應用——線性控制原理
  PID控制的三要素:控制器,被控對象,反饋器。控制器就是一個數學模型,就PID來說,等同于PID算法。是對反饋量的一個處理與輸出。通俗的說就是對于每個被控的量,我的輸出量通過什么函數式算出,或者說,我如何描述我的輸出量。現在我給定一個描述性的傳遞函數。從數學角度來看:它的自變量是反饋值,當這個函數的對應關系確定了之后,輸出量就是個定值了。我的希望是:這個描述函數是一個透明的空箱——它既能反映系統外部特性,又可以看到其內部結構。
  就拿比賽來說:假設我現在要構建這樣一個閉環系統,這個系統的反饋調節建立了一個描述函數,最根本的在于:
  1 這個系統的動態性從根本上講取決于哪些因素;2這些因素如何決定系統的性能;
  數學模型的描述:1 描述函數-》微分方程。描述函數的自變量與因變量滿足微分方程。(瞬間變化的關系式)
  2 將微分方程做一個處理,得出其特征方程,這個特征方程稱作描述函數的極點。
  ps:下面簡述一下極點和零點。對描述函數做拉普拉斯變換,將描述函數變換成一個與它本身相關的函數,并找出其通解和特解,通解是這個函數的開環特征,用來描述輸出與輸入的關系,零點是調節變量,用于閉環中對系統反饋參數的調節。(對函數做拉普拉斯變換事實上是針對描述大多函數是常微分方程的一種現象)
  我們有必要對這個描述函數的解進行研究,盡管在線性控制原理中并不關注并不要求去了解他,但是對于這個常微分方程的極點形式的了解有助于我們認識這個描述函數的物理意義。這是高數的知識,就不再累述。通過求解,可以看到極點其實就是這個經過拉普拉斯變換的描述函數的一次項的系數,零點是反饋量的相關函數的系數。也就是說,極點一旦確定,這個函數也就確定了,對于每一個輸入函數,賦予零點變換,再進過極點變換 ,最后生成輸出量。
  把我們現在得到的結論聯系一下:對于一個閉環的系統我們通過對控制器一些參數的理論求解,或者說調試求解,最終改變輸出變量,從而使這個系統持續穩定。也就是說,在控制器內,存儲了有關于反饋值某種預期的實現方法,這些方法用一些固定的參數來描述,然后輸出變量改變系統的狀態。我的任務是調試這些具有物理意義的參數。
  下面是一個簡單的PID程序設計:
  double kp,ki,kd;
  double resultfunc(void)
    {
    double error;
    double diff;
    double lasterror = 0;
    error = target - input;
    sumerror += error;
    diff = error - lasterror;
    lasterror = error;
    output = kp * error + ki * sumerror + kd * diff;
    return output;
    }
  你會發現其實想象中的PID要比現實中的PID復雜很多,這是理所當然的,因為經過PID數學計算之后,帶入的公式只是一個近似量。但是這可不是隨便瞎設的一個值,最重要的是,你需要數學計算。
  不得不說一下,對于一個完全的門外漢來說,PID是一個十分高神的名詞,很多人一上手就接觸PID,結果連輸出輸入的到底是什么都搞不明白,其實不妨接觸一下線性控制的理論,這對于你的視野和思路有及其清晰的指導。
  參數整定尋最佳,從小到大順序查;
  先是比例后積分,最后才把微分加;
  曲線振蕩很頻繁,比例度盤要放大;
  曲線漂浮繞大彎,比例度盤往小扳;
  曲線偏離回復慢,積分時間往下降;
  曲線波動周期長,積分時間再加長;
  曲線振蕩變很快,先把微分降下來;
  動差大來波動慢,微分時間要加長;
  聯想曲線兩個波,前高后低4比1;
  一看二調多分析,調節質量不會低。
回復

使用道具 舉報

ID:883242 發表于 2024-3-20 17:17 | 顯示全部樓層
樓上幾位從網上抄資料的都不知道PID算法本身非常簡單,但是找出P、I、D三個參數的值,才是最難的。
回復

使用道具 舉報

ID:1034262 發表于 2024-3-20 22:40 | 顯示全部樓層
其實很簡單。
error = SetPosition - position;  // 計算誤差
Integral += error;    // 計算誤差積分
pidTerm  = error * pGain + Integral * iGain - (position - PrePosition) * dGain; // 計算輸出
PrePosition = position;    // 保存當前位置
回復

使用道具 舉報

ID:1113684 發表于 2024-3-21 13:43 | 顯示全部樓層
PID控制,全稱比例-積分-微分控制,是一種廣泛應用于工業控制系統和需要連續調制控制的其他各種應用中的控制回路反饋機制。它的基本原理是根據被控對象的當前狀態與設定值之間的差異來調整輸出信號,使得差異趨近于零。PID控制器根據比例(P)、積分(I)、微分(D)三個部分的權重組合來計算輸出信號,從而實現對被控對象的精確控制。

比例(P)控制:根據當前誤差的大小來調整控制器的輸出。當誤差較大時,輸出信號也較大,從而加快被控對象的響應速度。比例控制可以使系統快速接近設定值,但可能會引起超調和震蕩。
積分(I)控制:根據誤差隨時間累積的量來調整控制器的輸出。它能夠消除系統的穩態誤差,確保系統最終穩定在設定值附近。
微分(D)控制:根據誤差變化的速率來調整控制器的輸出。它能夠預測系統未來的狀態變化趨勢,從而減小超調和提高系統的穩定性。微分控制的引入可以抑制系統的震蕩,但同時也會增加系統對噪聲的敏感性。
PID控制器能夠自動對控制功能進行精確和及時的校正。例如,在汽車的巡航控制中,PID算法可以通過調整發動機的功率輸出,以最小的延遲和過沖將測量的速度恢復到期望值。

總的來說,PID控制通過結合比例、積分和微分控制的特點,實現對被控對象的快速、準確和平穩的控制,廣泛應用于機電、冶金、機械、化工等行業。
#include <stdio.h>  
  
// 定義PID控制器結構體  
typedef struct {  
    double setpoint;      // 設定值  
    double kp;            // 比例系數  
    double ki;            // 積分系數  
    double kd;            // 微分系數  
    double last_error;    // 上一次誤差  
    double integral;      // 誤差積分  
} PID_Controller;  
  
// PID控制函數  
double PID_Control(PID_Controller *pid, double feedback) {  
    double error = pid->setpoint - feedback;       // 計算誤差  
    double derivative = error - pid->last_error;   // 計算誤差的微分  
    pid->integral += error;                        // 累計誤差的積分  
    double output = pid->kp * error + pid->ki * pid->integral + pid->kd * derivative; // 計算輸出  
    pid->last_error = error;                       // 更新上一次誤差  
    return output;  
}  
  
int main() {  
    PID_Controller pid;  
    pid.setpoint = 1.0;          // 設定值為1.0  
    pid.kp = 0.5;               // 比例系數  
    pid.ki = 0.1;               // 積分系數  
    pid.kd = 0.01;              // 微分系數  
    pid.last_error = 0.0;  
    pid.integral = 0.0;  
  
    double feedback = 0.2;     // 初始反饋值  
    double output;  
  
    // 進行PID控制  
    for (int i = 0; i < 10; i++) {  
        output = PID_Control(&pid, feedback);  
        printf("Step %d: Output = %f, Feedback = %f\n", i, output, feedback);  
        // 模擬系統響應,這里簡單地假設系統響應是輸出值的線性關系  
        feedback += output * 0.1;  
    }  
  
    return 0;  
}
回復

使用道具 舉報

ID:883242 發表于 2024-3-21 16:50 | 顯示全部樓層
wdsoe 發表于 2024-3-21 13:43
PID控制,全稱比例-積分-微分控制,是一種廣泛應用于工業控制系統和需要連續調制控制的其他各種應用中的控 ...

還是沒弄清楚P、I、D三個參數是怎么編出來的。
回復

使用道具 舉報

ID:891876 發表于 2024-3-21 20:19 | 顯示全部樓層
曉得個大概了,但還沒弄清楚原由,=不知道
回復

使用道具 舉報

ID:675030 發表于 2024-3-22 11:46 | 顯示全部樓層
加油初步理解有幫助:http://www.zg4o1577.cn/bbs/dpj-86786-1.html
回復

使用道具 舉報

ID:401564 發表于 2024-3-22 12:54 | 顯示全部樓層
芙蓉焊料 發表于 2024-3-21 20:19
曉得個大概了,但還沒弄清楚原由,=不知道

不要去看網上那些帶一堆微積分公式的教程,那大多是抄人的,可能講解者自己都不知道什么叫PID
P就是比例控制,過大或者過小都不行
I就是誤差累加,這個累加是在程序運行時候一直進行的
PI的參數調節是一個工作量很大的過程,多調節幾次就能明白原理了
回復

使用道具 舉報

ID:883242 發表于 2024-3-22 15:30 | 顯示全部樓層
Y_G_G 發表于 2024-3-22 12:54
不要去看網上那些帶一堆微積分公式的教程,那大多是抄人的,可能講解者自己都不知道什么叫PID
P就是比例控 ...

搜Ziegler-Nichols method,要求不是太高可以一次試出來。
回復

使用道具 舉報

ID:1055047 發表于 2024-3-26 12:48 | 顯示全部樓層
在比例、積分和微分的線性組合,構成控制量u(t),稱為:比例(Proportional)、積分(Integrating)和微分(Differentiation)控制,簡稱PID控制。比例作用P只與偏差成正比,積分作用I是偏差對時間的累積,而微分作用D是偏差的變化率。用一句形象的比喻,比例P代表著現在,積分I代表著過去,而微分D則代表著未來。
回復

使用道具 舉報

ID:993578 發表于 2024-3-26 17:05 | 顯示全部樓層

PID控制是一種常見的反饋控制算法,它通過比例(Proportional)、積分(Integral)、微分(Derivative)三個環節來調整控制器輸出,以便讓系統輸出盡可能接近期望值。簡單來說,PID控制就是一個調節過程,它可以根據當前值與目標值之間的差異(偏差),動態地調整輸出,以達到控制目標。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99精品欧美一区二区蜜桃免费 | 亚洲电影免费 | h在线免费观看 | 91成人 | a视频在线观看 | 亚洲九色| 国产精品一区二区av | 久久精品国产亚洲一区二区三区 | av成人在线观看 | 高清国产午夜精品久久久久久 | 亚洲 成人 在线 | 国产精品亚洲第一 | 国产成人精品一区二区在线 | 亚洲精品区 | 国产免费视频 | 免费在线看a| 欧美一区二区三区视频 | 国产日韩一区二区三区 | 91精品免费视频 | 两性午夜视频 | 中文字幕亚洲一区二区三区 | 亚洲网址在线观看 | 欧美成人激情 | 美日韩精品 | 欧美亚洲国产日韩 | 国产精品欧美一区二区 | 国产精品视频一区二区三区 | 亚洲精品91| 中文字幕成人 | 日本偷偷操 | 2021天天躁夜夜看 | 国产精品精品 | 久热国产精品视频 | 一级全黄视频 | 国产在线精品一区二区三区 | 欧美国产精品一区二区三区 | 成av人电影在线 | 九九综合| 黑人中文字幕一区二区三区 | 亚洲国产情侣 | 毛片一区二区三区 |