基於FPGA的自治型SPWM波形發生器的設計

admin @ 2014-03-26 , reply:0

概述
摘 要:本文針對靜止補償器(STATCOM)對觸發脈衝信號的要求,設計了一種基於FPGA的正弦脈寬調製(SPWM)波形發生器。通過正弦調製波與三角載波的比較,產生了六路PWM脈衝信號。正弦調……

摘  要:本文針對靜止補償器(STATCOM)對觸發脈衝信號的要求,設計了一種基於FPGA的正弦脈寬調製(SPWM)波形發生器。通過正弦調製波與三角載波的比較,產生了六路PWM脈衝信號。正弦調製波的產生採用查表法,但僅將1/4周期的正弦波數據存入FPGA內部硬體所構造的ROM中,減少了系統的硬體開銷,模擬結果證明了本設計的正確性。

引言
    正弦脈寬調製(SPWM)技術在以電壓源逆變電路為核心的電力電子裝置中有著廣泛的應用,如何產生SPWM脈衝序列及其實現手段是PWM技術的關鍵。利用模擬比較法,對三角載波與正弦調製波進行比較,即可產生SPWM脈衝;利用數字演算法和定時邏輯,也可產生SPWM脈衝[5]。目前已有多種微處理器晶元(如 80C196MC、TMS320F240等)本身集成有數字化PWM發生電路[3]。模擬方法簡單直觀,但與數字控制器介面不便,難以滿足複雜要求;數字方法結構靈活,尤其是微處理器內置了PWM發生器的,使用更加方便。通常狀況下,微處理器通過定時中斷服務程序產生SPWM脈衝,在每個載波周期必須進行中斷處理,對處理速度要求較高,從而也限制了載波頻率進一步的提高,同時微處理器的處理任務也更加繁重。文獻[1]指出,微處理器中不確定的中斷響應會導致PWM脈衝的相位抖動。
    FPGA以其可*性高、功耗低、保密性強等特點,在電子產品設計中得到廣泛的應用。文獻[1]~[5]也論述了FPGA或CPLD在PWM脈衝產生時刻的計算仍由微處理器來完成,實際上微處理器的任務仍然繁重。作者針對靜止補償器(STATCOM)對SPWM脈衝發生器的特定要求,採用Altera公司的 FLEX10K10晶元開發了一種專用SPWM波形發生器,微處理器只需在必要時改變逆變器PWM調製深度即可,其餘工作全由FPGA完成,從而大大減輕了CPU的負擔。
SPWM發生原理
    針對靜止補償器的電路結構,要求SPWM發生器可以發出三相六路PWM脈衝信號,脈衝寬度應根據微處理器輸出的調製深度來調節。SPWM脈衝產生方法採用三角載波與正弦調製波比較的傳統方法,但是三角載波、正弦調製波和比較邏輯等均採用基於FPGA的數字化方法來實現。該SPWM發生器的內部邏輯結構。匯流排介面邏輯單元首先接收來自微處理器的調製深度信號並鎖存,正弦調製波產生電路在同步信號作用下從正弦函數表讀取標準正弦信號幅值,與調製深度相乘,得出正弦調製信號幅值。三角載波發生電路在同步信號作用下,通過可逆計數器,發出三角載波幅值。正弦調製波幅值與三角載波幅值進行比較,就可以產生出SPWM脈衝信號。
邏輯設計
    SPWM脈衝發生器由微處理器匯流排介面電路、三角載波產生電路、正弦調製波產生電路、正弦函數表和比較控制電路等邏輯功能模塊組成。
匯流排介面單元
    匯流排介面電路如圖2所示的微處理器介面電路部分。其中D0~D7為數據匯流排,晶元選擇信號為CS,寫信號為WR,匯流排地址選擇信號為A0~A2。微處理器介面電路主要用於FPGA晶元接收來自微處理器的調製深度信號 。
三角載波發生器
    利用可逆計數器對系統時鐘進行計數。計數器先執行加法,從0計數到255,再執行減法計數從255到0,從而實現三角載波。三角載波的峰峰值為255。
正弦調製波發生器
    FPGA晶元只能綜合一些簡單的加、減、乘、除等算術邏輯,要其實現正弦函數的計算非常不經濟,正弦調製波的產生通過查正弦函數表來完成。在FPGA晶元內部開闢一塊ROM區域,將離散時間正弦波幅值存入其中。在需要時,按照相位與地址一一對應的關係從表中依次讀出即可。
    由於FPGA晶元的硬體資源有限,如何有效的利用資源成為非常關鍵的一點。考慮到正弦的周期性與對稱性,因此在ROM表中只需存正弦函數\frac{ }{2}周期的波形數據即可。在本設計中,一個正弦波周期內共採樣2048個點,相位分辯率為0.176 ,而實際在ROM表中只需存512個採樣點,這樣大大減少了晶元硬體資源的消耗。
正弦調製波幅值的調節
    PWM脈衝發生器必須根據正弦調製波幅值的大小來調整PWM脈衝的寬度。在本設計中,由於三角載波峰值固定,正弦調製波幅值僅由調製深度決定。FPGA晶元通過匯流排介面從微處理器接收到調製深度信號,再利用乘法器對從正弦函數表中取出的正弦幅值進行調製深度加權調整。設調製深度為,當前時刻正弦幅值為Sin_Data,利用下式得出正弦調製波幅值Data為:
    Data=( *Sin_Data)/255 取值範圍[0~1]
    本設計採用雙極性調製方式,而三角載波的取值範圍為0~255,其中位線值為127,故實際產生的正弦調製波幅值按照下列公式進行調整,其中Adjust為調整后的正弦調製波數據。
    Adjust =127+Data { 2 k < Data<(2k+1) } k=0.1.2......N
    Adjust =127-Data {(2k+1) <Data<(2k+2) } k=0.1.2......N
三相正弦信號的產生
    針對靜止補償器主電路,需要產生出三個相位彼此互差120 的SPWM脈衝信號。而通過一個正弦函數表來發出三相正弦信號,不僅需要考慮三個正弦信號的起始相位,而且需要三個可逆計數器分別來控制查找正弦函數表。例如,在本設計中產生三個初相位為零,相位互差120 的三相正弦信號。如圖3所示,A相首先從正弦函數表的地址0 開始累加讀起,當讀到地址90 處,再從地址90 處累減讀到地址0 處,這樣在A相可逆計數器的控制下,就可以得到周期為的單向半波正弦信號;C相首先從正弦函數表的地址60 開始遞減讀起,當讀到地址0 處,再從地址0 處遞增讀到地址90 處,然後從地址90 處遞減讀到地址0 處,這樣在C相可逆計數器的控制下,就可以得到周期為、初相位滯后A相60 的單向半波正弦信號;同理,B相從正弦函數表的地址60 開始累加讀起,在B相可逆計數器的控制下,就可以得到周期為 、初相位滯后C相60 的單向半波正弦信號。這樣,通過一個\frac{ }{2}周期的正弦函數表,就可以發出三個相位互差60 、周期為的單向半波正弦信號。然後,查出的數據經過正弦調製波幅值調節,使輸出的三個單向半波正弦幅值滿足設計的幅值調節要求后,再與三角載波進行比較,就可以得出三個相位互差120 的SPWM脈衝信號。
    由於三相正弦信號的產生在整個系統設計中非常關鍵,下面給出VHDL設計的主要程序。
    process(clk)
    variable m :integer range 511 downto 0
    begin
    if clk'event and clk='1'then ;產生A相地址
    if SAdir='1' then ;SAdir為A相可逆計數器的標誌位,當為"1"計數器遞增
    m:=1+m
    else m:=m-1; 當SAdir="0",計數器遞減
    end if
    A_Address<=m; A_Address為A相對應查找內部ROM表的地址值
    end if
    end process
    process(clk)
    variable m, n :integer range 511 downto 0
    begin
    if clk'event and clk='1'then; 產生C相地址
    if SCdir='0' then
    m:=m+1;
    else n:=n-1;m:=341+n; C相首先從60 處開始遞減產生查表地址
    end if;
    C_ Address<=m;
    end process;
    process(clk)
    variable m, n :integer range 511 downto 0 ;
    begin
    if clk'event and clk='1'then ;產生B相地址
    if SBCdir='1' then
    n:=n+1;m:=341+n;保證B相首先從60 處開始遞增產生查表地址
    else m:=m-1;
    end if;
    B_ Address <=m;
    end if;
    end process;
    process(Div_clk,AA,BB,CC,input)
    begin
    if Div_clk'event and Div_clk='1' then ;Div_clk為clk的分頻時鐘
    if AA='1' then ;AA為A相查表控制位,當為"1" 時,從ROM中取正弦值,
    q<= A_ Address ; q為ROM表對應正弦值的地址入口
    A_Data <= *ROM_Data; 為輸入的調製深度,ROM_Data為ROM正弦表的正弦值
    PA<=A_Data(14 downto 8); 除法運算,舍取最低8位實現
    elsif BB='1' then;AA為A相查表控制位,當為"1" 時,從ROM中取正弦值,
    q<= B_ Address; PB<=B_Data(14 downto 8); B_Data <= *ROM_Data;
    elsif CC='1' then
    q<= C_ Address ; PC<=C_Data(14 downto 8); C_Data <= *ROM_Data;
    end if; end if;
    end process;
    process(clk,flagA)
    begin
    if clk'event and clk='1' then
    if flagA='1' then ;flagA為 A相同步信號控制位,flagA='1' 表示當前A相正弦--波處於正半周期
    A_Adjust <=PA+"1111111" ; 正半周期正弦調製波幅值調整
    elsif flagA='0' then ;flagA='1' 表示當前A相正弦波處於處於負半周期
    A_Adjust <="1111111"- PA; 負半周期調幅
    end if;
    end if;
    End process;
系統邏輯與時序功能模擬
    利用MAX+PlusII的波形模擬功能可以得到晶元輸入輸出模擬圖。Atlera公司的這種軟體非常方便的提供了驗證方式。不但提供邏輯輸出的驗證,而且提供了時序的驗證,包括晶元內部的各點之間的延時,以及競爭冒險現象的出現。
    輸入調製頻率為50Hz、調製深度為0.75時的三相六路SPWM波形,三相彼此相位互差120 。其中AH與AL為A相沒有加死區的上橋信號與下橋信號,後面以此類推。flagA、flagB和flagC為三相正弦同步信號,以保證三相六路數據嚴格按相互滯后120 的相位輸出。
    輸入調製頻率為50Hz、調製深度為0.25時的三相六路SPWM波形。可以看到,輸出的六路PWM信號脈衝寬度有了明顯的改變。
結束語
     本文提出了一種利用FPGA產生PWM波的方案,並給出了具體的實現方法以及相應的PWM波發生框圖。該電路通過系統可編程晶元實現,用硬體描述語言以及圖形輸入完成了整個功能模塊的全部設計工作,使得觸發電路更加可*和穩定,為高載波SPWM波形生成提供了一條快速實現的途徑。如果改變輸入時鐘的頻率以及相應的載波頻率,以此電路為核心,配合相應的外部保護電路與其它邏輯控制電路,完全可以應用於逆變系統中




[admin via 研發互助社區 ] 基於FPGA的自治型SPWM波形發生器的設計已經有2357次圍觀

http://cocdig.com/docs/show-post-43513.html