久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
STM32單片機(jī)PID加溫項(xiàng)目的調(diào)試經(jīng)驗(yàn)與心得分享
[打印本頁(yè)]
作者:
xiao1934
時(shí)間:
2020-3-4 13:28
標(biāo)題:
STM32單片機(jī)PID加溫項(xiàng)目的調(diào)試經(jīng)驗(yàn)與心得分享
平時(shí)很少上論壇,偶爾查查資料的時(shí)候才會(huì)上來(lái)看看,廢話不多說(shuō)了直入主題吧(在隔壁的論壇有一個(gè)一模一樣的帖子,也是我發(fā)表的!!!,這里強(qiáng)調(diào)一下只是為了避免誤會(huì)。。。。)
手上有一個(gè)項(xiàng)目需要有加熱功能(目標(biāo)65℃左右),剛開(kāi)始也沒(méi)怎么在意,最開(kāi)始只是想著一個(gè)普通的加熱功能無(wú)非就是接近目標(biāo)溫度的時(shí)候開(kāi)始間段加溫(類似發(fā)光二極管閃爍的狀態(tài)),等到了實(shí)際加熱的時(shí)候發(fā)現(xiàn)用這種方法可以控溫,但是控溫上下幅值過(guò)高,雖說(shuō)項(xiàng)目對(duì)精度要求不高,個(gè)人有點(diǎn)強(qiáng)迫癥,想著要做就做好,然后在網(wǎng)上查詢了一下控溫方式的幾種算法,基本上90%的都是用PID,好那就開(kāi)始著手研究PID了,查閱了大量的相關(guān)文獻(xiàn),對(duì)PID的原理也懂了(能查到的都是通篇大道理,可是能實(shí)際應(yīng)用的少之又少),關(guān)于PID的算法網(wǎng)上也是一大堆,說(shuō)實(shí)話我也看不懂,也沒(méi)心思取研究他的算法,干脆直接在網(wǎng)上找源代碼好了,源代碼倒是很多,大部分都不是很完善,沒(méi)辦法只要算法是正確的就行了,有了算法,具體怎么用就只能靠自己寫(xiě)了。
下面開(kāi)始直入核心階段
1:什么是PID,PID的發(fā)展史,,這些問(wèn)題自行百度,我只簡(jiǎn)單的描述一下,比如設(shè)定65℃,當(dāng)溫度上升到60℃的時(shí)候開(kāi)始啟用PID加熱方式,然后由PID進(jìn)行溫度控制,因?yàn)橛蠵ID的存在,實(shí)際溫度會(huì)在65℃上下浮動(dòng),浮動(dòng)的精度由多種因素決定。精度控制在+-0.5℃還是很好控制的。
2 :PID公式,PID公式網(wǎng)上也是一搜一大把,我也看不懂,在網(wǎng)上找到了PID公式的源代碼那就不需要研究他是怎么計(jì)算的,沒(méi)什么意義,就跟1+1為什么等于2一樣,我們要用的是公式計(jì)算出來(lái)的值,至于為什么得到了這樣的一個(gè)值不是我們所關(guān)心的,這個(gè)值具體怎么用在網(wǎng)上能找到的相關(guān)問(wèn)題很少,至少我是沒(méi)找到的,后來(lái)經(jīng)過(guò)我反復(fù)印證,PID公式計(jì)算出來(lái)的這個(gè)值是一個(gè)任意值,所謂的任意值指的是我想要一個(gè)什么樣的結(jié)果就讓PID計(jì)算出什么樣的結(jié)果,比如,我要讓PID輸出的結(jié)果在0-100也可以,0-1000-10000-50000都可以,包括輸出負(fù)數(shù)也是可以的,PID核心的東西是我們要用到的這個(gè)值,既然這個(gè)值是由我們來(lái)控制的,那么我就把這個(gè)值控制在0-100,這個(gè)值我們已經(jīng)決定好了,這個(gè)值怎么應(yīng)用到實(shí)際工程當(dāng)中呢?
我的目標(biāo)溫度是65℃,實(shí)際溫度<=60的時(shí)候由單片機(jī)持續(xù)輸出低電平信號(hào)(持續(xù)加熱),
當(dāng)溫度>=60.1℃的時(shí)候開(kāi)始用PID加熱方式,所謂的PID加熱方式就是,把PID計(jì)算出來(lái)的值用作加熱的時(shí)間,這個(gè)時(shí)間怎么對(duì)應(yīng)呢,剛剛我們提到過(guò)PID的值由我們決定讓他的結(jié)果在0-100之內(nèi),然后我們利用定時(shí)器設(shè)置一個(gè)定時(shí)時(shí)間在10毫秒鐘的加熱周期(這里按照自己實(shí)際項(xiàng)目來(lái)調(diào)整,只能先進(jìn)行測(cè)試之后得到一個(gè)大概值,在結(jié)合實(shí)際情況來(lái)調(diào)整),當(dāng)PID算出來(lái)的結(jié)果是100,那么就是加熱10ms*100(也就是持續(xù)加熱1秒中),當(dāng)PID的值是25的時(shí)候就是加熱10*25=250ms(還有750ms是處于不加溫的時(shí)間段),這個(gè)時(shí)候PID的值和加熱的時(shí)間已經(jīng)對(duì)應(yīng)上了,這個(gè)不難理解,到了這里PID這個(gè)公式本身也算是講完了,但是在實(shí)際應(yīng)用的時(shí)候還有非常多的問(wèn)題,這次一并把個(gè)人所得得經(jīng)驗(yàn)也分享出來(lái),剛剛講到到了60.1℃就開(kāi)啟PID算法(開(kāi)啟就是讓PID公式計(jì)算一次,得到一個(gè)值,既然是要讓PID自行控溫,那么就需要不停得讓PID進(jìn)行計(jì)算,一旦PID得值發(fā)生了變化,控制加熱得時(shí)間也就變化了,那么PID多長(zhǎng)時(shí)間計(jì)算一次呢,這個(gè)問(wèn)題沒(méi)有人能回答,只能說(shuō)按照實(shí)際工程來(lái)調(diào)整,我測(cè)試加熱得時(shí)候是每2秒中計(jì)算一次,如果用在電機(jī)上進(jìn)行調(diào)速2秒中計(jì)算一次肯定不行,調(diào)速的話肯定是毫秒級(jí)別了),
3:PID參數(shù)的調(diào)整,第2部分所以的功能已經(jīng)完善了,但是要想達(dá)到很高的精度還得進(jìn)行PID的三個(gè)參數(shù)調(diào)整,P值,I值,D值,這個(gè)三個(gè)參數(shù)調(diào)整也是最費(fèi)時(shí)間的,也是最難調(diào)整的,我也是查閱了大量相關(guān)資料才慢慢調(diào)出來(lái),前前后后調(diào)了3天,第4天才算是穩(wěn)定下來(lái)了。
說(shuō)一下我的調(diào)整經(jīng)驗(yàn)吧,首先調(diào)P值,I和D全部設(shè)定為0,P值可以從1開(kāi)始調(diào),慢慢加,調(diào)到什么樣才算正常呢?還是拿我的經(jīng)驗(yàn)來(lái)說(shuō)吧,目標(biāo)溫度65℃,當(dāng)PID控制溫度在65℃上下徘徊的時(shí)候就是最佳狀態(tài)(我的實(shí)際情況是P值設(shè)定為15的時(shí)候,最高溫度是在66.3,最低溫度在63.9),簡(jiǎn)單的說(shuō)就是P值調(diào)到在目標(biāo)值在設(shè)定值上下徘徊的時(shí)候就對(duì)了(徘徊幅度越小越好)。
好了這個(gè)時(shí)候就開(kāi)始調(diào)整I值,I值得設(shè)定也是和P值一樣,慢慢調(diào)試,我剛開(kāi)始是從1開(kāi)始往上加,結(jié)果發(fā)現(xiàn)整個(gè)PID都失去控制了,因?yàn)槭堑谝淮斡肞ID也是沒(méi)經(jīng)驗(yàn),查了資料才知道I值一般都是很小,然后開(kāi)始從0.1開(kāi)始調(diào)整,反正就是一直調(diào)整呢,最后把I值調(diào)整在0.05的時(shí)候溫度已經(jīng)很平穩(wěn)了,這個(gè)時(shí)候?qū)嶋H溫度穩(wěn)定在64.5-65.4之間了,和沒(méi)有I值得時(shí)候相對(duì)穩(wěn)定一些了,關(guān)鍵得問(wèn)題是時(shí)間越長(zhǎng)越穩(wěn)定,個(gè)人覺(jué)得I值調(diào)整是在P值得基礎(chǔ)上讓實(shí)際溫度和無(wú)限接近設(shè)定溫度(上下浮動(dòng)越小越好),I值確定了,開(kāi)始調(diào)D值,D值調(diào)整的目的是為了彌補(bǔ)PID因?yàn)榄h(huán)境溫度變化或者是加熱器件的功率變化導(dǎo)致控溫誤差變大而來(lái)的,所以我在調(diào)整D值得時(shí)候拿一個(gè)扇子給加熱器件進(jìn)行加速散熱,后來(lái)把D值確定在0.03的時(shí)候發(fā)現(xiàn)用扇子額外散熱和不用扇子的已經(jīng)沒(méi)有什么區(qū)別了。調(diào)完I值得時(shí)候可以發(fā)現(xiàn)D值調(diào)不調(diào)整感覺(jué)意義也不大了,之前查到得資料D值得作用就是能預(yù)測(cè)未來(lái)(預(yù)測(cè)未來(lái)是個(gè)人得一個(gè)理解,這也是PID得精華所在),這個(gè)所謂得預(yù)測(cè)未來(lái)的值,是當(dāng)外界加熱環(huán)境或者加熱功率發(fā)生了變化依然不影響之前所調(diào)整得精度,比如你夏天調(diào)好得精度,不會(huì)因?yàn)榈搅硕於尵劝l(fā)生了變化,當(dāng)然了這個(gè)也不是絕對(duì)得,比如你之前用的是100W得加熱方式在調(diào)整,你突然把加熱器換成2000W的加熱器,那肯定是不行的,也沒(méi)有哪個(gè)PID算法能做到這么大的范圍讓它自動(dòng)調(diào)整(串級(jí)PID估計(jì)可以達(dá)到這個(gè)條件)。
//-----------------------------------
4:下面開(kāi)始分享PID源代碼是怎么使用的,
float pid_p;//P值
float pid_i;//I值
float pid_d;//D值
unsigned intZLG_pid_val_mid;//PID計(jì)算的值存放變量,
/************************ZLG_PID控制算法*************/
void ZLG_PID()
{
int dError=0,Error=0,B;
//---------------------
Error=ZLG_SpeedSet-ZLG_CurrentSpeed;//當(dāng)前誤差 //PID算法第一步 設(shè)定轉(zhuǎn)速減去當(dāng)前轉(zhuǎn)速 賦值給 Error
ZLG_sumError=Error+ZLG_sumError;//誤差和
dError=Error-ZLG_lastError;//誤差偏差
ZLG_lastError=Error;
B=pid_p*Error+pid_i*ZLG_sumError+pid_d*dError;
//----------------------
if(B>100)
ZLG_pid_val_mid=100;//pid_val_midPWM占空比寬帶/
//--------------------
if(B<0)
ZLG_pid_val_mid=0;// PWM占空比寬帶
//----------------------
if(B>=0&&B<=100)
ZLG_pid_val_mid=B;//PID計(jì)算出來(lái)的值存放在這里,
}
這個(gè)函數(shù)就是PID的核心,每調(diào)用一次就進(jìn)行一次PID的計(jì)算(每計(jì)算一次也就會(huì)得到一個(gè)PID計(jì)算出來(lái)的值,這個(gè)值就是我上面提到的加熱時(shí)間)
PID本身的計(jì)算方法這里就已經(jīng)完成了,但是這個(gè)值具體怎么使用呢,PID本身又該怎么調(diào)用呢?
我這里用到了2個(gè)定時(shí)器,定時(shí)器1每隔2秒中進(jìn)行一次PID運(yùn)算(2秒中的時(shí)間也是我調(diào)試出來(lái)的,具體項(xiàng)目具體調(diào)整),代碼如下:
if(TIM4->SR&0X0001)//溢出中斷
{
P0_xin_hao_Time++;//P0信號(hào)燈閃爍
//----------------------------
//ZLG PID運(yùn)算
if(biao_zhi_wei.ZLG_PID_kai_guan==1)//ZLGPID啟動(dòng)了,溫度到了60.1℃開(kāi)始進(jìn)行PID計(jì)算
{
ZLG_PID_Time++;//PID計(jì)算周期變量
if(ZLG_PID_Time>=2)//定時(shí)器1秒進(jìn)入一次中斷 2次就是2秒,所以每隔2秒做一次PID運(yùn)算。
{
ZLG_PID_Time=0;//清0
ZLG_PID();//每2秒中計(jì)算一次ZLG_PID的值
}
}
}
這是STM32的代碼。
我這里只貼出了運(yùn)算,具體定時(shí)器啟動(dòng)的設(shè)置就不貼出來(lái)了,大概原理就是當(dāng)溫度到了60.1℃定時(shí)器1開(kāi)始啟動(dòng),每隔2秒中產(chǎn)生一次中斷,在中斷里面進(jìn)行一次PID運(yùn)算,這個(gè)非常簡(jiǎn)單。
定時(shí)器2做為加熱時(shí)間的判斷(類似于PWM),通樣只貼出部判斷部分代碼,代碼如下:
if(biao_zhi_wei.ZLG_PID_kai_guan==1)//ZLGPID啟動(dòng)了,溫度到了60.1℃之后進(jìn)行加熱時(shí)間的判斷
{
ZLG_c++; //每次定時(shí)器溢出加1
//ccc=ZLG_c;
if(ZLG_pid_val_mid>=ZLG_c)
{
ZLG_LED=0;
//BEEP=0;
}
if(ZLG_pid_val_mid<ZLG_c)
{
ZLG_LED=1;
// BEEP=1;
}
if(ZLG_c>=100)
{
ZLG_c=0;
//ccc=ZLG_c;
}
}
}
這段代碼的原理就是,每產(chǎn)生一次中斷(中斷時(shí)間10ms)計(jì)數(shù)器+1(自己定義的一個(gè)變量),當(dāng)PID的值>=PID計(jì)算出來(lái)的值那就輸出低電平(開(kāi)啟加熱),反過(guò)來(lái)就是輸出高電平了,如果PID計(jì)算出來(lái)得值超過(guò)了100,那就持續(xù)加熱就完了.
到了這里,PID得所有東西都講完了,PID本身也不是很難,只要知道怎么用剩下得就是慢慢調(diào)整了,而且用在加熱上面算是最簡(jiǎn)單了。
簡(jiǎn)單的敘述一下PID的加熱原理
1:當(dāng)目標(biāo)溫度接近設(shè)定溫度(我設(shè)計(jì)的是相差5)開(kāi)啟PID運(yùn)算
2:定時(shí)器1每隔2秒中產(chǎn)生一次PID運(yùn)算(這個(gè)時(shí)間實(shí)際情況調(diào)整)
3:定時(shí)器2每隔10ms產(chǎn)生一次中斷并做記錄(也是實(shí)際情況調(diào)整),PID計(jì)算出來(lái)的值和記錄值想比較,時(shí)間到了就切換加熱或者不加熱
前3條整個(gè)PID的動(dòng)作都完成了,剩下的就是調(diào)整PID的 P I D三個(gè)參數(shù)
調(diào)整方法
先調(diào)P值,效果達(dá)到實(shí)際溫度在目標(biāo)溫度上下徘徊,徘徊浮動(dòng)越小越好,此時(shí)P值調(diào)完,
再調(diào)I值,I值非常,我調(diào)整的是0.05,這個(gè)時(shí)候在調(diào)整I值得時(shí)候會(huì)發(fā)現(xiàn)實(shí)際溫度和目標(biāo)溫度非常接近,上下浮動(dòng)也是非常小,直至達(dá)到要求。
最后調(diào)D值,P和I調(diào)完后我發(fā)現(xiàn)D調(diào)不調(diào)精度都是很好,后來(lái)查到D值得作用就是能預(yù)測(cè)未來(lái)(這是我自己得理解,也許有誤),D值得作用上面也提到了,這里就不再提了。
以上都是個(gè)人經(jīng)驗(yàn)所得,個(gè)人能力有限,也許很多地方理解錯(cuò)誤了,請(qǐng)多包涵。。。
作者:
到處走看
時(shí)間:
2020-3-4 21:18
實(shí)用經(jīng)驗(yàn),感謝樓主分享!
作者:
HWL0541
時(shí)間:
2020-3-6 12:50
好資料,51黑有你更精彩
作者:
神出沒(méi)
時(shí)間:
2020-3-7 09:34
最近要用PID控制加熱,學(xué)習(xí)一下
作者:
hkf145
時(shí)間:
2020-3-7 21:42
謝謝分享,學(xué)習(xí)了
作者:
willy926234097
時(shí)間:
2020-4-1 19:19
最近要用PID控制加熱,謝謝分享,學(xué)習(xí)了
作者:
life_陽(yáng)子
時(shí)間:
2020-4-2 19:03
好資料,受益匪淺
作者:
123rzq
時(shí)間:
2020-4-3 09:01
不錯(cuò),值得學(xué)習(xí)
作者:
877850311
時(shí)間:
2020-4-12 10:30
太棒了
作者:
面具下的狼性
時(shí)間:
2021-3-15 08:27
樓主可以再研究一下PID自整定的程序,這樣就可以省去繁瑣的PID三個(gè)參數(shù)設(shè)定了
作者:
曾現(xiàn)路
時(shí)間:
2021-4-19 01:20
感謝樓主的講解,聽(tīng)起來(lái)好像自己在和自己對(duì)話思考,非常有代入感
作者:
liulei99
時(shí)間:
2021-4-20 10:20
感謝分享寶貴經(jīng)驗(yàn)
作者:
love_change
時(shí)間:
2021-4-22 14:24
學(xué)習(xí)了,51黑有你更精彩
作者:
zhizhuoggg
時(shí)間:
2021-7-8 16:34
受教了,真準(zhǔn)備學(xué)32呢
作者:
開(kāi)心就好hhhh
時(shí)間:
2021-7-9 09:12
非常好,正想研究PID
作者:
xichang
時(shí)間:
2021-7-15 11:25
好資料,受益匪淺,謝謝樓主的分享。
作者:
WFX777888
時(shí)間:
2021-7-16 06:32
實(shí)用經(jīng)驗(yàn),感謝樓主分享
作者:
qq603599910
時(shí)間:
2021-7-18 11:06
我的方案要求更麻煩目前還是硬P型控制,因?yàn)樵O(shè)置溫度幅度大還有很長(zhǎng)的循環(huán)風(fēng)道帶動(dòng)熱循環(huán),從25'C到80'C,同時(shí)控制加熱和散熱風(fēng)扇一共4個(gè)(2加熱加2散熱IO).也曾經(jīng)想過(guò)PID,后來(lái)實(shí)際運(yùn)用達(dá)不到預(yù)期,還是只用P控制,基本做到-0.5&+0.5'C范圍.
作者:
hhh402
時(shí)間:
2021-7-20 21:24
要想控溫準(zhǔn)確,軟件只是輔助,關(guān)鍵還是硬件,溫度傳感器用熱電偶反應(yīng)最快,PT100最準(zhǔn)確,傳感器越小反應(yīng)越快,還有安裝位置也非常重要。硬件沒(méi)有做好但是調(diào)節(jié)軟件意義不大。
作者:
bugaosuni
時(shí)間:
2021-10-10 02:37
好帖子,超級(jí)實(shí)用
作者:
hslcac
時(shí)間:
2021-10-21 10:55
在學(xué)習(xí),非常介紹詳細(xì),非常感謝
作者:
隔壁的王叔叔
時(shí)間:
2022-5-29 22:04
好資料,51黑有你更精彩,這是手把手的教啊
作者:
shy332
時(shí)間:
2022-6-1 10:04
講解到位
作者:
清水樓臺(tái)
時(shí)間:
2022-6-30 22:15
周立功的PID程序嗎?牛逼了!~
作者:
maxsuntech
時(shí)間:
2022-8-4 12:46
收藏了,很值得參考,謝謝
作者:
曉飛
時(shí)間:
2022-8-19 17:19
樓主厲害
作者:
ysq_ok
時(shí)間:
2022-9-2 14:52
講解到位
作者:
fen913oxuan
時(shí)間:
2022-10-17 17:17
總結(jié)的非常好,頂!!!
作者:
bobo21
時(shí)間:
2023-5-27 19:32
理解了,謝謝
作者:
feihangdan
時(shí)間:
2023-6-6 09:28
感謝分享寶貴經(jīng)驗(yàn)!!!
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
欧美亚洲国产精品
|
免费一级a毛片夜夜看
|
亚洲激情一区
|
91看片网站
|
中文字幕一区二区三区视频
|
天天爽夜夜爽夜夜爽
|
黄色一级免费视频
|
亚洲免费观看视频
|
国产欧美视频在线观看
|
成人精品免费视频
|
精品国产91乱码一区二区三区
|
国产成人在线免费观看
|
不卡的av网站
|
国产ts在线
|
黄色免费在线观看视频
|
精品久久网站
|
婷婷导航
|
一级黄色免费视频
|
日本高潮视频
|
538在线视频
|
希岛爱理在线
|
a级片在线
|
欧美午夜在线
|
一区二区三区四区视频
|
一级大片免费看
|
国产成人免费观看
|
h片在线播放
|
亚洲精品自拍视频
|
亚洲一区久久
|
99小视频
|
日韩在线免费视频
|
日日操夜夜撸
|
成人国产精品久久久网站
|
国产高清免费视频
|
男人天堂手机在线
|
国产黄色免费
|
a级片久久
|
欧美日韩在线免费观看
|
av在线精品
|
国产91av在线
|
av在线播放免费
|