何凡鋒,劉曉波,丁浩
(首都航天機械有限公司,北京, 100076)
STM32系列單片機在無刷直流電機的控制應用領域使用非常普遍[1~3]。不少開發者使用Keil μVision作為STM32的編程開發工具。不過,開發者很少挖掘使用它的特殊仿真功能,例如調試函數功能[4]、邏輯分析儀功能等。
目前,在技術上能同時實現C語言代碼仿真運行及STM32單片機仿真有三種方式。第一種方式,利用Keil μVision的DLL虛擬接口擴展功能進行仿真[5~7]。主要是通過VC++等開發軟件,依據電機數學模型,開發專用的DLL庫來實現。這種方式必須借助第三方編程軟件進行二次開發,開發難度較高、周期長、實用性不強。第二種方式,通過電路仿真軟件Proteus實現仿真控制[8~12]。Proteus只支持少量STM32型號仿真,在兼容性方面存在不足,各種調試問題較多。第三種方式,利用Matlab Simulink實現無刷直流電機控制仿真并自動生成代碼[13~15]。主要是通過Simulink生成控制圖框并仿真運行,再通過RTW模塊自動生成C語言代碼。該方法直觀性好、可自動生成控程序,是目前研究熱點之一。但是,該方法存在使用配置繁瑣、代碼可讀較性差、代碼冗長執行且效率不高等問題,并不適合容在量小、運算速度低的STM32芯片上使用。
為 減 少Matlab、Proteus、VC++等輔助工具的使用,僅在Keil μVision軟件上并實現無刷直流電機仿真與控制程序開發。本文提出了一種新方法,即將無刷直流電機的數學模型轉換為Keil μVision調試腳本,建立無刷直流電機仿真模型。并設計多段目標速度曲線來驗證控制程序對虛擬電機的控制效果,同時測試實際平臺控制效果。
電機的數學模型采用二相導通、星形、三相六狀態形式,電壓平衡方程[16~17]整理如下:

式中,p是微分算子(d/dt);ia、ib、ic是三相電、子電流(A);ua、ub、uc是三相電子電壓(V);ea、eb、ec是三相定子的反電動勢(V);L為三相定子自感(H);M為三相定子互感(H);R為三相定子繞組的相電阻(Ω)。
電磁轉矩方程:

其中,Te為電磁轉矩(N.m);ωr為轉子角速度(rad/s)。
啟動時,速度ωr為零。如果利用公式(2)計算電磁轉矩,結果為無窮大,與實際情況不符。因此,需要將公式進行轉換。根據BLDC的反電勢波形為梯形波的特點,如圖1所示。

圖1 φa、φb、φc反電動勢波形圖
引入三個與轉子的實際電角θe有關的函數φa、φb、φc,函數各取值范圍都是[-1~+1]。根據反電動勢與轉子的轉速成正比、與梯形波成正比、與極對數成正比、與磁鏈成正比的關系,得公式:

式中,pn是電機極對數;flux是單個繞組的磁鏈(Wb);θe為轉子電角度(rad)。
由公式(2)與(3),可把電磁轉矩方程轉換為:

另外,無刷電機的運動方程為:

其中,B為阻尼系數(N.m.s/rad);J為電機轉動慣量(kg.m2);TL為負載轉矩(N.m)。
根據公式(1)到(5),整理得:

其中θr為轉子的角度(rad),電角度θe關系為θe=pnθr。
將方程(6)近似離散化,采樣周期T小于最小時間常數的1/10。在一個周期T內,時間t∈[kt(k+1)T],k是自然數,整理后的電機離散方程:

式中,Te(kT)=pnflux[φa(θe(kT))ia(kT)+φb(θe(kT))ib(kT)+φc(θe(kT))ic(kT)]。
Keil μVision軟件提供了一種功能強大的調試腳本語言,其語言編寫格式與C編程語言相似,是純文本文件。這里的腳本是針對STM32F103C8T6芯片而編寫,腳本的PWM端口分別是PA8、PA9、PA10、PB13、PB14、PB15,霍爾傳感器端口是PB8、PB7、PB6,主要內如圖2所示。

圖2 電機仿真模型腳本圖
腳本的第1行,reset命令用于刷新工作區;第2行,定義全局變量;第4~29行,編寫了兩個局部輔助函數;第30~144行,放置了BLDC的主仿真SIGNAL信號函數。信號函數內部由變量定義及初始化部分和主循環體部分兩部分組成。主循環體包括霍爾信號計算部分、三相電壓計算部分、反電勢計算部分、電機微分方程求解部分和輔助調試部分組成;第145行,用于啟動電機。下面介紹腳本文件的一些主要部分。
輔助函數部分由Hall和Phi_abc兩個局部函數組成。Hall局部函數用于計算霍爾高低電平信號,輸入參數pole表示電機的極對數,rot_angle表示電機轉子當前實際角度,hall_mounting_angle是指霍爾傳感器在電機定子靜止坐標下的安裝角度,其返回值為0與1,0代表低電平,1代表高電平。主要工作原理是:根據轉子的NS磁極劃分成1~N個扇形區,奇數扇區代表N極,偶數扇區代表S極。工作時,假想轉子是固定的,霍爾傳感器能繞著轉子轉動,轉動方向與實際轉向相反,當轉動到the_r角度后,判斷該位置落在轉子1~N個扇區的具體區,再根據扇區的極性輸出高低電平。函數內容如下:


局部函數Phi_abc用于產生梯形反電勢波形,返回值在-1~+1之間。由于分段函數生成反電勢波形處理比較繁瑣,所以借鑒Matlab軟件采用cos函數方法生成梯形波替代分段函數。輸入參數the_e是加入了極對數的電角度。trap參數用于控制梯形波的形狀,這里參考Matlab軟件取0.5。函數內容如下:


霍爾信號計算部分的目的是把仿真模型的轉子位置信號傳遞給STM32F103C8T6控制程序。霍爾傳感器是按120°標準安裝,分別用Ha、Hb、Hc表示,其安裝位置分別是在 60°、180°、 300°位置。主要代碼如下:

主要工作原理是:Hall函數計算轉子當前角度下三處霍爾傳感器的高低電平,然后向芯片PB8、PB7、PB6三個霍爾信號引腳輸出電平信號,并觸發定時器TIM4的CC1G中斷。p1index、p0index是便于Hall索引計算的全局變量。_WSHORT函數系統自帶函數,用于直接對程序段內存地址進行寫入操作。
根據本次所用開發板硬件電路設計,STM32F103C8T6芯片的PWM控制端口輸出高電平,相應的橋臂MOS則關閉,反之則開啟。仿真時,程序不斷地查詢PWM控制端口的電平,根據端口的電平計算Ua,Ub,Uc的電壓。主要內容如下:

反電勢的計算比較簡單,先通過Phi_abc函數計算之后,再乘以電機極對數、轉子轉速就得到了各相反電勢。內容如下:

電機微分方程求解部分是計算電機變量的關鍵,這部分主要依據離散公式(7)編寫,分別求解了電機的電流值、扭矩值、轉子角度和轉速。主要內容如下:


輔助調試部分主要是對變量數值的處理,便于邏輯分析儀顯示波形,同時利用swatch系統函數控制仿真采樣間隔。采樣間隔m_T對計算結果有重要影響,間隔越小精度越高,但是仿真速度越慢,所以需要綜合權衡,這里取了0.000001s。內容如下:


無刷直流電機的實際控制結構形式如圖3所示。控制方式采用方波控制,反饋信號采用霍爾傳感器。采用PI閉環控制方式實現速度閉環控制。首先,由信號反饋模塊(Speed&Position Feedback)提供霍爾信號反饋;然后,與速度參考模塊(Ref Speed)輸出的目標速度進行比較,得出速度偏差;最后,由PI控制模塊(PI Control)調節PWM占空比并輸出PWM控制信號驅動MOS管。PWM調制方式采用H_PWM-L _ON形式。

圖3 無刷直流電機控制框圖
仿真控制方式與實際控制方式一樣,控制代碼內容完全相同。不同之處在于控制程序部分接收霍爾信號是由腳本代碼發出的,而控制程序發出的PWM控制信號不是驅動MOS管,而是傳遞給調試腳本。

圖4 無刷直流電機仿真控制框圖
電機仿真參數:電機額定功率100W,Udc=48,極對數m_Pn=4,相電感m_L=0.00117H,互感m_M=-0.00039H,相電阻m_R=1.514Ω,磁鏈m_flux=0.0289Wb,阻尼系數m_B=1e-5N.m.s,轉動慣量m_J=24e-6kg.m2。速度環PI控制參數:Kp=8/10,Ki=12/160。目標速度曲線分六段:0~0.3s轉速為0r/min;0.3~0.9s轉速為800r/min;0.9~1.5s轉速為800r/min到1600r/min勻加速階段;1.5~2.1s轉速為1600r/min;2.1~2.7s轉速為1600r/min到800r/min勻減速階段;2.7s之后轉速為600r/min。
仿真結果如圖5所示,Keil的邏輯分析儀(Logic Analyzer)上直觀顯示了電機的8種數據波形。圖上方第一條曲線是目標速度曲線,第二條曲線是實際速度曲線,后面六條曲線是三條反電勢曲線和三條電流曲線。可以看到,在1.946s處,實際轉速為1594,與1600目標速度誤差僅為0.375%。從0~3.4s整個運行期間,電機的實際轉速與目標速度達到相當程度吻合,控制程序運行正常。

圖5 Keil軟件仿真結果
實驗平臺如圖6所示,主要由上位機、控制器、無刷電機、調試器、可調電源組成。選用的電機參數、PI控制參數和目標速度曲線與前面提到的仿真參數完全一致。

圖6 實驗測試平臺
控制程序代碼未做任何修改,控制程序一致,包括PI調節具體參數也相同,直接刷入下位機。
實測結果如圖7所示。從圖中可以看出,在0~4s的運行期間,實際轉速有效追蹤了目標速度,程序運行正常。在階躍階段,電機實際轉速反應十分迅速,出現了12.5%的超調量及2次振蕩;在勻加速階段,實際轉速存在0.03s延時,波形斜率與目標曲線保持一致;在勻減速階段,實際轉速同樣存在0.03s延時,波形斜率與目標曲線保持一致。在800r/min、1600r/min、600r/min三種固定轉速下,實際轉速存在上下輕微波動,波動幅度分別為±1.75%、±1.9%、±2.7%。出現超調量、延時、速度波動主要跟PI參數的設置有關,實際工程應用時,可以根據情況調節修正。

圖7 測試結果
對比兩種實驗結果,我們可以看到兩種實驗結果的實際轉速波形與目標轉速波形基本吻合。腳本虛擬的無刷電機仿真有效驗證了C語言控制程序的正確性。同時,另一方面說明將電機的數學模型離散化、腳本化來模擬無刷電機的方法是可行的。不過,在相同的PI控制參數下,控制虛擬電機沒有出現超調量,但控制實際電機卻出現超調量,其中的原因有待進一步研究。
本次研究的主要結論如下:
(1)仿真驗證后的代碼直接刷入下位機并可確保正常運行。結果表明,本文的仿真方法是一種有效的驗證C語言控制程序正確性的方法;
(2)由于無刷電機的仿真模型是采用假設條件,與實際電機不可能完全一致,存在一定差異。因此,在控制參數的具體數值方面,需要根據實際情況進行微調修正;
(3)Hall信號生成的方法是多路方波信號生成方法,可以推廣應用于其他傳感器的模擬。例如模擬編碼器、位移傳感器、旋變解碼器等;
(4)利用Keil μVision調試腳本的無刷直流電機仿真方法,其關鍵就是將微分方程離散化。因此,能將微分方程離散化的各類可控裝置都可以轉換為調試腳本進行仿真模擬。例如,永磁同步電機、異步電機等。所以,這種方法的應用推廣前景十分廣闊。