<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于Verilog HDL的SPWM全數(shù)字算法的FPGA實現(xiàn)

          基于Verilog HDL的SPWM全數(shù)字算法的FPGA實現(xiàn)

          作者: 時間:2014-10-21 來源:網(wǎng)絡(luò) 收藏

            隨著信號處理技術(shù)及集成電路制造工藝的不斷發(fā)展,全數(shù)字化(正弦脈寬調(diào)制)算法在調(diào)速領(lǐng)域越來越受到青睞。實現(xiàn)控制算法的方法很多,其中模擬比較法因電路復(fù)雜、且不易與數(shù)字系統(tǒng)連接而很少采用;傳統(tǒng)的微處理器因不能滿足電機控制所要求的較高采樣頻率(≥1 kHz)而逐漸被高性能的DSP硬件系統(tǒng)所取代,但該系統(tǒng)成本高、設(shè)計復(fù)雜。與傳統(tǒng)方法相比,在現(xiàn)場可編程邏輯器件上產(chǎn)生一種新的控制算法,具有成本低、研發(fā)周期短、執(zhí)行速度高、可擴展能力強等優(yōu)點。該技術(shù)進一步推動了變頻調(diào)速技術(shù)的發(fā)展。

          本文引用地址:http://www.ex-cimer.com/article/264219.htm

            本文結(jié)合SPWM算法及的特點,以Actel 作為控制核心,用語言實現(xiàn)了可編程死區(qū)延時的三相六路SPWM全數(shù)字波形,并在Fushion StartKit開發(fā)板上實現(xiàn)了各功能模塊,通過邏輯分析儀和數(shù)字存儲示波器上驗證了SPWM波形及死區(qū)時間,為該技術(shù)進一步應(yīng)用和推廣提供了一個平臺。

            1 Actel Fushion器件介紹[1-2]

            Actel Fushion系列器件是一款具有模擬功能的Flash架構(gòu)FPGA,結(jié)合先進的Flash FPGA數(shù)字技術(shù)和模擬技術(shù),融合了FPGA數(shù)字內(nèi)核、ADC、Flash存儲器、模擬的I/O、RTC等部分。Fushion器件內(nèi)部具有2 Mbit到8 Mbit不等的用戶可用的Flash存儲器;30個通道、最高12位精度、最高600 kS/s采樣率的ADC;片內(nèi)100 MHz的RC振蕩器與PLL(鎖相環(huán))共同為FPGA提供時鐘;Fushion內(nèi)部40 bit的RTC除支持典型的RTC應(yīng)用外,還可以控制片內(nèi)1.5 V的電壓調(diào)整器以實現(xiàn)低功耗的睡眠和喚醒模式。這些特點極大地提高了單芯片的功能,簡化了整個系統(tǒng)設(shè)計,大幅度減少了電路板面積和系統(tǒng)的總成本。

            Fushion系列AFS600內(nèi)部含有用戶使用的容量為4 Mbit的Flash存儲器,內(nèi)部存儲器模塊以Flash memory Block(FB)形式劃分,每個FB限制為2 Mbit的空間,用戶可以單獨使用每個FB塊,也可以自行用邏輯來級聯(lián)所有的FB塊以構(gòu)建大容量的Flash存儲器。Flash 存儲器讀操作可以從FB陣列、頁面緩沖區(qū)或狀態(tài)寄存器中讀取數(shù)據(jù)。

            2 數(shù)字系統(tǒng)電路總體設(shè)計方案

            2.1 SPWM算法原理[3]

            正弦脈寬調(diào)制技術(shù)(SPWM)是調(diào)制波為正弦波、載波為三角波或鋸齒波的一種脈寬調(diào)制法,是現(xiàn)代變頻調(diào)速系統(tǒng)中應(yīng)用最為廣泛的脈寬調(diào)制方式,目前有自然采樣法、規(guī)則采樣法、等面積法等。其中規(guī)則采樣法計算簡單,但諧波含量較大;一種改進的等面積法諧波含量低,但計算復(fù)雜,不利于系統(tǒng)實現(xiàn);自然采樣法是在正弦波和三角波的自然交點時刻控制功率開關(guān)器件的通斷,是最理想的采樣方法。

            本文采用等腰三角波和三路相差120°的正弦波比較生成SPWM波,在Fushion StartKit開發(fā)板上采用自然采樣法,結(jié)合數(shù)字頻率合成技術(shù)DDS,生成死區(qū)延時可調(diào)的SPWM全數(shù)字波形。

            2.2 數(shù)字系統(tǒng)電路總體方案設(shè)計[4-7]

            硬件描述語言具有很好的易讀性和可重用性,結(jié)合硬件描述語言設(shè)計規(guī)范及SPWM工作機理,用自頂向下的分割方法對整個系統(tǒng)進行總體方案設(shè)計。首先從系統(tǒng)設(shè)計入手,在頂層進行功能方框圖的劃分和結(jié)構(gòu)設(shè)計。系統(tǒng)頂層功能方框圖如圖1所示。

            

           

            根據(jù)頂層設(shè)計的思想,采用Verilog HDL語言分別實現(xiàn)各個模塊的設(shè)計,最后把各個模塊嵌入到頂層模塊中,使各個模塊有機地組成一個完整的整體。

            3 系統(tǒng)模塊的設(shè)計與實現(xiàn)

            3.1 直接數(shù)字頻率合成模塊[8]

            直接數(shù)字頻率合成DDS是采用數(shù)字化技術(shù),通過控制頻率控制字直接產(chǎn)生所需的各種不同頻率信號,突破了模擬頻率合成法的原理,從“相位”的概念出發(fā)進行頻率合成。這種合成方法不僅可以給出不同頻率的正弦波,而且還可以給出不同初始相位的正弦波,甚至可以給出各種任意波形。電路一般包括基準(zhǔn)時鐘、頻率累加器、相位累加器、幅度/相位轉(zhuǎn)換電路、D/A 轉(zhuǎn)換器。在設(shè)計中,將要輸出的波形數(shù)據(jù)(如正弦函數(shù)表)預(yù)先存在ROM(或RAM)單元中,然后在系統(tǒng)標(biāo)準(zhǔn)時鐘頻率下,按照一定的順序從ROM(或RAM)單元中讀出數(shù)據(jù),再進行D/A轉(zhuǎn)換,就可以得到一定頻率的輸出波形。本設(shè)計直接利用從Flash存儲器的存儲單元中讀出的離散正弦函數(shù)值與生成的三角波進行比較,實現(xiàn)系統(tǒng)的全數(shù)字化要求。

            3.2 三角波產(chǎn)生模塊

            本模塊采用同步三角波調(diào)制方法,利用可逆計數(shù)器對輸入時鐘進行計數(shù)。計數(shù)器先執(zhí)行加法,從0計數(shù)到255,再執(zhí)行減法計數(shù)從255到0,從而形成三角載波。如此反復(fù)就可以得到峰峰值255連續(xù)的三角波形。輸入時鐘是系統(tǒng)時鐘通過鎖相環(huán)輸出的1 MHz的時鐘。

            3.3 建立正弦函數(shù)表

            三角波的幅值范圍在0~255,而正弦波的幅值在-1~+1之間,為了實現(xiàn)等幅值比較,將正弦波上移一個單位后,再將所有值同乘以128,使正弦波的幅值也在0~255之間。即:

            m=128×(sin(x)+1) (1)

            式(1)用C語言對此函數(shù)在一個周期(0~2π)內(nèi)完成768個量化并且直接生成Flash存儲器的初始化文件(.ahx)格式,再用SmartGen輸入將Flash 存儲器配置成常用的數(shù)據(jù)存儲器,將預(yù)先生成的.ahx文件導(dǎo)入生成data Storage宏模塊,就建立了正弦函數(shù)表。生成正弦函數(shù)表的流程圖如圖2所示。

            

           

            3.4 三相正弦波產(chǎn)生和輸出模塊[9,10]

            FPGA的Fushion芯片理論上可以實現(xiàn)任何方式的數(shù)學(xué)運算邏輯,但由于芯片的容量限制,并不是任何計算都能實現(xiàn)的。因此需事先將正弦函數(shù)離散并加載到FPGA的Flash存儲器中,在正弦調(diào)制波的離散過程中即可將一個周期完整地離散。因此,只對其中A相進行離散化處理,數(shù)據(jù)存儲在Flash存儲器中,每個數(shù)據(jù)分配1個地址。即可以利用計數(shù)器來產(chǎn)生取正弦波數(shù)據(jù)的地址,通過數(shù)字頻率合成技術(shù)改變計數(shù)器的計數(shù)頻率就可以改變正弦波的頻率。這樣即可先輸出一路的正弦波,另外兩路正弦波產(chǎn)生的方法與此類似,只是起始取數(shù)據(jù)的地址相差120°,即分別從第256和第512個數(shù)據(jù)開始取數(shù)。

            為了在每個調(diào)制波周期查找正弦函數(shù)表以及分別與載波進行比較,在設(shè)計中采用時分復(fù)用技術(shù)。即依據(jù)三相關(guān)系,由一個地址計數(shù)器,通過基本量加1轉(zhuǎn)移到另一地址計數(shù)器中,并且在跳轉(zhuǎn)過程中,這一地址計數(shù)器加1指向下一單元,從而分時取出三相地址單元的內(nèi)容。利用對正弦表尋址的高速度,使一個正弦表在不同時間段查詢不同相的正弦波的幅值,以達到減少正弦表所占用的FPGA資源的目的。這樣就大大減少了邏輯數(shù)目,僅增加了地址選擇器和三個同步存儲器,實現(xiàn)了正弦函數(shù)表的復(fù)用,在很大程度上節(jié)省了芯片的資源。

            電路的具體實現(xiàn):相位互差120°的三路地址數(shù)據(jù)并行輸入,通過一個三選一的選擇器進行選擇,選擇器的控制端接三進制的計數(shù)器。如計數(shù)器為0時,輸出A相地址,取出A相正弦值;為1時,輸出B相地址,取出B相正弦值;為2時,輸出C相地址,取出C相正弦值。因此只要使輸入的三相地址周期性變化,就可實現(xiàn)并行輸入的三相地址數(shù)據(jù)在時間上的連續(xù),也就實現(xiàn)了三相地址數(shù)據(jù)的合成。其存儲單元功能框圖如圖3。這樣就可以利用一個正弦表來得到三相的正弦值,達到減少正弦表占用FPGA資源的目的。

            

           

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

            

           

            其部分程序代碼如下:

            case(state1)

            A: //初始化狀態(tài)

            begin

            ADDRES1<=addr1; //時分復(fù)用第一路地址

            READ_EN<=1′b1; //讀使能開

            NEXT<=1′b1; //開啟預(yù)讀模式

            if(addr1==18'd767) //生成地址

            addr1<=18'd0;

            else if (!BUSY) //如不忙狀態(tài)開始讀

            begin

            addr1<=addr1+18′d1;//地址自增

            out0<=DATAOUT; //數(shù)據(jù)暫存

            state1<=B; //取第二路數(shù)據(jù)地址

            end

            end

            B: //取第二路數(shù)據(jù)

            begin

            ADDRES1<=addr2; //時分復(fù)用第二路地址

            READ_EN<=1′b1;

            NEXT<=1′b1;

            if(addr2==18′d767)

            addr2<=18′d0;

            else if (!BUSY)

            begin

            addr2<=addr2+18′d1;

            out1<=DATAOUT;

            state1<=C;

            end

            end

            C: //取第三路數(shù)據(jù)

            begin

            ADDRES1<=addr3; //時分復(fù)用第三路地址

            READ_EN<=1′b1;

            NEXT<=1′b1;

            if(addr3==18′d767)

            addr3<=18′d0;

            else if (!BUSY)

            begin

            addr3<=addr3+18′d1;

            out2<=DATAOUT;

            state1<=D;

            end

            end

            D: //空操作狀態(tài)

            begin

            state1<=E;

            end

            E: //數(shù)據(jù)存儲,同時取出三路數(shù)據(jù)

            begin

            outdata0<=out0;

            outdata1<=out1;

            outdata2<=out2;

            state1<=A;

            end

            endcase

            3.5 三角波與正弦波比較控制模塊

            該模塊用于輸出三相六路SPWM脈沖序列。用模塊1中輸出的三角波分別與模塊4輸出的三相正弦波相比較,從而先得到三路SPWM脈沖序列。當(dāng)正弦波數(shù)據(jù)大于三角波數(shù)據(jù)時,輸出高電平;反之,輸出低電平。每相輸出又分為互補的兩路輸出,利用一個逆變器對輸入波形取反,就可以得到與SPWM脈沖序列互補的波形。

            其部分程序代碼如下:

            always@(outdata0 or outdata1 or outdata2 or out2)//比較器

            begin

            if(outdata0>out2)

            outdata4=1;

            else outdata4=0;

            if(outdata1>out2)

            outdata5=1;

            else outdata5=0;

            if(outdata2>out2)

            outdata6=1;

            else outdata6=0;

            end

            3.6 時延控制死區(qū)輸出模塊

            對于SPWM三相橋式逆變器,由于開關(guān)管固有開關(guān)時間Ts的影響,開通時間Ton往往小于關(guān)斷時間Tof,因此容易發(fā)生同臂兩只開關(guān)管同時導(dǎo)通的短路故障。為了避免這種故障的發(fā)生,通常要設(shè)置開關(guān)死區(qū)ΔT,以保證同橋臂上的一只開關(guān)管可靠關(guān)斷后,另一只開關(guān)管才能開通。死區(qū)的設(shè)置方式有兩種:一種是提前關(guān)斷、延時開通的雙邊對稱設(shè)置;另一種是按時關(guān)斷、延滯Δt開通的單邊不對稱設(shè)置。根據(jù)FPGA的編程特點,選擇了按時關(guān)斷、延滯Δt開通的單邊不對稱設(shè)置,并且時延死區(qū)的調(diào)節(jié)與控制與時延控制死區(qū)模塊的輸入時鐘clk有關(guān)。

            根據(jù)延時模塊中延時信息:Δt=2×Tclk

            clk是鎖相環(huán)輸出時鐘CLK 1 MHz(本文采用的是1 MHz)的2次分頻得到的時鐘,只要改變頂層模塊中對CLK 1 MHz的分頻系數(shù),就可以精確控制延滯Δt的大小,本文計算值Δt=4μs。

            另外,死區(qū)調(diào)節(jié)單元還能消除由于FPGA器件本身時延造成的毛刺。其部分死區(qū)控制程序代碼如下:

            always@(posedge clk or posedge rst)

            begin

            if(rst) //異步復(fù)位

            begin //初始化寄存器

            q<=0;

            q0<=0;

            end

            else

            begin //延時輸出的D觸發(fā)器

            if(d)

            begin

            q0<=1′b1;

            q<=q0;

            end

            else

            begin //立即清零

            q<=0;

            q0<=0;

            end

            end

            end

            有關(guān)clk生成與調(diào)節(jié)的程序代碼如下:

            always@(posedge CLK1M or posedge rst) //分頻產(chǎn)生時延控制時鐘

            begin

            if(rst) //異步復(fù)位

            begin

            clk<=0; //時鐘初始狀態(tài)清零

            couter<=0; //計數(shù)初值設(shè)置零

            end

            else

            begin

            if(couter==2′b01)

            begin

            clk<=~clk;

            couter<=0;

            end

            else

            couter<=couter+1′b1; //計數(shù)器加1

            end

            end

            3.7 時鐘輸出控制模塊

            FushionAFS600器件的系統(tǒng)時鐘是48 MHz,因本設(shè)計正弦波的掃描頻率和三角波的掃描頻率預(yù)設(shè)為1 MHz,為減少時鐘輸出模塊的數(shù)量以及能方便更改系統(tǒng)輸出SPWM波形的占空比和頻率,本設(shè)計充分利用Fushion器件的時鐘調(diào)整電路,用SmartGen生成一個靜態(tài)PLL宏模塊,把系統(tǒng)時鐘分頻成1 MHz的時鐘分別是CLK 1 M和CLK 2 M,并連接到全局網(wǎng)絡(luò)上。當(dāng)需要一定頻率和不同占空比的SPWM脈沖時,只需計算出載波和調(diào)制波形的掃描頻率,而后直接在SmartGen宏模塊中修改靜態(tài)PLL輸出時鐘,就可實現(xiàn)輸出SPWM波形密度的控制與調(diào)節(jié),從而滿足各種工作頻率的需求。

            4 基于FPGA的SPWM實現(xiàn)及系統(tǒng)測試

            4.1 SPWM控制技術(shù)的FPGA實現(xiàn)

            根據(jù)頂層功能圖(如圖1),分別用Verilog HDL語言和SmartGen輸入描述了各個功能單元模塊,并分別在Libero 8.1集成開發(fā)環(huán)境下通過編譯和仿真驗證。最后用Verilog HDL語言編寫一個頂層模塊實現(xiàn)各個功能模塊的有機組合,以實現(xiàn)總體功能,再在Libero 8.1集成開發(fā)環(huán)境下進行編譯、邏輯綜合、布局布線后下載到目標(biāo)器件Fushion AFS600器件FPGA上,實現(xiàn)了三相六路可控SPWM全數(shù)字算法的片上系統(tǒng)。

            4.2 系統(tǒng)測試結(jié)果

            圖5是從邏輯分析儀上對系統(tǒng)測試的結(jié)果。從圖中可以看出所設(shè)計電路完全符合功能要求,且觀測到的時延死區(qū)時間均為4 μs,與理論計算值一致。下載后觀測與功能仿真,布局布線后仿真圖形也都完全一樣,達到了設(shè)計的預(yù)期要求。

            

           

            圖5 邏輯分析儀測試時序結(jié)果

          fpga相關(guān)文章:fpga是什么


          c語言相關(guān)文章:c語言教程


          存儲器相關(guān)文章:存儲器原理


          塵埃粒子計數(shù)器相關(guān)文章:塵埃粒子計數(shù)器原理
          脈寬調(diào)制相關(guān)文章:脈寬調(diào)制原理
          數(shù)字濾波器相關(guān)文章:數(shù)字濾波器原理
          三相異步電動機相關(guān)文章:三相異步電動機原理
          鎖相環(huán)相關(guān)文章:鎖相環(huán)原理


          關(guān)鍵詞: Verilog HDL SPWM FPGA

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();