何凡鋒,劉曉波,丁浩
(首都航天機械有限公司,北京, 100076)
STM32系列單片機在無刷直流電機的控制應(yīng)用領(lǐng)域使用非常普遍[1~3]。不少開發(fā)者使用Keil μVision作為STM32的編程開發(fā)工具。不過,開發(fā)者很少挖掘使用它的特殊仿真功能,例如調(diào)試函數(shù)功能[4]、邏輯分析儀功能等。
目前,在技術(shù)上能同時實現(xiàn)C語言代碼仿真運行及STM32單片機仿真有三種方式。第一種方式,利用Keil μVision的DLL虛擬接口擴展功能進行仿真[5~7]。主要是通過VC++等開發(fā)軟件,依據(jù)電機數(shù)學(xué)模型,開發(fā)專用的DLL庫來實現(xiàn)。這種方式必須借助第三方編程軟件進行二次開發(fā),開發(fā)難度較高、周期長、實用性不強。第二種方式,通過電路仿真軟件Proteus實現(xiàn)仿真控制[8~12]。Proteus只支持少量STM32型號仿真,在兼容性方面存在不足,各種調(diào)試問題較多。第三種方式,利用Matlab Simulink實現(xiàn)無刷直流電機控制仿真并自動生成代碼[13~15]。主要是通過Simulink生成控制圖框并仿真運行,再通過RTW模塊自動生成C語言代碼。該方法直觀性好、可自動生成控程序,是目前研究熱點之一。但是,該方法存在使用配置繁瑣、代碼可讀較性差、代碼冗長執(zhí)行且效率不高等問題,并不適合容在量小、運算速度低的STM32芯片上使用。
為 減 少Matlab、Proteus、VC++等輔助工具的使用,僅在Keil μVision軟件上并實現(xiàn)無刷直流電機仿真與控制程序開發(fā)。本文提出了一種新方法,即將無刷直流電機的數(shù)學(xué)模型轉(zhuǎn)換為Keil μVision調(diào)試腳本,建立無刷直流電機仿真模型。并設(shè)計多段目標(biāo)速度曲線來驗證控制程序?qū)μ摂M電機的控制效果,同時測試實際平臺控制效果。
電機的數(shù)學(xué)模型采用二相導(dǎo)通、星形、三相六狀態(tài)形式,電壓平衡方程[16~17]整理如下:
式中,p是微分算子(d/dt);ia、ib、ic是三相電、子電流(A);ua、ub、uc是三相電子電壓(V);ea、eb、ec是三相定子的反電動勢(V);L為三相定子自感(H);M為三相定子互感(H);R為三相定子繞組的相電阻(Ω)。
電磁轉(zhuǎn)矩方程:
其中,Te為電磁轉(zhuǎn)矩(N.m);ωr為轉(zhuǎn)子角速度(rad/s)。
啟動時,速度ωr為零。如果利用公式(2)計算電磁轉(zhuǎn)矩,結(jié)果為無窮大,與實際情況不符。因此,需要將公式進行轉(zhuǎn)換。根據(jù)BLDC的反電勢波形為梯形波的特點,如圖1所示。
圖1 φa、φb、φc反電動勢波形圖
引入三個與轉(zhuǎn)子的實際電角θe有關(guān)的函數(shù)φa、φb、φc,函數(shù)各取值范圍都是[-1~+1]。根據(jù)反電動勢與轉(zhuǎn)子的轉(zhuǎn)速成正比、與梯形波成正比、與極對數(shù)成正比、與磁鏈成正比的關(guān)系,得公式:
式中,pn是電機極對數(shù);flux是單個繞組的磁鏈(Wb);θe為轉(zhuǎn)子電角度(rad)。
由公式(2)與(3),可把電磁轉(zhuǎn)矩方程轉(zhuǎn)換為:
另外,無刷電機的運動方程為:
其中,B為阻尼系數(shù)(N.m.s/rad);J為電機轉(zhuǎn)動慣量(kg.m2);TL為負(fù)載轉(zhuǎn)矩(N.m)。
根據(jù)公式(1)到(5),整理得:
其中θr為轉(zhuǎn)子的角度(rad),電角度θe關(guān)系為θe=pnθr。
將方程(6)近似離散化,采樣周期T小于最小時間常數(shù)的1/10。在一個周期T內(nèi),時間t∈[kt(k+1)T],k是自然數(shù),整理后的電機離散方程:
式中,Te(kT)=pnflux[φa(θe(kT))ia(kT)+φb(θe(kT))ib(kT)+φc(θe(kT))ic(kT)]。
Keil μVision軟件提供了一種功能強大的調(diào)試腳本語言,其語言編寫格式與C編程語言相似,是純文本文件。這里的腳本是針對STM32F103C8T6芯片而編寫,腳本的PWM端口分別是PA8、PA9、PA10、PB13、PB14、PB15,霍爾傳感器端口是PB8、PB7、PB6,主要內(nèi)如圖2所示。
圖2 電機仿真模型腳本圖
腳本的第1行,reset命令用于刷新工作區(qū);第2行,定義全局變量;第4~29行,編寫了兩個局部輔助函數(shù);第30~144行,放置了BLDC的主仿真SIGNAL信號函數(shù)。信號函數(shù)內(nèi)部由變量定義及初始化部分和主循環(huán)體部分兩部分組成。主循環(huán)體包括霍爾信號計算部分、三相電壓計算部分、反電勢計算部分、電機微分方程求解部分和輔助調(diào)試部分組成;第145行,用于啟動電機。下面介紹腳本文件的一些主要部分。
輔助函數(shù)部分由Hall和Phi_abc兩個局部函數(shù)組成。Hall局部函數(shù)用于計算霍爾高低電平信號,輸入?yún)?shù)pole表示電機的極對數(shù),rot_angle表示電機轉(zhuǎn)子當(dāng)前實際角度,hall_mounting_angle是指霍爾傳感器在電機定子靜止坐標(biāo)下的安裝角度,其返回值為0與1,0代表低電平,1代表高電平。主要工作原理是:根據(jù)轉(zhuǎn)子的NS磁極劃分成1~N個扇形區(qū),奇數(shù)扇區(qū)代表N極,偶數(shù)扇區(qū)代表S極。工作時,假想轉(zhuǎn)子是固定的,霍爾傳感器能繞著轉(zhuǎn)子轉(zhuǎn)動,轉(zhuǎn)動方向與實際轉(zhuǎn)向相反,當(dāng)轉(zhuǎn)動到the_r角度后,判斷該位置落在轉(zhuǎn)子1~N個扇區(qū)的具體區(qū),再根據(jù)扇區(qū)的極性輸出高低電平。函數(shù)內(nèi)容如下:
局部函數(shù)Phi_abc用于產(chǎn)生梯形反電勢波形,返回值在-1~+1之間。由于分段函數(shù)生成反電勢波形處理比較繁瑣,所以借鑒Matlab軟件采用cos函數(shù)方法生成梯形波替代分段函數(shù)。輸入?yún)?shù)the_e是加入了極對數(shù)的電角度。trap參數(shù)用于控制梯形波的形狀,這里參考Matlab軟件取0.5。函數(shù)內(nèi)容如下:
霍爾信號計算部分的目的是把仿真模型的轉(zhuǎn)子位置信號傳遞給STM32F103C8T6控制程序。霍爾傳感器是按120°標(biāo)準(zhǔn)安裝,分別用Ha、Hb、Hc表示,其安裝位置分別是在 60°、180°、 300°位置。主要代碼如下:
主要工作原理是:Hall函數(shù)計算轉(zhuǎn)子當(dāng)前角度下三處霍爾傳感器的高低電平,然后向芯片PB8、PB7、PB6三個霍爾信號引腳輸出電平信號,并觸發(fā)定時器TIM4的CC1G中斷。p1index、p0index是便于Hall索引計算的全局變量。_WSHORT函數(shù)系統(tǒng)自帶函數(shù),用于直接對程序段內(nèi)存地址進行寫入操作。
根據(jù)本次所用開發(fā)板硬件電路設(shè)計,STM32F103C8T6芯片的PWM控制端口輸出高電平,相應(yīng)的橋臂MOS則關(guān)閉,反之則開啟。仿真時,程序不斷地查詢PWM控制端口的電平,根據(jù)端口的電平計算Ua,Ub,Uc的電壓。主要內(nèi)容如下:
反電勢的計算比較簡單,先通過Phi_abc函數(shù)計算之后,再乘以電機極對數(shù)、轉(zhuǎn)子轉(zhuǎn)速就得到了各相反電勢。內(nèi)容如下:
電機微分方程求解部分是計算電機變量的關(guān)鍵,這部分主要依據(jù)離散公式(7)編寫,分別求解了電機的電流值、扭矩值、轉(zhuǎn)子角度和轉(zhuǎn)速。主要內(nèi)容如下:
輔助調(diào)試部分主要是對變量數(shù)值的處理,便于邏輯分析儀顯示波形,同時利用swatch系統(tǒng)函數(shù)控制仿真采樣間隔。采樣間隔m_T對計算結(jié)果有重要影響,間隔越小精度越高,但是仿真速度越慢,所以需要綜合權(quán)衡,這里取了0.000001s。內(nèi)容如下:
無刷直流電機的實際控制結(jié)構(gòu)形式如圖3所示??刂品绞讲捎梅讲刂?,反饋信號采用霍爾傳感器。采用PI閉環(huán)控制方式實現(xiàn)速度閉環(huán)控制。首先,由信號反饋模塊(Speed&Position Feedback)提供霍爾信號反饋;然后,與速度參考模塊(Ref Speed)輸出的目標(biāo)速度進行比較,得出速度偏差;最后,由PI控制模塊(PI Control)調(diào)節(jié)PWM占空比并輸出PWM控制信號驅(qū)動MOS管。PWM調(diào)制方式采用H_PWM-L _ON形式。
圖3 無刷直流電機控制框圖
仿真控制方式與實際控制方式一樣,控制代碼內(nèi)容完全相同。不同之處在于控制程序部分接收霍爾信號是由腳本代碼發(fā)出的,而控制程序發(fā)出的PWM控制信號不是驅(qū)動MOS管,而是傳遞給調(diào)試腳本。
圖4 無刷直流電機仿真控制框圖
電機仿真參數(shù):電機額定功率100W,Udc=48,極對數(shù)m_Pn=4,相電感m_L=0.00117H,互感m_M=-0.00039H,相電阻m_R=1.514Ω,磁鏈m_flux=0.0289Wb,阻尼系數(shù)m_B=1e-5N.m.s,轉(zhuǎn)動慣量m_J=24e-6kg.m2。速度環(huán)PI控制參數(shù):Kp=8/10,Ki=12/160。目標(biāo)速度曲線分六段:0~0.3s轉(zhuǎn)速為0r/min;0.3~0.9s轉(zhuǎn)速為800r/min;0.9~1.5s轉(zhuǎn)速為800r/min到1600r/min勻加速階段;1.5~2.1s轉(zhuǎn)速為1600r/min;2.1~2.7s轉(zhuǎn)速為1600r/min到800r/min勻減速階段;2.7s之后轉(zhuǎn)速為600r/min。
仿真結(jié)果如圖5所示,Keil的邏輯分析儀(Logic Analyzer)上直觀顯示了電機的8種數(shù)據(jù)波形。圖上方第一條曲線是目標(biāo)速度曲線,第二條曲線是實際速度曲線,后面六條曲線是三條反電勢曲線和三條電流曲線。可以看到,在1.946s處,實際轉(zhuǎn)速為1594,與1600目標(biāo)速度誤差僅為0.375%。從0~3.4s整個運行期間,電機的實際轉(zhuǎn)速與目標(biāo)速度達到相當(dāng)程度吻合,控制程序運行正常。
圖5 Keil軟件仿真結(jié)果
實驗平臺如圖6所示,主要由上位機、控制器、無刷電機、調(diào)試器、可調(diào)電源組成。選用的電機參數(shù)、PI控制參數(shù)和目標(biāo)速度曲線與前面提到的仿真參數(shù)完全一致。
圖6 實驗測試平臺
控制程序代碼未做任何修改,控制程序一致,包括PI調(diào)節(jié)具體參數(shù)也相同,直接刷入下位機。
實測結(jié)果如圖7所示。從圖中可以看出,在0~4s的運行期間,實際轉(zhuǎn)速有效追蹤了目標(biāo)速度,程序運行正常。在階躍階段,電機實際轉(zhuǎn)速反應(yīng)十分迅速,出現(xiàn)了12.5%的超調(diào)量及2次振蕩;在勻加速階段,實際轉(zhuǎn)速存在0.03s延時,波形斜率與目標(biāo)曲線保持一致;在勻減速階段,實際轉(zhuǎn)速同樣存在0.03s延時,波形斜率與目標(biāo)曲線保持一致。在800r/min、1600r/min、600r/min三種固定轉(zhuǎn)速下,實際轉(zhuǎn)速存在上下輕微波動,波動幅度分別為±1.75%、±1.9%、±2.7%。出現(xiàn)超調(diào)量、延時、速度波動主要跟PI參數(shù)的設(shè)置有關(guān),實際工程應(yīng)用時,可以根據(jù)情況調(diào)節(jié)修正。
圖7 測試結(jié)果
對比兩種實驗結(jié)果,我們可以看到兩種實驗結(jié)果的實際轉(zhuǎn)速波形與目標(biāo)轉(zhuǎn)速波形基本吻合。腳本虛擬的無刷電機仿真有效驗證了C語言控制程序的正確性。同時,另一方面說明將電機的數(shù)學(xué)模型離散化、腳本化來模擬無刷電機的方法是可行的。不過,在相同的PI控制參數(shù)下,控制虛擬電機沒有出現(xiàn)超調(diào)量,但控制實際電機卻出現(xiàn)超調(diào)量,其中的原因有待進一步研究。
本次研究的主要結(jié)論如下:
(1)仿真驗證后的代碼直接刷入下位機并可確保正常運行。結(jié)果表明,本文的仿真方法是一種有效的驗證C語言控制程序正確性的方法;
(2)由于無刷電機的仿真模型是采用假設(shè)條件,與實際電機不可能完全一致,存在一定差異。因此,在控制參數(shù)的具體數(shù)值方面,需要根據(jù)實際情況進行微調(diào)修正;
(3)Hall信號生成的方法是多路方波信號生成方法,可以推廣應(yīng)用于其他傳感器的模擬。例如模擬編碼器、位移傳感器、旋變解碼器等;
(4)利用Keil μVision調(diào)試腳本的無刷直流電機仿真方法,其關(guān)鍵就是將微分方程離散化。因此,能將微分方程離散化的各類可控裝置都可以轉(zhuǎn)換為調(diào)試腳本進行仿真模擬。例如,永磁同步電機、異步電機等。所以,這種方法的應(yīng)用推廣前景十分廣闊。