陳曉雷,全召,韓雪琴
(鄭州輕工業學院計算機與通信工程學院,鄭州 450000)
基于FPGA的SPWM波兩種實現方法及分析
陳曉雷,全召,韓雪琴
(鄭州輕工業學院計算機與通信工程學院,鄭州 450000)
正弦波脈寬調制(SPWM)波在日常生活中有廣泛的應用,通常使用單片機或者DSP芯片進行實現[1]。在設計數字電路生成SPWM波時,通常采用三角波與正弦波采樣數據相比較的方法,它們之間值的大小決定了輸出脈沖序列的寬度。通常,在數字電路中得到波形數據有兩種方法。一種是設計邏輯電路模擬實際的波形方程,電路在時鐘信號的驅動下實時生成波形對應的值;另一種方案是事先用MATLAB等工具生成所需要的波形文件,將其載入到存儲單元中,然后通過查表方式獲得所需數據[2]。這兩種方法各有優劣。我們通過這兩種方法分別設計三角波數據生成電路,進而與正弦波比較得到SPWM波。
本文采用FPGA來分別實現上述兩種方法。與單片機和DSP相比,FPGA芯片既擁有可編程的靈活性,可動態設置輸出SPWM的頻率和精度,又具有硬件運行并行度高,速度快的優勢,特別適合步進電機控制這種需要多路同時輸出的情況[3-4]。
1.1SPWM原理分析
為了生成SPWM波,我們通常將正弦波與三角載波相比較,它們的交點決定了SPWM波的脈沖輸出。當正弦波的值大于三角波時,輸出高電平,反之,輸出低電平[5]。其中,正弦波與三角波的頻率之比稱為載波比。然而,要使用真正的正弦波進行比較,需要使用模擬電路或專門的DSP芯片,設計難度較大[6]。實際往往使用采樣過的正弦波,即正弦階梯波來代替,如圖1所示。從圖中可以看出,正弦波的采樣頻率越高,采樣后的階梯波就越接近實際的正弦波,它與三角波的交點也就越接近實際正弦波與三角波的交點,生成的SPWM波精度也就越高[7]。
從這里可以看出,如何在電路中生成波形數據是設計SPWM電路的關鍵。下面以三角波為例探討兩種實現方式的不同。
1.2邏輯法生成三角波
邏輯法生成三角波,就是設計邏輯電路來模擬三角波的函數公式,對地址數據進行邏輯運算,將地址轉換為對應的三角波數據。簡便起見,我們以位寬為3bits、采樣深度為8的三角波生成過程為例說明其計算原理,選取三角波上升邊斜率為2,下降邊斜率為-2。為與正弦波數據格式保持一致,負值采用二進制補碼的形式保存。在一個周期內,三角波的數據和地址對應關系如表1所示。

圖1 生成SPWM波原理示意圖

表1 位寬3bits、深度為8的三角波數據對應表
結合三角波變化規律可知,當地址addr<4時,斜率為2,相當于將地址左移一位。同時注意到數據最低位為0,將地址左移一位后,在最低位補0,與數據補碼比較,最高位相反;當地址 addr>4時,斜率為-2,相當于將地址取反后左移一位。同時注意到數據最低位為1,將地址取反后左移一位,在最低位補1,與數據補碼比較,最高位取反。
當我們需要其他采樣精度或斜率的三角波數據時,需要按照上述過程重新推導,建立地址與數據間的邏輯公式,因而十分不便。另外,這種方式僅適用于一維線性方程的實現,對于二次及以上的波形,基本上無法通過觀察來找出地址和數據間的邏輯關系,因此這種方式應用范圍有限。
1.3查表法生成三角波
使用查表的方法生成三角波,只需要將預先生成的三角波數據,放入FPGA的片內存儲單元中,地址到數據的轉換過程,被簡化為內存查表操作,避免了第一種方法所需要的布爾運算推演,大大降低了設計難度。另外,對于復雜一點的波形,它們的地址和數據之間往往不是簡單的邏輯關系,因而不能通過動態計算的方式來實現[8]。例如本文中的正弦波發生電路,就只能通過這種ROM載入查表的方式來實現,而無法通過第一種方式實現。我們使用MATLAB生成三角波數據,代碼如下所示:

其中,tri_data即為所需要的三角波數據如圖2所示。將上述代碼生成的數據載入到FPGA中,只需簡單的查表電路即可生成三角波[9]。

圖2 MATLAB生成三角波數據
1.4生成正弦波數據
如前所述,邏輯法只能用來生成三角波或階梯波這種最基本的波形。對于像正弦波這樣稍微復雜的波形,基本上無法用邏輯法來生成,而只能通過MATLAB事先生成波形數據,采用查表法實現,生成的正弦波如圖3所示。
我們在實際實現時,使用MATLAB生成位寬為10bits、采樣頻率為1024的正弦階梯波數據。而三角波使用前述的兩種方式分別實現。
2.1電路原理圖
電路原理框圖如圖4所示,我們分別對三角波和正弦波的數據輸出電路施加不同的驅動時鐘,兩個時鐘的頻率之比即為載波比。對輸出的兩個波形數據進行比較,從而得到SPWM輸出。

圖3 MATLAB生成正弦波數據

圖4 生成SPWM波電路原理框圖
如前所述,正弦波發生電路所需的采樣數據可由MATLAB生成,以內存初始化文件MIF格式存放,并由FPGA上電時載入。而三角波的數據既可由MATLAB用相似方法生成,也可設計電路在運行時動態計算產生。下面對三角波發生電路這兩種實現方法分別進行分析和對比。
2.2邏輯法實現SPWM
本文采用的三角波數據寬度為10bits,深度為1024,結合上面的分析進行擴展,可得到邏輯法生成三角波數據的Verilog代碼如下:


其中,addr為輸入地址,data為生成的輸出數據。使用Quartus II對設計進行綜合,結果如圖5所示。

圖5 邏輯法電路設計綜合結果
使用STP工具對電路的三角波、正弦波和生成的SPWM進行數據采樣,結果如圖6所示。

圖6 邏輯法電路的STP采樣結果
2.3查表法實現SPWM
使用查表法時,三角波數據和正弦波數據均由MATLAB生成,然后載入到FPGA中。原理圖中所示的三角波和正弦波發生電路為簡單的內存訪問電路,通過訪存操作實現地址到數據的轉換。使用MATLAB模擬這一過程,如圖7所示。

圖7 MATLAB模擬SPWM波生成過程
使用Quartus II對上述設計進行綜合,結果如圖8所示。

圖8 查表法電路設計綜合結果
使用STP工具對電路的三角波、正弦波和生成的SPWM進行數據采樣,結果如圖9所示。

圖9 查表法電路的STP采樣結果
2.4兩種設計方法對比
從STP的采樣結果可以看出,兩種電路生成的三角波并無區別,最終都能得到所需的SPWM波,電路功能相同。對比圖5和圖8的綜合結果,在“Total memory bits”那一欄,后一種設計方式比前一種多占用了10240bits的片內存儲單元,這恰好是ROM存儲三角波數據所需的空間(數據位寬x采樣深度)。兩種設計方法的各有優缺點,使用邏輯法時所用的邏輯單元更少,但設計過程更加復雜;使用查表法設計簡單,但需要額外的存儲單元來載入預先生成的數據。
我們將上述兩種設計綜合后下載到EP2C70芯片上,用示波器測量它們的輸出,如圖10所示。

圖10 輸入頻率為2KHz時SPWM波
降低輸入的時鐘頻率,可以觀察到示波器上出現明顯的正弦波輪廓,如圖11所示。若想得到更加精確的正弦波,需要對輸出進一步進行低通濾波處理。

圖11 輸入頻率為500Hz時SPWM波
實際結果表明,兩種方式都能正確生成需要的SPWM波。相較而言,邏輯法設計更為復雜,只能用來生成較為簡單的波形,像本文中所需要的正弦波數據就不能使用該種方法生成;查表法實現方式避免了復雜的邏輯分析,簡化了電路的設計,應用更加廣闊,因而更加實用。
[1]魏文秀.基于單片機的正弦波輸出逆變電源的設計及應用[J].自動化應用,2015,02:3-4.
[2]劉彬彬,林偉.基于MATLAB和FPGA的CIC濾波器的設計[J].電子器件,2010,02:231-234.
[3]孫宏兵,王寶忠.基于FPGA的逆變電源設計[J].常州信息職業技術學院學報,2014,06:16-19.
[4]呂娣.基于單片機生成SPWM信號控制電機實現變頻調速的設計[J].電腦知識與技術,2014,34:8320-8321.
[5]張成,王心堅,衣鵬,孫澤昌.SVPWM與SPWM比較仿真研究[J].機械與電子,2013,01:3-7.
[6]逄海萍,費洪偉.DSP基于模型設計的單極性倍頻SPWM波形生成[J].微電機,2015,08:83-86+90.
[7]范云飛,任小洪,袁文林,黃勇.微元法生成SPWM的算法研究與實現[J].軟件導刊,2015,05:62-64.
[8]劉必旺,王寶忠.基于FPGA控制的開關電源的仿真與設計[J].科學技術與工程,2012,31:8281-8286.
[9]丁衛東,郭前崗,周西峰.一種基于FPGA的SPWM波的實時生成方法[J].計算機技術與發展,2011,02:211-214.
FPGA;SPWM;MATLAB
The Two Implements and Analysis of SPWM Based on FPGA
CHEN Xiao-lei,QUAN Zhao,HAN Xue-qin
(School of Computer and Communication Engineering,Zhengzhou University of Light Industry,Zhengzhou 450000)
河南省科技攻關計劃項目(No.142102210080)、國家自然基金項目(No.61272038)
1007-1423(2015)33-0042-05
10.3969/j.issn.1007-1423.2015.33.012
陳曉雷(1964-),男,河南鄭州人,碩士,教授,研究方向為嵌入式系統及應用
全召(1988-),男,河南南陽人,在讀碩士研究生,研究方向為嵌入式系統研究方向
韓雪琴(1969-),女,河南鄭州人,副教授,碩士,研究方向為嵌入式系統應用開發
2015-10-20
2015-11-05
在數字電路設計中,要生成SPWM波通常需要三角波和正弦波的波形數據。它們可由兩種方式得到,一種由邏輯器件模擬實際的波形變化關系來實時生成,另一種是將已有的數據文件載入到存儲器件中通過查表獲取。對這兩種生成波形的方式分別進行分析討論,比較它們各自的優缺點,并在FPGA上實現驗證。
FPGA;正弦波脈寬調制;MATLAB
In the design of digital circuit,we always need the data of sinusoidal and triangle waves to generate SPWM.The data can be obtained in two different ways,either by using the logic components to simulate the functions of real waves,or storing the existing data file to storage units and getting them lately by looking up it.Analyses and discusses these two methods,compares the pros and cons,and realizes them on FPGA respectively.