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