基于Verilog HDL的SPWM全數字算法的FPGA實(shí)現

發(fā)布時(shí)間:2015-11-12 10:50    發(fā)布者:designapp
關(guān)鍵詞: Verilog , HDL , SPWM , FPGA
  隨著(zhù)信號處理技術(shù)及集成電路制造工藝的不斷發(fā)展,全數字化SPWM(正弦脈寬調制)算法在調速領(lǐng)域越來(lái)越受到青睞。實(shí)現SPWM控制算法的方法很多,其中模擬比較法因電路復雜、且不易與數字系統連接而很少采用;傳統的微處理器因不能滿(mǎn)足電機控制所要求的較高采樣頻率(≥1 kHz)而逐漸被高性能的DSP硬件系統所取代,但該系統成本高、設計復雜。與傳統方法相比,在現場(chǎng)可編程邏輯器件FPGA上產(chǎn)生一種新的SPWM控制算法,具有成本低、研發(fā)周期短、執行速度高、可擴展能力強等優(yōu)點(diǎn)。該技術(shù)進(jìn)一步推動(dòng)了變頻調速技術(shù)的發(fā)展。
  本文結合SPWM算法及FPGA的特點(diǎn),以Actel FPGA作為控制核心,用Verilog HDL語(yǔ)言實(shí)現了可編程死區延時(shí)的三相六路SPWM全數字波形,并在Fushion StartKit開(kāi)發(fā)板上實(shí)現了各功能模塊,通過(guò)邏輯分析儀和數字存儲示波器上驗證了SPWM波形及死區時(shí)間,為該技術(shù)進(jìn)一步應用和推廣提供了一個(gè)平臺。
  1 Actel Fushion器件介紹[1-2]
  Actel Fushion系列器件是一款具有模擬功能的Flash架構FPGA,結合先進(jìn)的Flash FPGA數字技術(shù)和模擬技術(shù),融合了FPGA數字內核、ADC、Flash存儲器、模擬的I/O、RTC等部分。Fushion器件內部具有2 Mbit到8 Mbit不等的用戶(hù)可用的Flash存儲器;30個(gè)通道、最高12位精度、最高600 kS/s采樣率的ADC;片內100 MHz的RC振蕩器與PLL(鎖相環(huán))共同為FPGA提供時(shí)鐘;Fushion內部40 bit的RTC除支持典型的RTC應用外,還可以控制片內1.5 V的電壓調整器以實(shí)現低功耗的睡眠和喚醒模式。這些特點(diǎn)極大地提高了單芯片的功能,簡(jiǎn)化了整個(gè)系統設計,大幅度減少了電路板面積和系統的總成本。
  Fushion系列AFS600內部含有用戶(hù)使用的容量為4 Mbit的Flash存儲器,內部存儲器模塊以Flash memory Block(FB)形式劃分,每個(gè)FB限制為2 Mbit的空間,用戶(hù)可以單獨使用每個(gè)FB塊,也可以自行用邏輯來(lái)級聯(lián)所有的FB塊以構建大容量的Flash存儲器。Flash 存儲器讀操作可以從FB陣列、頁(yè)面緩沖區或狀態(tài)寄存器中讀取數據。
  2 數字系統電路總體設計方案
  2.1 SPWM算法原理[3]
  正弦脈寬調制技術(shù)(SPWM)是調制波為正弦波、載波為三角波或鋸齒波的一種脈寬調制法,是現代變頻調速系統中應用最為廣泛的脈寬調制方式,目前有自然采樣法、規則采樣法、等面積法等。其中規則采樣法計算簡(jiǎn)單,但諧波含量較大;一種改進(jìn)的等面積法諧波含量低,但計算復雜,不利于系統實(shí)現;自然采樣法是在正弦波和三角波的自然交點(diǎn)時(shí)刻控制功率開(kāi)關(guān)器件的通斷,是最理想的采樣方法。
  本文采用等腰三角波和三路相差120°的正弦波比較生成SPWM波,在Fushion StartKit開(kāi)發(fā)板上采用自然采樣法,結合數字頻率合成技術(shù)DDS,生成死區延時(shí)可調的SPWM全數字波形。
  2.2 數字系統電路總體方案設計[4-7]
  Verilog HDL硬件描述語(yǔ)言具有很好的易讀性和可重用性,結合Verilog HDL硬件描述語(yǔ)言設計規范及SPWM工作機理,用自頂向下的分割方法對整個(gè)系統進(jìn)行總體方案設計。首先從系統設計入手,在頂層進(jìn)行功能方框圖的劃分和結構設計。系統頂層功能方框圖如圖1所示。
  


  根據頂層設計的思想,采用Verilog HDL語(yǔ)言分別實(shí)現各個(gè)模塊的設計,最后把各個(gè)模塊嵌入到頂層模塊中,使各個(gè)模塊有機地組成一個(gè)完整的整體。
  3 系統模塊的設計與實(shí)現
  3.1 直接數字頻率合成模塊[8]
  直接數字頻率合成DDS是采用數字化技術(shù),通過(guò)控制頻率控制字直接產(chǎn)生所需的各種不同頻率信號,突破了模擬頻率合成法的原理,從“相位”的概念出發(fā)進(jìn)行頻率合成。這種合成方法不僅可以給出不同頻率的正弦波,而且還可以給出不同初始相位的正弦波,甚至可以給出各種任意波形。電路一般包括基準時(shí)鐘、頻率累加器、相位累加器、幅度/相位轉換電路、D/A 轉換器。在設計中,將要輸出的波形數據(如正弦函數表)預先存在ROM(或RAM)單元中,然后在系統標準時(shí)鐘頻率下,按照一定的順序從ROM(或RAM)單元中讀出數據,再進(jìn)行D/A轉換,就可以得到一定頻率的輸出波形。本設計直接利用從Flash存儲器的存儲單元中讀出的離散正弦函數值與生成的三角波進(jìn)行比較,實(shí)現系統的全數字化要求。
  3.2 三角波產(chǎn)生模塊
  本模塊采用同步三角波調制方法,利用可逆計數器對輸入時(shí)鐘進(jìn)行計數。計數器先執行加法,從0計數到255,再執行減法計數從255到0,從而形成三角載波。如此反復就可以得到峰峰值255連續的三角波形。輸入時(shí)鐘是系統時(shí)鐘通過(guò)鎖相環(huán)輸出的1 MHz的時(shí)鐘。
  3.3 建立正弦函數表
  三角波的幅值范圍在0~255,而正弦波的幅值在-1~+1之間,為了實(shí)現等幅值比較,將正弦波上移一個(gè)單位后,再將所有值同乘以128,使正弦波的幅值也在0~255之間。即:
  m=128×(sin(x)+1) (1)
  式(1)用C語(yǔ)言對此函數在一個(gè)周期(0~2π)內完成768個(gè)量化并且直接生成Flash存儲器的初始化文件(.ahx)格式,再用SmartGen輸入將Flash 存儲器配置成常用的數據存儲器,將預先生成的.ahx文件導入生成data Storage宏模塊,就建立了正弦函數表。生成正弦函數表的流程圖如圖2所示。
  


  3.4 三相正弦波產(chǎn)生和輸出模塊[9,10]
  FPGA的Fushion芯片理論上可以實(shí)現任何方式的數學(xué)運算邏輯,但由于芯片的容量限制,并不是任何計算都能實(shí)現的。因此需事先將正弦函數離散并加載到FPGA的Flash存儲器中,在正弦調制波的離散過(guò)程中即可將一個(gè)周期完整地離散。因此,只對其中A相進(jìn)行離散化處理,數據存儲在Flash存儲器中,每個(gè)數據分配1個(gè)地址。即可以利用計數器來(lái)產(chǎn)生取正弦波數據的地址,通過(guò)數字頻率合成技術(shù)改變計數器的計數頻率就可以改變正弦波的頻率。這樣即可先輸出一路的正弦波,另外兩路正弦波產(chǎn)生的方法與此類(lèi)似,只是起始取數據的地址相差120°,即分別從第256和第512個(gè)數據開(kāi)始取數。
  為了在每個(gè)調制波周期查找正弦函數表以及分別與載波進(jìn)行比較,在設計中采用時(shí)分復用技術(shù)。即依據三相關(guān)系,由一個(gè)地址計數器,通過(guò)基本量加1轉移到另一地址計數器中,并且在跳轉過(guò)程中,這一地址計數器加1指向下一單元,從而分時(shí)取出三相地址單元的內容。利用對正弦表尋址的高速度,使一個(gè)正弦表在不同時(shí)間段查詢(xún)不同相的正弦波的幅值,以達到減少正弦表所占用的FPGA資源的目的。這樣就大大減少了邏輯數目,僅增加了地址選擇器和三個(gè)同步存儲器,實(shí)現了正弦函數表的復用,在很大程度上節省了芯片的資源。
  電路的具體實(shí)現:相位互差120°的三路地址數據并行輸入,通過(guò)一個(gè)三選一的選擇器進(jìn)行選擇,選擇器的控制端接三進(jìn)制的計數器。如計數器為0時(shí),輸出A相地址,取出A相正弦值;為1時(shí),輸出B相地址,取出B相正弦值;為2時(shí),輸出C相地址,取出C相正弦值。因此只要使輸入的三相地址周期性變化,就可實(shí)現并行輸入的三相地址數據在時(shí)間上的連續,也就實(shí)現了三相地址數據的合成。其存儲單元功能框圖如圖3。這樣就可以利用一個(gè)正弦表來(lái)得到三相的正弦值,達到減少正弦表占用FPGA資源的目的。
  


  查表時(shí)每次只能輸出一相的數據,所以每次產(chǎn)生的數據需利用寄存器先暫存一下。首先輸出A相,通過(guò)暫存器l存入到A相存儲器;接著(zhù)輸出B相,利用暫存器2存入到B相存儲器;最后輸出C相,利用暫存器3存入到C相存儲器中。這樣,三相正弦波數據都存儲在各自的存儲器中,這三個(gè)寄存器采用同步控制信號,當控制信號觸發(fā)時(shí),同時(shí)輸出三相的正弦波數據用于后面的比較。該部分用狀態(tài)機實(shí)現,其狀態(tài)轉換圖如圖4所示。
  


  其部分程序代碼如下:
  case(state1)
  A: //初始化狀態(tài)
  begin
  ADDRES1out2)
  outdata4=1;
  else outdata4=0;
  if(outdata1>out2)
  outdata5=1;
  else outdata5=0;
  if(outdata2>out2)
  outdata6=1;
  else outdata6=0;
  end
  3.6 時(shí)延控制死區輸出模塊
  對于SPWM三相橋式逆變器,由于開(kāi)關(guān)管固有開(kāi)關(guān)時(shí)間Ts的影響,開(kāi)通時(shí)間Ton往往小于關(guān)斷時(shí)間Tof,因此容易發(fā)生同臂兩只開(kāi)關(guān)管同時(shí)導通的短路故障。為了避免這種故障的發(fā)生,通常要設置開(kāi)關(guān)死區ΔT,以保證同橋臂上的一只開(kāi)關(guān)管可靠關(guān)斷后,另一只開(kāi)關(guān)管才能開(kāi)通。死區的設置方式有兩種:一種是提前關(guān)斷、延時(shí)開(kāi)通的雙邊對稱(chēng)設置;另一種是按時(shí)關(guān)斷、延滯Δt開(kāi)通的單邊不對稱(chēng)設置。根據FPGA的編程特點(diǎn),選擇了按時(shí)關(guān)斷、延滯Δt開(kāi)通的單邊不對稱(chēng)設置,并且時(shí)延死區的調節與控制與時(shí)延控制死區模塊的輸入時(shí)鐘clk有關(guān)。
  根據延時(shí)模塊中延時(shí)信息:Δt=2×Tclk
  clk是鎖相環(huán)輸出時(shí)鐘CLK 1 MHz(本文采用的是1 MHz)的2次分頻得到的時(shí)鐘,只要改變頂層模塊中對CLK 1 MHz的分頻系數,就可以精確控制延滯Δt的大小,本文計算值Δt=4μs。
  另外,死區調節單元還能消除由于FPGA器件本身時(shí)延造成的毛刺。其部分死區控制程序代碼如下:
  always@(posedge clk or posedge rst)
  begin
  if(rst) //異步復位
  begin //初始化寄存器
  q


  圖5 邏輯分析儀測試時(shí)序結果
                               
               
本文地址:http://selenalain.com/thread-156180-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页