卿金暉, 胡黃水, 王宏志
(長春工業大學 計算機科學與工程學院, 吉林 長春 130012)
現有的無刷直流電機(Brushless Direct Current Motor, BLDCM)控制算法大多采用PID控制算法,經典的PID控制主要是針對準確的模型有較好的控制效果,但隨著科技的發展,無論是在工業控制還是醫療行業,設計的產品控制系統更為復雜,更容易出現非線性、耦合等問題,從而影響電機的控制精度,所以對電機的控制方法提出了更高要求。
為了解決上述問題,許多學者對無刷直流電機的PID控制器進行研究[1-3]。文獻[4-5]采用FPGA設計PID控制器,雖然在硬件設計上避免了單片機、DSP等芯片自身資源不足,無法實現復雜的控制系統等問題,但實際上實現的還是經典PID算法,非線性、滯后性現象仍然存在,依舊無法滿足現代化工藝設計需求。文獻[6-7]針對無刷直流電機調速系統的PI調節器中參數無法隨系統參數的變化而變化的問題,設計了模糊PI控制系統,并通過daPIC30F4011設計了模糊PI控制器,但不考慮微分部分,無法避免控制器中產生的振蕩等問題。
文中針對傳統PID控制器不能滿足現有復雜控制系統對控制精度的要求,設計了基于FPGA的無刷直流電機模糊PID控制器,仿真結果表明,設計的模糊PID控制系統具有響應時間短、控制精度高等優點。
常規的PID控制原理是根據期望輸出r(t)與實際輸出y(t)之間的誤差e(t)作為輸入,對輸入的誤差e(t)進行比例、積分及微分運算,控制調節輸出u(k),對電機進行實時控制[8-10],其誤差信號可表示為
e(t)=r(t)-y(t)。
(1)
常規的PID控制算法數學表達式可表示為
(2)
式中:kp----比例系數;
Ti----積分系數;
Td----微分系數。
將其離散化,得到k時刻的輸出

(3)
同樣,k-1時刻輸出
u(k-1)=

(4)
式(3)減去式(4)可得出PID控制器輸出增量
Δu(k)=u(k)-u(k-1)=
Ae(k)+Be(k-1)+Ce(k-2),
(5)
遞歸控制輸出為
u(k)=u(k-1)+Δu(k)=
u(k-1)+Ae(k)+Be(k-1)+Ce(k-2),
(6)
其中

(7)
增量式PID結構框架如圖1所示。

圖1 增量式PID結構框架
模糊PID控制原理是在常規PID控制器的基礎上添加模糊控制器對PID控制器中的kp,ki,kd三個參數進行修改[11]。

(8)


圖2 模糊PID控制原理
模糊控制器無法直接使用精確值,需將其進行模糊化處理。文中首先對輸入的誤差和誤差變化率進行模糊化,然后設置模糊語言變量和論域,最后通過模糊控制器得到相應的輸出模糊量[12]。誤差和誤差變化率的模糊語言變量設置為:負大(NB)、負中(NM)、負小(NS)、零(ZO)、正小(PS)、正中(PM)、正大(PB),它們的論域為[-3,3][11],因此,文中輸入變量e和輸出變量kp的隸屬函數分別如圖3和圖4所示。

圖3 輸入變量e的隸屬函數

圖4 輸出變量kp的隸屬函數
模糊控制規則是模糊控制器的關鍵,運用合適的模糊規則可以使控制效果達到最佳[13]。
文中在不同的|e|,|ec|下,對被控對象參數kp,ki,kd的自整定要求如下:
1)當|e|較大時,需要較好的快速跟蹤功能,取較大的kp和較小的kd,同時需防止超調,需要對積分項進行限制,可以使ki=0。
2)當|e|中等大小時,為使系統響應具有較小的超調,取較小的kp,同時取適中大小的ki和kd。
3)當|e|較小時,系統將趨于穩定,此時系統具有較好的穩定性,取較大的kp和ki。為避免系統在設定值附近振蕩,kd由此時的|ec|決定:|ec|較小時,取較大的kd;|ec|較大時,取較小的kd。
依據式(8)將kp,ki,kd做出相應變換,文中通過在Matlab中的仿真結果以及專家經驗,建立了Δkp,Δki,Δkd的模糊規則表,分別見表1~表3。

表1 Δkp模糊規則

表2 Δki模糊規則

表3 Δkd模糊規則
根據模糊規則推理出來的是模糊量,需要通過解模糊轉化為精確值,文中采用重心法對模糊量清晰化處理,即

(9)
式中:μj(e,ec)----隸屬度函數值;
r----模糊規則數目。
計算出清晰值后,根據清晰值得到kp,ki,kd模糊控制器查詢表,最后根據式(8)即可得到調整后的kp,ki,kd值。
根據模糊PID控制的特點,為實現該控制器的實時性和穩定性,同時在考慮價格方面之后,選用Altera的Cyclone Ⅳ系列的開發板DE2-115。模糊控制器的FPGA實現采用模塊化設計,主要由fuzzy模塊和PID模塊兩個部分組成。模糊PID核心算法邏輯結構如圖5所示。

圖5 模糊PID核心算法邏輯結構
其中在PID模塊是由硬件描述語言對傳統的PID算法進行描述,并增加了PID參數整定端口。fuzzy模塊完成對PID的參數調節,并傳遞給PID部分。在fuzzy模塊中,使用Matlab的模糊工具平臺,搭建模糊控制模型,并結合Simulink工具箱對模型進行仿真,將合適的kp,ki,kd參數查詢表寫入Quartus的.mif文件,存儲在由Altera提供的IP核ROM中。可以根據反饋回來的誤差e和誤差變化率ec進行尋址操作。當得到某一時刻的e和ec時,先對其進行模糊化,再通過模糊值依次查找當前時刻kp,ki,kd所對應的清晰值,并作為輸出傳遞給下一部分。
Quartus Ⅱ RTL視圖如圖6所示。

圖6 Quartus Ⅱ RTL視圖
圖6中clk,rst_n分別為系統的時鐘信號和復位信號,引腳rt,y_in分別為給定轉速值和實際轉速值。f_start為模糊模塊的使能信號,當為高電平時模糊模塊開始工作。每當模糊模塊完成一次工作,fuzzy_done輸出一次高電平,并將通過kp,ki,kd三個引腳分別輸出此時的Δkp,Δki,Δkd值,當PID模塊接收到Δkp,Δki,Δkd之后,通過uk引腳輸出經過處理后的控制量。同時將PID模塊完成標志位信號pid_done置高電平。
整個核心算法部分均采用硬件描述語言Verilog HDL進行描述,結構清晰,思路明了,各個部分并行運行,大大加快了運行速度,提高了系統的穩定性。整個算法模塊均用Verilog HDL硬件描述語言構建而成,充分利用了硬件并行執行速度快和抗干擾性強的優勢。同時,整個算法的構建采用模塊化設計思想,功能劃分清晰,具有很強的邏輯性和靈活性。
通過在ModelSim中對編寫的程序進行仿真分析,設期望轉速為2 000 r/min,傳統PID和模糊PID的kp,ki,kd初值分別設置為1.78,0.03和2.99,硬件系統時鐘周期為50 MHz。在ModelSim中部分仿真如圖7所示。

圖7 ModeSim中的電機轉速仿真結果
其中fuzzy_pid表示模糊PID控制的轉速值,tr_pid表示傳統PID控制的轉速值。通過Matlab對ModelSim中得到的PID控制器的輸出數據進行圓滑擬合處理,得到的擬合仿真如圖8所示。

圖8 Matlab中擬合ModeSim數據的轉速曲線
由圖中可以看出,fuzzy_pid在0.08 s的時候,轉速初步接近2 000 r/min,并在0.1 s左右轉速趨于穩定;tr_pid在0.3 s時接近2 000 r/min,并在0.38 s時趨于穩定。模糊PID和傳統PID都能在0.38 s之前達到設定值2 000 r/min的轉速。但與傳統的PID相比,模糊PID能更加快速地到達設定值,并且超調量小。由此可以看出,模糊PID較傳統PID具有響應速度更快速、超調量更小的優勢。
設計了基于FPGA的無刷直流電機模糊PID控制器,在傳統PID控制的基礎上增加了模糊控制算法,通過ModelSim仿真出實驗數據,利用Matlab擬合數據。結果表明,采用FPGA設計的無刷直流電機模糊PID控制器相比于傳統控制器具有響應速度快、超調量小等優點。