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