步驟1:基本控制理論
我認(rèn)為,添加一些基本的控制理論將為想要嘗試實(shí)施此代碼的任何人提供一個(gè)良好的基礎(chǔ)。
所附的圖是一個(gè)單回路控制器。
r-是參考。這確定了控制器需要去的地方。
e-是錯(cuò)誤。這是傳感器上的值與參考值之間的差。例如e = r-(傳感器的d +輸出)。
K-這是控制器。控制器可以由三個(gè)項(xiàng)組成。這些項(xiàng)是P,I和D。所有三個(gè)項(xiàng)的乘數(shù)分別為Kp,Ki和Kd。這些值確定控制器的響應(yīng)。
P比例。嚴(yán)格的P控制器將具有與電流誤差成比例的輸出。 P控制器易于實(shí)現(xiàn)且工作迅速,但永遠(yuǎn)不會(huì)達(dá)到您設(shè)置(參考)的值。
I-積分。嚴(yán)格積分的控制器將總結(jié)先前的誤差,最終將達(dá)到所需的參考值。該控制器通常太慢而無(wú)法實(shí)現(xiàn)。添加P項(xiàng)將減少到達(dá)參考點(diǎn)所需的時(shí)間。必須考慮對(duì)輸入采樣的時(shí)間,積分項(xiàng)是相對(duì)于時(shí)間進(jìn)行積分的。
D導(dǎo)數(shù)。導(dǎo)數(shù)項(xiàng)的輸出取決于誤差的變化率。該術(shù)語(yǔ)通常與P術(shù)語(yǔ)或PI術(shù)語(yǔ)一起使用。由于這與誤差變化率成正比,因此嘈雜的單音會(huì)放大其噪聲,這可能導(dǎo)致系統(tǒng)不穩(wěn)定。還必須考慮時(shí)間,因?yàn)閷?dǎo)數(shù)項(xiàng)也是關(guān)于時(shí)間的。
U-這是控制信號(hào)。該信號(hào)是鉆機(jī)的輸入。在此項(xiàng)目中,u是輸入到風(fēng)扇以改變速度的PWM信號(hào)。
G-這是被控制的系統(tǒng)。該系統(tǒng)可以在S或Z域中進(jìn)行數(shù)學(xué)建模。該系統(tǒng)可以是n階,但是對(duì)于剛開(kāi)始使用控制的人來(lái)說(shuō),應(yīng)該假設(shè)是一階系統(tǒng),因?yàn)檫@很容易計(jì)算。這是有關(guān)在線建模系統(tǒng)的大量信息。根據(jù)傳感器的采樣時(shí)間,系統(tǒng)的模型可以是離散的也可以是連續(xù)的。這會(huì)對(duì)控制器產(chǎn)生巨大影響,因此建議對(duì)兩者進(jìn)行研究。
d-這是添加到系統(tǒng)中的干擾。干擾是外部力量,系統(tǒng)模型無(wú)法解決。一個(gè)簡(jiǎn)單的例子是一架無(wú)人駕駛飛機(jī),您希望將其懸停在5米高的陣風(fēng)處,并將該無(wú)人駕駛飛機(jī)降落1米,在發(fā)生干擾后,控制器將重新定位該無(wú)人駕駛飛機(jī)。這被稱(chēng)為擾動(dòng),因?yàn)轱L(fēng)是不可重復(fù)的,因此無(wú)法建模。
要調(diào)整控制器,需要命名的規(guī)則太多,但我剛開(kāi)始使用的一些好規(guī)則是Cohen Coon和齊格·尼科爾斯(Zieger Nichols)。
在沒(méi)有精確模型的情況下,對(duì)系統(tǒng)建模通常是最重要的部分,因此已設(shè)計(jì)的控制器將無(wú)法根據(jù)需要做出響應(yīng)。
這里應(yīng)該有足夠的信息來(lái)了解控制器的工作方式以及一些單獨(dú)的研究,并且控制器下面的代碼可以結(jié)合使用這三個(gè)術(shù)語(yǔ)來(lái)實(shí)現(xiàn)。
步驟2:編寫(xiě)PID代碼
該代碼的基本原理位于由于此代碼不起作用,但采用了以下鏈接,并對(duì)其進(jìn)行了修改,但具有許多正確的原則,這些都是很好的起點(diǎn)。原始PID代碼有幾個(gè)錯(cuò)誤,例如
連續(xù)操作-控制器是繼承的離散控制器,因此必須將控制器設(shè)置為僅在有新輸入可用時(shí)才計(jì)算所有3個(gè)項(xiàng)。此模擬的解決方法是檢查自上次以來(lái)輸入是否已更改。這僅能模擬代碼正常工作。
采樣時(shí)間對(duì)積分和微分項(xiàng)沒(méi)有影響-控制器也沒(méi)有考慮采樣的時(shí)間,因此添加了一個(gè)稱(chēng)為時(shí)間除法器的值以確保積分和導(dǎo)數(shù)項(xiàng)在正確的時(shí)間間隔內(nèi)運(yùn)行。
錯(cuò)誤只能是正的-計(jì)算錯(cuò)誤時(shí)還存在一個(gè)問(wèn)題,因?yàn)殄e(cuò)誤永遠(yuǎn)都不能為負(fù),這意味著當(dāng)反饋信號(hào)超過(guò)參考值時(shí),控制器將繼續(xù)增加輸出值應(yīng)該遞減。
3個(gè)項(xiàng)的增益值是整數(shù)-根據(jù)我的經(jīng)驗(yàn),我經(jīng)常發(fā)現(xiàn)控制器中3個(gè)項(xiàng)的值始終是浮點(diǎn)數(shù),這是因?yàn)锽asys 3沒(méi)有必須的浮點(diǎn)數(shù)被賦予一個(gè)分子值和一個(gè)分母值,將作為解決這個(gè)問(wèn)題的工具。
該代碼附在下面,它是代碼主體和用于模擬代碼的測(cè)試平臺(tái)。 zip文件夾包含Vivado中已經(jīng)存在的代碼和測(cè)試臺(tái),因此可以打開(kāi)以節(jié)省時(shí)間。還有一個(gè)代碼的模擬測(cè)試,顯示了跟蹤參考的輸出,這證明該代碼可以正常運(yùn)行。
步驟3:如何為您的系統(tǒng)進(jìn)行修改
首先,并非所有系統(tǒng)都相同,因此必須分析系統(tǒng)的輸入和輸出。就我而言,裝備的輸出為我提供了一個(gè)位置值,它是一個(gè)模擬信號(hào),系統(tǒng)的輸入是一個(gè)PWM信號(hào)。這意味著需要ADC轉(zhuǎn)換。幸運(yùn)的是,Basys 3具有內(nèi)置ADC,因此這沒(méi)問(wèn)題,因?yàn)檫@是板載ADC的最大范圍,因此紅外傳感器的輸出必須縮小至0V-1V。這是通過(guò)使用分壓器電路完成的,該分壓器電路由1k電阻器構(gòu)成,該電阻器設(shè)置為與1k電阻器串聯(lián)的3k電阻器?,F(xiàn)在,模擬信號(hào)在ADC的范圍內(nèi)。風(fēng)扇的PWM輸入能夠由Basys 3上的PMOD端口輸出直接驅(qū)動(dòng)。
步驟4:利用Basys 3上的I/O
Basys 3上有許多I/O,可以在運(yùn)行代碼時(shí)進(jìn)行更輕松的調(diào)試。 I/O設(shè)置如下。
七段顯示-用于顯示基準(zhǔn)值和ADC上以伏特為單位的值。七段顯示的前兩位數(shù)字顯示ADC值的小數(shù)點(diǎn)后兩位,因?yàn)樵撝到橛?-1V之間。七段顯示器上的數(shù)字三和四以伏特表示參考值,這也顯示小數(shù)點(diǎn)后的前兩位,因?yàn)榉秶苍?-1V之間。
16個(gè)LED-使用LED來(lái)顯示輸出的值,以確保輸出飽和并正確更改輸出。
步驟5:IR傳感器輸出上的噪聲
傳感器輸出上有噪聲可以解決此問(wèn)題,因此放置了一個(gè)平均塊,因?yàn)檫@足夠了,需要完成的工作很少。
第6步:總體代碼布局
有一部分代碼尚未討論。此代碼是稱(chēng)為觸發(fā)器的時(shí)鐘分頻器。該代碼位觸發(fā)ADC代碼進(jìn)行采樣。 ADC代碼最多需要2us的時(shí)間才能完成,因此將當(dāng)前輸入和先前輸入進(jìn)行平均。求平均值后的1us,控制器將計(jì)算P,I和D項(xiàng)。臨時(shí)連接圖中顯示了代碼和接口的總體布局。
步驟7:測(cè)試
該代碼已部署在Basys 3上,并記錄了以下響應(yīng)。參考值在2個(gè)值之間變化。在隨附的完整項(xiàng)目代碼中就是這種情況。隨附的視頻實(shí)時(shí)顯示了此響應(yīng)。由于控制器是為此區(qū)域設(shè)計(jì)的,因此振蕩在管的上部衰減得更快,但由于系統(tǒng)是非線性的,因此控制器在管的下方無(wú)法正常工作。
第8步:修改以改進(jìn)項(xiàng)目
該項(xiàng)目按預(yù)期工作,但如果可以擴(kuò)展該項(xiàng)目,我將進(jìn)行一些修改
實(shí)施數(shù)字濾波器以完全衰減噪聲
設(shè)置ADC代碼,平均代碼和積分代碼以依次觸發(fā)。
使用其他傳感器進(jìn)行反饋,因?yàn)樵搨鞲衅鞯姆蔷€性響應(yīng)在該項(xiàng)目中引起了各種各樣的問(wèn)題,但更多的是控制方面而不是編碼方面。
步驟9:額外的工作
在整個(gè)暑假期間,我為級(jí)聯(lián)控制器編寫(xiě)了代碼,并實(shí)現(xiàn)了我為單回路PID控制器推薦的修改方案。
對(duì)常規(guī)PID控制器所做的修改
·FIR過(guò)濾器模板實(shí)施的系數(shù)必須進(jìn)行更改以實(shí)現(xiàn)所需的截止頻率。當(dāng)前的實(shí)現(xiàn)是一個(gè)5抽頭的fir濾波器。
·已經(jīng)設(shè)置了代碼計(jì)時(shí),以便該濾波器將新的樣本傳播通過(guò),并在輸出準(zhǔn)備就緒時(shí)觸發(fā)積分項(xiàng),該積分項(xiàng)將被觸發(fā)。
·驅(qū)動(dòng)程序的主for循環(huán)也已減少,因?yàn)閒or循環(huán)之前花費(fèi)了7個(gè)周期,因此變慢了。降低了控制器的最大運(yùn)行速度,但是通過(guò)減小for循環(huán)t 4狀態(tài),這意味著代碼的主要塊可以在4個(gè)時(shí)鐘周期內(nèi)運(yùn)行。
測(cè)試
此控制器已按預(yù)期進(jìn)行測(cè)試和執(zhí)行,我沒(méi)有為此證明拍照,因?yàn)樵擁?xiàng)目的這一部分只是為了保持頭腦活躍。用于測(cè)試的代碼以及測(cè)試平臺(tái)將在此處提供,因此您可以在實(shí)現(xiàn)之前測(cè)試程序。
為什么要使用級(jí)聯(lián)控制器
級(jí)聯(lián)控制器控制系統(tǒng)的兩個(gè)部分。在這種情況下,級(jí)聯(lián)控制器將具有外部回路,該外部回路是具有來(lái)自紅外傳感器的反饋的控制器。內(nèi)環(huán)具有來(lái)自轉(zhuǎn)速計(jì)的脈沖之間的時(shí)間形式的反饋,該反饋確定風(fēng)扇的轉(zhuǎn)速。通過(guò)實(shí)施控制,可以從系統(tǒng)中獲得更好的響應(yīng)。
級(jí)聯(lián)控制器的工作原理是什么?
控制器外環(huán)會(huì)向內(nèi)部環(huán)控制器饋送一個(gè)在波利之間的時(shí)間值。然后,該控制器將增加或減少占空比,以達(dá)到脈沖之間的期望時(shí)間。
在鉆機(jī)上實(shí)施修改。
很遺憾,我無(wú)法在我無(wú)法訪問(wèn)的情況下在鉆機(jī)上實(shí)施這些修改。我測(cè)試了修改后的單環(huán)控制器,該控制器可以按預(yù)期工作。我尚未測(cè)試級(jí)聯(lián)控制器。我相信控制器可以正常工作,但可能需要進(jìn)行一些細(xì)微的修改才能按預(yù)期工作。
測(cè)試
我無(wú)法像以前那樣測(cè)試控制器難以模擬兩個(gè)輸入源。我在級(jí)聯(lián)控制器上看到的唯一問(wèn)題是,當(dāng)外環(huán)試圖增加提供給內(nèi)環(huán)的設(shè)定點(diǎn)時(shí),較大的設(shè)定點(diǎn)實(shí)際上是風(fēng)扇的較低RPS,但這可以輕松解決。從設(shè)定值信號(hào)的最大值(4095-設(shè)定值-tacho_result)中取設(shè)定值。
第10步:結(jié)論
項(xiàng)目開(kāi)始時(shí)我的總體項(xiàng)目功能符合我的預(yù)期,因此我對(duì)結(jié)果感到滿(mǎn)意。感謝您抽出寶貴的時(shí)間閱讀我在VHDL中開(kāi)發(fā)PID控制器的嘗試。
-
vhdl
+關(guān)注
關(guān)注
30文章
817瀏覽量
128139 -
PID控制
+關(guān)注
關(guān)注
10文章
460瀏覽量
40096
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論