日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spwm控制算法c语言实现,采用Verilog HDL语言与DDS技术实现SPWM控制算法的FPGA设计

發布時間:2024/1/1 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spwm控制算法c语言实现,采用Verilog HDL语言与DDS技术实现SPWM控制算法的FPGA设计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

其部分程序代碼如下:

case(state1)

A: //初始化狀態

begin

ADDRES1《=addr1; //時分復用第一路地址

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

NEXT《=1′b1; //開啟預讀模式

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

addr1《=18’d0;

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

begin

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

out0《=DATAOUT; //數據暫存

state1《=B; //取第二路數據地址

end

end

B: //取第二路數據

begin

ADDRES1《=addr2; //時分復用第二路地址

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: //取第三路數據

begin

ADDRES1《=addr3; //時分復用第三路地址

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: //空操作狀態

begin

state1《=E;

end

E: //數據存儲,同時取出三路數據

begin

outdata0《=out0;

outdata1《=out1;

outdata2《=out2;

state1《=A;

end

endcase

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

該模塊用于輸出三相六路SPWM脈沖序列。用模塊1中輸出的三角波分別與模塊4輸出的三相正弦波相比較,從而先得到三路SPWM脈沖序列。當正弦波數據大于三角波數據時,輸出高電平;反之,輸出低電平。每相輸出又分為互補的兩路輸出,利用一個逆變器對輸入波形取反,就可以得到與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 時延控制死區輸出模塊

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

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

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

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

always@(posedge clk or posedge rst)

begin

if(rst) //異步復位

begin //初始化寄存器

q《=0;

q0《=0;

end

else

begin //延時輸出的D觸發器

if(d)

begin

q0《=1′b1;

q《=q0;

end

else

begin //立即清零

q《=0;

q0《=0;

end

end

end

有關clk生成與調節的程序代碼如下:

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

begin

if(rst) //異步復位

begin

clk《=0; //時鐘初始狀態清零

couter《=0; //計數初值設置零

end

else

begin

if(couter==2′b01)

begin

clk《=~clk;

couter《=0;

end

else

couter《=couter+1′b1; //計數器加1

end

end

3.7 時鐘輸出控制模塊

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

4 基于FPGA的SPWM實現及系統測試

4.1 SPWM控制技術的FPGA實現

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

4.2 系統測試結果

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

總結

以上是生活随笔為你收集整理的spwm控制算法c语言实现,采用Verilog HDL语言与DDS技术实现SPWM控制算法的FPGA设计的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。