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