袁 野,程善美,胡 仙
(華中科技大學,湖北 武漢 430074)
Cortex-M3處理器的核心是基于哈佛結構和三級流水線的32位內核。該內核集成了分支預測、單周期乘法和硬件除法等眾多強大的功能,其出色的計算性能、對時間快速響應能力以及高度的可配置,使其支持應用范圍廣泛地實現。
STM32F103以32位的CortexM3為核心,最高主頻為72MHz。STM32F103不僅價格便宜,而且外設資源豐富,尤其具有適合電力變換器控制的PWM模塊,使其在電力電子控制系統中具有廣闊的應用前景。
STM32F103的PWM產生是由定時器模塊完成的。STM32F103具有2個高級控制定時器(TIM1、TIM8) 和 4 個通用定時器(TIM2、TIM3、TIM4、TIM5),每個定時器都具有16位向上、向下、上/下自動裝載計數器,有4個獨立的通道。不同的是高級控制定時器(TIM1、TIM8)的前3個通道(通道1、2、3)可以輸出互補的PWM波形,并且可以進行死區編程,第4個通道為單脈沖輸出,高級控制定時器還具有剎車功能,使能該功能后,在剎車輸入引腳捕獲到一個有效的剎車電平之后就可以禁止該定時器所有通道的比較輸出。而通用定時器(TIM2、TIM3、TIM4、TIM5)的 4 個通道都只能工作在單脈沖輸出模式下,因此對于通用定時器沒有死區處理,另外通用定時器也不具備剎車功能。
如圖1所示為高級定時器在連續增減計數模式下3組互補通道(通道1、2、3)及另外一個單獨通道(通道4)的輸出波形。
在圖1中,TIMx_CCRy為通道y的比較寄存器(寄存器中x代表定時器編號,y代表通道編號),TIMx_ARR為周期寄存器,同一個定時器的所有通道共用一個周期寄存器。由寄存器TIMx_CR1的CMS[1:0]位來選擇計數方式,并且在連續增減計數時可以選擇由上溢事件或者下溢事件置中斷標志位,或者上溢與下溢均置位(這里沒有特定的上溢、下溢中斷,而是統一歸為更新中斷)。

圖1 高級定時器的PWM輸出波形
TIMx_CCMR1、TIMx_CCMR2 的 CCyS[1:0]用來配置通道y作為輸入還是輸出,OCyM[2:0]用來配置PWM輸出模式,例如翻轉,PWM模式1(在向上計數時,一旦當前計數值 TIMx_CNT<TIMx_CCRy時通道y為有效電平,否則為無效電平;在向下計數時,一旦 TIMx_CNT>TIMx_CCRy時通道y為無效電平,否則為有效電平),PWM模式2(與PWM模式1相反)等。
TIMx_CCER用來使能每個通道及其互補通道,同時對每個通道的輸出極性進行配置,注意同一組PWM輸出中的每個通道及其互補通道的輸出極性要保持一致,即同時高有效或者同時低有效。TIMx_BDTR用來配置死區時間長度,同時可以使能剎車功能,并且對剎車電平的極性進行配置。
在使用中通常還要對比較寄存器進行預裝載,TIMx_CCMR1、TIMx_CCMR2 的 OCyPE 位用來使能通道y的預裝載,在最后還要配置TIMx_CR1的ARPE位和TIMx_CR2的CCPC位來開啟預裝載功能。
可以根據實際的需求來選擇配置上面這些寄存器,最后一定要使能定時器及中斷,另外還要配置好定時器的輸出端口以及使能定時器的時鐘。
SVPWM算法主要包括判斷扇區、導通時間長度計算及其過調制處理、導通時刻計算。
在計算導通時間長度時,首先如下定義X、Y、Z,式中Vdc為直流母線電壓。

根據不同扇區,把 X、Y、Z 分別賦予 T1、T2,且當 T1+T2>T 時,則取

得到導通時間T1、T2后,再計算三相開關的導通時刻

這里用到了大量的除法,而為了保證計算速率和計算精度,傳統的方法(基于TIC2000)是把數據進行標幺,用Q格式來表示數據,用移位來代替除法,但是這樣做也就使得程序看起來不是很直觀,雖然仍然可以從程序語句的表達上看出該語句實現的功能,但是卻不能從語句上直接看出一些數據的實際大小。而STM32F103具有硬件除法器,因此這里就不再需要移位操作,只需要保證數據的精度即可,這樣就可以使得數據的表達比較直觀,因為同樣為了保證數據精度,Q格式就是為了方便移位操作,比如在原來的移位操作處理里面Q12的4096代表1,那么在相關計算的最后一步就需要右移12位,而在STM32F103中,由于具有硬件除法器,除法操作本身就是單指令周期,所以可以令1000代表1,在計算的最后一步再除以1000來還原數據實際大小。可以看到,后者表達起來就更加直觀,程序可讀性更強。
在SVPWM算法中,計算導通時間長度是式(1),傳統算法(基于TIC2000)進行標幺處理,即“1”代表,這里的“1”如果是Q10格式就對應于1024,那么如果得到等于一個PWM周期一半的導通時間長度實際上得到的是一個等于512的數據,也就是“0.5”,并且在接下來的導通時刻計算中仍然使用Q10格式的標幺,那么如果得到等于一個PWM周期一半的導通時刻實際上也是“0.5”,在最后又用“0.5”與周期值相乘再右移10位才能得到真正的導通時刻。
而基于STM32F103就可以實現程序語句和數據完全還原其數學意義,首先在查表計算Uα、Uβ時就可以用實際的數據來處理,這樣得到的Uα、Uβ也就是實際值,這樣在計算導通時間長度時就無需Q格式標幺,而是直接把Uα、Uβ代入表達式來進行計算,其次在計算導通時間長度時也直接把周期乘入,這就使得計算得到的導通時間長度就是實際的導通時間長度,最后只需進行簡單的導通時刻處理,即可得到每個開關的導通時刻。
在過調制處理式(2),傳統算法需要對(T1+T2)進行標幺,而基于STM32F103,可以直接令T1=T1×T/(T1+T2),這里T是TIM8周期寄存器的值,也就是一個開關周期的一半,所以需要乘以2來計算對于整個周期的T1。
通過上述分析,可以看到STM32F103在實現SVPWM算法時具有一些獨特的優勢,這主要是由其內部的硬件除法器來保證的。實驗發現這些優勢大大方便了調試工作,在線仿真時數據的可讀性很高,例如電壓變量、導通時間長度、導通時刻都是實際值,這樣比起用Q格式標幺的數據就要容易識別很多。
一個基于STM32F103的三相逆變器控制系統結構框圖如圖2所示。在圖2中STM32F103完成SVPWM算法、PI控制器以及輸出電壓反饋控制等。采用TIM8產生PWM波形,此時三相逆變器控制的主要配置如下:周期寄存器=4650(時鐘為56MHz,因此一個計數周期為83μs,一個增減周期為166μs,對應開關頻率6kHz),中央對齊模式3(連續增減計數,且上溢、下溢時都置中斷標志位),PWM輸出模式為PWM模式1,輸出電平低有效,死區時間為4μs,使能預裝載。最后確定通道輸出端口配置完成以及TIM8的計數使能、時鐘使能、輸出使能及其更新中斷使能。圖2中虛線框內全部由STM32F103實現。

圖2 基于STM32F103的三相逆變器控制系統結構
圖3給出了STM32F103輸出的CH1與CH2的波形,并且附帶有兩者之差,可以看到相位上前者超前后者120°。

圖3 CH1與CH2波形
圖4所示為逆變器滿載(37kW風機負載)時輸出電壓和電流的起動波形。

圖4 滿載時電壓及電流起動波形
圖5為逆變器滿載時電壓的穩態波形及其諧波分析。

圖5 滿載時電壓穩態波形
本文簡單介紹了STM32F103的PWM產生機制,并在此基礎上分析了其在SVPWM算法實現上的優點,并在基于STM32F103控制的三相逆變器上進行了實驗驗證。由于STM32F103具有超強的數據處理能力,采用STM32F103實現空間矢量PWM具有實現簡便、易于理解等特點。
[1]STM.STM32F101xx,STM32F102xx,STM32F103xx,STM-32F105xx and STM32F107xx Advanced ARM-based 32-bitMCUs.2009.
[2]STM.STM32F10xxx Cortex -M3 Programming Manual.2010.
[3]H W Vander Broek,H C Skudely,G V Stranke.Analysis and Realization of a Pulse Width Modulator Based on Voltage Space Vector[J].IEEE Trans.on IA,1988,24(1):142-150.
[4]程善美,蔡 凱,龔 博.DSP在電氣傳動系統中的應用[M].北京:機械工業出版社,2010.