袁 野,程善美,胡 仙
(華中科技大學(xué),湖北 武漢 430074)
Cortex-M3處理器的核心是基于哈佛結(jié)構(gòu)和三級流水線的32位內(nèi)核。該內(nèi)核集成了分支預(yù)測、單周期乘法和硬件除法等眾多強(qiáng)大的功能,其出色的計算性能、對時間快速響應(yīng)能力以及高度的可配置,使其支持應(yīng)用范圍廣泛地實現(xiàn)。
STM32F103以32位的CortexM3為核心,最高主頻為72MHz。STM32F103不僅價格便宜,而且外設(shè)資源豐富,尤其具有適合電力變換器控制的PWM模塊,使其在電力電子控制系統(tǒng)中具有廣闊的應(yīng)用前景。
STM32F103的PWM產(chǎn)生是由定時器模塊完成的。STM32F103具有2個高級控制定時器(TIM1、TIM8) 和 4 個通用定時器(TIM2、TIM3、TIM4、TIM5),每個定時器都具有16位向上、向下、上/下自動裝載計數(shù)器,有4個獨(dú)立的通道。不同的是高級控制定時器(TIM1、TIM8)的前3個通道(通道1、2、3)可以輸出互補(bǔ)的PWM波形,并且可以進(jìn)行死區(qū)編程,第4個通道為單脈沖輸出,高級控制定時器還具有剎車功能,使能該功能后,在剎車輸入引腳捕獲到一個有效的剎車電平之后就可以禁止該定時器所有通道的比較輸出。而通用定時器(TIM2、TIM3、TIM4、TIM5)的 4 個通道都只能工作在單脈沖輸出模式下,因此對于通用定時器沒有死區(qū)處理,另外通用定時器也不具備剎車功能。
如圖1所示為高級定時器在連續(xù)增減計數(shù)模式下3組互補(bǔ)通道(通道1、2、3)及另外一個單獨(dú)通道(通道4)的輸出波形。
在圖1中,TIMx_CCRy為通道y的比較寄存器(寄存器中x代表定時器編號,y代表通道編號),TIMx_ARR為周期寄存器,同一個定時器的所有通道共用一個周期寄存器。由寄存器TIMx_CR1的CMS[1:0]位來選擇計數(shù)方式,并且在連續(xù)增減計數(shù)時可以選擇由上溢事件或者下溢事件置中斷標(biāo)志位,或者上溢與下溢均置位(這里沒有特定的上溢、下溢中斷,而是統(tǒng)一歸為更新中斷)。
圖1 高級定時器的PWM輸出波形
TIMx_CCMR1、TIMx_CCMR2 的 CCyS[1:0]用來配置通道y作為輸入還是輸出,OCyM[2:0]用來配置PWM輸出模式,例如翻轉(zhuǎn),PWM模式1(在向上計數(shù)時,一旦當(dāng)前計數(shù)值 TIMx_CNT<TIMx_CCRy時通道y為有效電平,否則為無效電平;在向下計數(shù)時,一旦 TIMx_CNT>TIMx_CCRy時通道y為無效電平,否則為有效電平),PWM模式2(與PWM模式1相反)等。
TIMx_CCER用來使能每個通道及其互補(bǔ)通道,同時對每個通道的輸出極性進(jìn)行配置,注意同一組PWM輸出中的每個通道及其互補(bǔ)通道的輸出極性要保持一致,即同時高有效或者同時低有效。TIMx_BDTR用來配置死區(qū)時間長度,同時可以使能剎車功能,并且對剎車電平的極性進(jìn)行配置。
在使用中通常還要對比較寄存器進(jìn)行預(yù)裝載,TIMx_CCMR1、TIMx_CCMR2 的 OCyPE 位用來使能通道y的預(yù)裝載,在最后還要配置TIMx_CR1的ARPE位和TIMx_CR2的CCPC位來開啟預(yù)裝載功能。
可以根據(jù)實際的需求來選擇配置上面這些寄存器,最后一定要使能定時器及中斷,另外還要配置好定時器的輸出端口以及使能定時器的時鐘。
SVPWM算法主要包括判斷扇區(qū)、導(dǎo)通時間長度計算及其過調(diào)制處理、導(dǎo)通時刻計算。
在計算導(dǎo)通時間長度時,首先如下定義X、Y、Z,式中Vdc為直流母線電壓。
根據(jù)不同扇區(qū),把 X、Y、Z 分別賦予 T1、T2,且當(dāng) T1+T2>T 時,則取
得到導(dǎo)通時間T1、T2后,再計算三相開關(guān)的導(dǎo)通時刻
這里用到了大量的除法,而為了保證計算速率和計算精度,傳統(tǒng)的方法(基于TIC2000)是把數(shù)據(jù)進(jìn)行標(biāo)幺,用Q格式來表示數(shù)據(jù),用移位來代替除法,但是這樣做也就使得程序看起來不是很直觀,雖然仍然可以從程序語句的表達(dá)上看出該語句實現(xiàn)的功能,但是卻不能從語句上直接看出一些數(shù)據(jù)的實際大小。而STM32F103具有硬件除法器,因此這里就不再需要移位操作,只需要保證數(shù)據(jù)的精度即可,這樣就可以使得數(shù)據(jù)的表達(dá)比較直觀,因為同樣為了保證數(shù)據(jù)精度,Q格式就是為了方便移位操作,比如在原來的移位操作處理里面Q12的4096代表1,那么在相關(guān)計算的最后一步就需要右移12位,而在STM32F103中,由于具有硬件除法器,除法操作本身就是單指令周期,所以可以令1000代表1,在計算的最后一步再除以1000來還原數(shù)據(jù)實際大小。可以看到,后者表達(dá)起來就更加直觀,程序可讀性更強(qiáng)。
在SVPWM算法中,計算導(dǎo)通時間長度是式(1),傳統(tǒng)算法(基于TIC2000)進(jìn)行標(biāo)幺處理,即“1”代表,這里的“1”如果是Q10格式就對應(yīng)于1024,那么如果得到等于一個PWM周期一半的導(dǎo)通時間長度實際上得到的是一個等于512的數(shù)據(jù),也就是“0.5”,并且在接下來的導(dǎo)通時刻計算中仍然使用Q10格式的標(biāo)幺,那么如果得到等于一個PWM周期一半的導(dǎo)通時刻實際上也是“0.5”,在最后又用“0.5”與周期值相乘再右移10位才能得到真正的導(dǎo)通時刻。
而基于STM32F103就可以實現(xiàn)程序語句和數(shù)據(jù)完全還原其數(shù)學(xué)意義,首先在查表計算Uα、Uβ時就可以用實際的數(shù)據(jù)來處理,這樣得到的Uα、Uβ也就是實際值,這樣在計算導(dǎo)通時間長度時就無需Q格式標(biāo)幺,而是直接把Uα、Uβ代入表達(dá)式來進(jìn)行計算,其次在計算導(dǎo)通時間長度時也直接把周期乘入,這就使得計算得到的導(dǎo)通時間長度就是實際的導(dǎo)通時間長度,最后只需進(jìn)行簡單的導(dǎo)通時刻處理,即可得到每個開關(guān)的導(dǎo)通時刻。
在過調(diào)制處理式(2),傳統(tǒng)算法需要對(T1+T2)進(jìn)行標(biāo)幺,而基于STM32F103,可以直接令T1=T1×T/(T1+T2),這里T是TIM8周期寄存器的值,也就是一個開關(guān)周期的一半,所以需要乘以2來計算對于整個周期的T1。
通過上述分析,可以看到STM32F103在實現(xiàn)SVPWM算法時具有一些獨(dú)特的優(yōu)勢,這主要是由其內(nèi)部的硬件除法器來保證的。實驗發(fā)現(xiàn)這些優(yōu)勢大大方便了調(diào)試工作,在線仿真時數(shù)據(jù)的可讀性很高,例如電壓變量、導(dǎo)通時間長度、導(dǎo)通時刻都是實際值,這樣比起用Q格式標(biāo)幺的數(shù)據(jù)就要容易識別很多。
一個基于STM32F103的三相逆變器控制系統(tǒng)結(jié)構(gòu)框圖如圖2所示。在圖2中STM32F103完成SVPWM算法、PI控制器以及輸出電壓反饋控制等。采用TIM8產(chǎn)生PWM波形,此時三相逆變器控制的主要配置如下:周期寄存器=4650(時鐘為56MHz,因此一個計數(shù)周期為83μs,一個增減周期為166μs,對應(yīng)開關(guān)頻率6kHz),中央對齊模式3(連續(xù)增減計數(shù),且上溢、下溢時都置中斷標(biāo)志位),PWM輸出模式為PWM模式1,輸出電平低有效,死區(qū)時間為4μs,使能預(yù)裝載。最后確定通道輸出端口配置完成以及TIM8的計數(shù)使能、時鐘使能、輸出使能及其更新中斷使能。圖2中虛線框內(nèi)全部由STM32F103實現(xiàn)。
圖2 基于STM32F103的三相逆變器控制系統(tǒng)結(jié)構(gòu)
圖3給出了STM32F103輸出的CH1與CH2的波形,并且附帶有兩者之差,可以看到相位上前者超前后者120°。
圖3 CH1與CH2波形
圖4所示為逆變器滿載(37kW風(fēng)機(jī)負(fù)載)時輸出電壓和電流的起動波形。
圖4 滿載時電壓及電流起動波形
圖5為逆變器滿載時電壓的穩(wěn)態(tài)波形及其諧波分析。
圖5 滿載時電壓穩(wěn)態(tài)波形
本文簡單介紹了STM32F103的PWM產(chǎn)生機(jī)制,并在此基礎(chǔ)上分析了其在SVPWM算法實現(xiàn)上的優(yōu)點,并在基于STM32F103控制的三相逆變器上進(jìn)行了實驗驗證。由于STM32F103具有超強(qiáng)的數(shù)據(jù)處理能力,采用STM32F103實現(xiàn)空間矢量PWM具有實現(xiàn)簡便、易于理解等特點。
[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在電氣傳動系統(tǒng)中的應(yīng)用[M].北京:機(jī)械工業(yè)出版社,2010.