導航:首頁 > 操作系統 > 單片機pid調節

單片機pid調節

發布時間:2024-09-28 05:31:26

單片機實現pid控制中 pid是一種演算法

1.可以直接套用PID公式,無論增量還是絕對的。PID演算法是根據誤差來控制的演算法,不依賴系統的模型,故不用算系統的傳遞函數。有的書提到傳遞函數,一般是用於理論建模模擬,從而直接用Matlab一類的模擬軟體進行PID參數調試。得到的參數可以為實際應用提供一定參考價值。
2.PID參數整定有一套原則。首先要了解各個參數的作用。具體的整定方法,隨便找本自控原理的書都會提到,我不太記得了,大致是有一個倍數關系。但實際操作,一般不會是用這個數,是需要根據系統的反應,改變各個參數來試的。盡信書不如無書啊~
另外,不同系統的參數肯定不一樣。就算同一個系統,稍微有一些改變,可能最好的那組參數就會變化。因此衍生了很多先進PID演算法,如神經PID、專家PID、模糊PID等等。

Ⅱ 單片機如何寫PID程序

具體如下:

1、如果加入D抖動的特別厲害,試試只用PI控制。

2、還有PID參數都是一步一步調出來的,我建議你做個上位機,就是個簡單的VB串口程序,用來設置PID參數

3、然後在單片機這邊弄個串口接收程序,這里就是個簡單的串口程序,人人都會,把接收到的PID存儲在緩沖區里。

4、然後單片機程序直接調用。單片機帶EEPROM的話,當接收到改變的PID參數時,存儲這些參數。去STC官網下你的單片機資料,上面有EEPROM測試程序,直接套用。

Ⅲ 單片機PID控制問題

首先弄清楚PID是一種控制演算法!!!

1,「如果用單片機恆溫可以使溫度到達預定值就停止加熱,低了就加熱,用一個溫度感測器反饋,這樣算是一個自動控制嗎」你這是控制系統,但是效果會非常差,尤其是對於溫度控制這種大慣性系統,達到預定值就停止加熱,但是由於慣性,溫度肯定會繼續上升,電爐燒水的時候,水開了,斷電之後水還要沸騰一定時間的(沸騰是很消耗能量的,由此可見如果是加熱的話溫度上升更嚴重,你也可以自己用溫度計試試看);「低了就加熱」是同樣的道理。如果系統對控制精度有要求,你這樣做肯定達不到要求。PID是一種控制演算法,相對於其他控制演算法來說算是最簡單的了。PID能夠做到在溫度快要達到設定值的時候降低加熱功率,讓溫度上升速度變慢,最終穩定在設定值。如果用你的直接控制,溫度會在設定值上下振盪,永遠不會停在設定值。
2,一般的控制系統都需要加反饋,以構成閉環控制系統,相對的還有開環控制系統。開環控制系統,舉個例子,就是你加熱的時候事先計算好大約需要多少熱量,然後考慮一下環境影響,計算出加熱時間,然後控制加熱系統按照你這個時間加熱。你覺得這樣的系統能夠穩定工作嗎?環境稍稍有變動就掛了!開環控制系統的特點就是很容易受到環境的影響;閉環控制系統就穩定很多,你用1L水可用,2L水也行,500W電能用,1000W電爐也能用,這就是閉環的優點。
因此,大多數的控制系統都是閉環的,開環很少單獨使用,即使用到了也是有閉環的。開環其實也是有優點的,開環在控制系統裡面叫做前饋(跟反饋對應的),比如你的系統裡面電源電壓上升了,加熱速度肯定會變快,如果你對電源電壓采樣,將采樣的結果輸入到閉環裡面,對閉環做一個輕微的修正,控制的精度會更好,這就是開環的優勢,它是超前的,能夠預知結果(根據地源電壓提高就能知道需要降低輸出功率了)。

說完這些,你應該明白了,反饋是必需的(前饋也可以要,但是不是必需的),PID不能被取代(除非你用其它更復雜的控制演算法)。

Ⅳ 單片機如何加pid演算法去控制步進電機實現轉速緩慢平穩精確控制

步進電機本身是一種開環控制(open loop),一般可以通過選擇合適的步距角來決定需要的步進電機型號,通過改變脈沖個數和型號可以控制其轉動的角度和速度。
如果想要設計pid控制器,還需要選擇合適的編碼器來實現閉環控制,具體演算法你應該通過網路得到,當然反饋的信號是角度了。

Ⅳ 基於PID演算法的單片機溫度控制系統設計(實現製冷效果)

看看我以前回答過的一個問題,或許有幫助。
所謂PID指的是Proportion-Integral-Differential。翻譯成中文是比例-積分-微分。
記住兩句話:
1、PID是經典控制(使用年代久遠)
2、PID是誤差控制()
壓縮泵轉速進行控制:
1、變頻器-作為壓縮機驅動;2、溫度感測器-作為輸出反饋。
PID怎麼對誤差控制,聽我細細道來:
所謂「誤差」就是命令與輸出的差值。比如你希望控制壓縮機轉速為1500轉(「命令電壓」=6V),而事實上控制壓縮機轉速只有1000轉(「輸出電壓」=4V),則誤差: e=500轉(對應電壓2V)。如果泵實際轉速為2000轉,則誤差e=-500轉(注意正負號)。
該誤差值送到PID控制器,作為PID控制器的輸入。PID控制器的輸出為:誤差乘比例系數Kp+Ki*誤差積分+Kd*誤差微分。
Kp*e + Ki*∫edt + Kd*(de/dt) (式中的t為時間,即對時間積分、微分)
上式為三項求和(希望你能看懂),PID結果後送入電機變頻器或驅動器。
從上式看出,如果沒有誤差,即e=0,則Kp*e=0;Kd*(de/dt)=0;而Ki*∫edt 不一定為0。三項之和不一定為0。
總之,如果「誤差」存在,PID就會對變頻器作調整,直到誤差=0。
評價一個控制系統是否優越,有三個指標:快、穩、准。
所謂快,就是要使壓力能快速地達到「命令值」(不知道你的系統要求多少時間)
所謂穩,就是要壓力穩定不波動或波動量小(不知道你的系統允許多大波動)
所謂准,就是要求「命令值」與「輸出值」之間的誤差e小(不知道你的系統允許多大誤差)
對於你的系統來說,要求「快」的話,可以增大Kp、Ki值
要求「准」的話,可以增大Ki值
要求「穩」的話,可以增大Kd值,可以減少壓力波動
仔細分析可以得知:這三個指標是相互矛盾的。
如果太「快」,可能導致不「穩」;
如果太「穩」,可能導致不「快」;
只要系統穩定且存在積分Ki,該系統在靜態是沒有誤差的(會存在動態誤差);
所謂動態誤差,指當「命令值」不為恆值時,「輸出值」跟不上「命令值」而存在的誤差。不管是誰設計的、再好的系統都存在動態誤差,動態誤差體現的是系統的跟蹤特性,比如說,有的音響功放對高頻聲音不敏感,就說明功放跟蹤性能不好。
調整PID參數有兩種方法:1、模擬法;2、「試湊法」
模擬法我想你是不會的,介紹一下「試湊法」
「試湊法」設置PID參數的建議步驟:
1、把Ki與Kd設為0,不要積分與微分;
2、把Kp值從0開始慢慢增大,觀察壓力的反應速度是否在你的要求內;
3、當壓力的反應速度達到你的要求,停止增大Kp值;
4、在該Kp值的基礎上減少10%;
5、把Ki值從0開始慢慢增大;
6、當壓力開始波動,停止增大Ki值;
7、在該Ki值的基礎上減少10%;
8、把Kd值從0開始慢慢增大,觀察壓力的反應速度是否在你的要求內;

Ⅵ 如何在單片機中實現pid自整定

儀表的PID實際上就是一個控制系統,其中P表示為比例帶,它對檢測到的變化信號進行放大作用,再經過儀表輸出去控制被測介質的物理量,比如壓力、溫度、流量以及液位等;I表示積分作用,因為比例調節P雖然對被測信號的變化能得出即時的響應,但存在著靜壓現象,提高積分作用可以使變化響應信號能消除靜差;D表示微分作用,對於一些響應變化很遲緩的對象,如溫度,在進行控制時為了加快控制效果,可引入微分調節量,起到超前調節的作用,也就是說是超調。
對於PID參數的整定是一個實驗的過程,因為不同的對象條件有不同的調節規律,在整定時向將I和D關閉,比例帶放在100%,這時比例帶P的放大倍數是1,逐漸減少比例帶,也就增加放大倍數,加入測量的變化信號,檢查輸出和控制對象是否有振盪現象。所謂的振盪現象,舉個例子,對某個壓力的控制,當壓力高時,控制閥門打開一點進行釋放,當壓力低時就關閉閥門。當對這個控制系統進行PID參數調整時,先關閉I和D,設定某個P值後對控制系統加一個壓力升高的變化信號,這時如果P值過小時,即其放大倍數增大,使得其輸出信號過量增大,導致閥門開的過大,造成壓力下降過快,因為檢測到壓力因為過低,使得控制輸出信號朝相反的方向變化,即輸出信號過量減小,使得閥門有被關閉,這時壓力有很快上升,這個現象就是振盪現象。為了避免在調節中出現振盪現象,一般是小范圍的調整比例帶P參數。等調整到壓力增高時,閥門稍微開一點,壓力穩定,壓力降低時,閥門稍微關一點,保持壓力穩定,這就算是可以了。這時再增加一點積分I參數,使得比例調節存在的靜差得到消除。微分D一般是不使用。
PL/C

Ⅶ 在寫單片機PID程序時 應該是設定值減去測量值 還是 測量值減去給定值

我這有51的#include#include"global_varible.h"/*****************************************************************************模塊名:PID*描述:PID調節子程序*採用PID-PD演算法。在偏差絕對值大於△e時,用PD演算法,以改善動態品質。*當偏差絕對值小於△e時,用PID演算法,提高穩定精度。*PIDout=kp*e(t)+ki*[e(t)+e(t-1)++e(1)]+kd*[e(t)-e(t-1)]*============================================================================*入口:無*出口:無*改變:PID_T_Run=加熱時間控制*****************************************************************************/voidPID_Math(void){signedlongee1;//偏差一階//signedlongee2;//偏差二階signedlongd_out;//積分輸出if(!Flag_PID_T_OK)return;Flag_PID_T_OK=0;Temp_Set=3700;//溫度控制設定值37.00度PID_e0=Temp_Set-Temp_Now;//本次偏差ee1=PID_e0-PID_e1;//計算一階偏差//ee2=PID_e0-2*PID_e1+PID_e2;//計算二階偏差if(ee1>500)//一階偏差的限制范圍ee1=500;if(ee1200)//積分最多累計的溫差PID_e_SUM=200;if(PID_e_SUM100)//如果溫度相差大於1度時積分累計限制{if(PID_e_SUM>100)PID_e_SUM=100;if(PID_e_SUM150)PID_e_SUM=150;if(PID_e_SUM>0)//當前溫度高於設定溫度0.5度時削弱積分正輸出d_out>>=1;}PID_Out+=d_out;//PID比例,積分和微分輸出}elsePID_e_SUM=0;PID_Out/=100;//恢復被PID_Out系數放大的倍數if(PID_Out>200)PID_Out=200;if(PID_Out300)//當前溫度比設定溫度低3度則全速加熱PID_Out=200;if(PID_e0<-20)//當前溫度高於設定溫度0.2度則關閉加熱PID_Out=0;Hot_T_Run=PID_Out;//加熱時間控制輸出PID_e2=PID_e1;//保存上次偏差PID_e1=PID_e0;//保存當前偏差}////////////////////////////////////////////////////////////voidPID_Math()end.

閱讀全文

與單片機pid調節相關的資料

熱點內容
我的世界如何去更新伺服器 瀏覽:73
單片機視頻模塊 瀏覽:996
程序員的圖中的亮點在哪裡 瀏覽:657
蘋果手機伺服器地址是什麼意思 瀏覽:461
雲伺服器裡面怎麼升級d盤 瀏覽:546
java文件存入資料庫 瀏覽:89
雷特字幕出現未發現加密鎖 瀏覽:768
java線程監視 瀏覽:947
無聊的程序員日常 瀏覽:803
雲伺服器ecs項目 瀏覽:23
健康證伺服器地址是什麼意思 瀏覽:196
惠普筆記本提取壓縮軟體 瀏覽:773
市政管網水準點加密 瀏覽:951
安卓底部三鍵怎麼關閉 瀏覽:649
php高效分頁 瀏覽:15
輕閱讀的伺服器的地址是什麼 瀏覽:957
得力app如何刪除設備 瀏覽:603
怎麼把伺服器卡死 瀏覽:479
ug加密的key文件 瀏覽:165
編程理論基礎 瀏覽:311