資料介紹
作者:ALINX
* 本原創(chuàng)教程由芯驛電子科技(上海)有限公司(ALINX)創(chuàng)作,版權(quán)歸本公司所有,如需轉(zhuǎn)載,需授權(quán)并注明出處。
適用于板卡型號:
AXU2CGA/AXU2CGB/AXU3EG/AXU4EV-E/AXU4EV-P/AXU5EV-E/AXU5EV-P /AXU9EG/AXU15EG
實驗Vivado工程為“pwm_led”。
本文主要講解使用PWM控制LED,實現(xiàn)呼吸燈的效果。
1.實驗原理
如下圖所示,用一個N比特的計數(shù)器,最大值可以表示為2的N次方,最小值0,計數(shù)器以“period”為步進值累加,加到最大值后會溢出,進入下一個累加周期。當(dāng)計數(shù)器值大于“duty”時,脈沖輸出高,否則輸出低,這樣就可以完成圖中紅色線所示的脈沖占空比可調(diào)的脈沖輸出,同時“period”可以調(diào)節(jié)脈沖頻率,可以理解為計數(shù)器的步進值。
PWM脈寬調(diào)制示意圖
不同的脈沖占空比的方波輸出后加在LED上,LED燈就會顯示不同的亮度,通過不斷地調(diào)節(jié)方波的占空比,從而實現(xiàn)LED燈亮度的調(diào)節(jié)。
2. 實驗設(shè)計
PWM模塊設(shè)計非常簡單,在上面的原理中已經(jīng)講到,這里不再說原理。
PWM模塊(ax_pwm)端口
`timescale1ns/1ps
module ax_pwm
#(
parameter N =16//pwm bit width
)
(
input clk,
input rst,
input[N -1:0]period, //pwm step value
input[N -1:0]duty, //duty value
output pwm_out //pwm output
);
reg[N -1:0] period_r; //period register
reg[N -1:0] duty_r; //duty register
reg[N -1:0] period_cnt; //period counter
reg pwm_r;
assign pwm_out = pwm_r;
always@(posedge clk orposedge rst)
begin
if(rst==1)
begin
period_r
duty_r
end
else
begin
period_r
duty_r
end
end
//period counter, step is period value
always@(posedge clk orposedge rst)
begin
if(rst==1)
period_cnt
else
period_cnt
end
always@(posedge clk orposedge rst)
begin
if(rst==1)
begin
pwm_r
end
else
begin
if(period_cnt >= duty_r) //if period counter is bigger or equals to duty value, then set pwm value to high
pwm_r
else
pwm_r
end
end
那么如何實現(xiàn)呼吸燈的效果呢?我們知道呼吸燈效果是由暗不斷的變亮,再由亮不斷的變暗的過程,而亮暗效果是由占空比來調(diào)節(jié)的,因此我們主要來控制占空比,也就是控制duty的值。
在下面的測試代碼中,通過設(shè)置period的值,設(shè)定PWM的頻率為200Hz,PWM_PLUS狀態(tài)即是增加duty值,如果增加到最大值,將pwm_flag置1,并開始將duty值減少,待減少到最小的值,則開始增加duty值,不斷循環(huán)。其中PWM_GAP狀態(tài)為調(diào)整間隔,時間為100us。
`timescale1ns/1ps
module pwm_test(
input clk, //25MHz
input rst_n, //low active
output led //high-off, low-on
);
localparam CLK_FREQ =25; //25MHz
localparam US_COUNT = CLK_FREQ ; //1 us counter
localparam MS_COUNT = CLK_FREQ*1000; //1 ms counter
localparam DUTY_STEP =32'd100000; //duty step
localparam DUTY_MIN_VALUE =32'h6fffffff; //duty minimum value
localparam DUTY_MAX_VALUE =32'hffffffff; //duty maximum value
localparam IDLE =0; //IDLE state
localparam PWM_PLUS =1;//PWM duty plus state
localparam PWM_MINUS =2;//PWM duty minus state
localparam PWM_GAP =3;//PWM duty adjustment gap
wire pwm_out; //pwm output
reg[31:0] period; //pwm step value
reg[31:0] duty; //duty value
reg pwm_flag ; //duty value plus and minus flag, 0: plus; 1: minus
reg[3:0] state;
reg[31:0] timer; //duty adjustment counter
assign led =~pwm_out ;//led low active
always@(posedge clk ornegedge rst_n)
begin
if(rst_n ==1'b0)
begin
period
timer
duty
pwm_flag
state
end
else
case(state)
IDLE:
begin
period
state
duty
end
PWM_PLUS :
begin
if(duty > DUTY_MAX_VALUE - DUTY_STEP) //if duty is bigger than DUTY MAX VALUE minus DUTY_STEP , begin to minus duty value
begin
pwm_flag
duty
end
else
begin
pwm_flag
duty
end
state
end
PWM_MINUS :
begin
if(duty
begin
pwm_flag
duty
end
else
begin
pwm_flag
duty
end
state
end
PWM_GAP:
begin
if(timer >= US_COUNT*100)//adjustment gap is 100us
begin
if(pwm_flag)
state
else
state
timer
end
else
begin
timer
end
end
default:
begin
state
end
endcase
end
//Instantiate pwm module
ax_pwm
#(
.N(32)
)
ax_pwm_m0(
.clk (clk),
.rst (~rst_n),
.period (period),
.duty (duty),
.pwm_out (pwm_out)
);
endmodule
3. 下載驗證
生成bitstream,并下載bit文件,可以看到PL LED1燈產(chǎn)生呼吸燈效果。PWM是比較常用的模塊,比如風(fēng)扇轉(zhuǎn)速控制,電機轉(zhuǎn)速控制等等。
- 采用Zynq UltraScale+ MPSoC滿足汽車ESD和SEED要求
- Zynq UltraScale+ MPSoC中的隔離方法應(yīng)用筆記
- Zynq UltraScale+ MPSoC生產(chǎn)勘誤表
- Zynq UltraScale+ MPSoC數(shù)據(jù)手冊:DC和AC開關(guān)特性
- Zynq UltraScale+ MPSoC驗證數(shù)據(jù)手冊
- Zynq UltraScale+ MPSoC:軟件開發(fā)者指南
- Zynq UltraScale+ MPSoC中的隔離方法
- Zynq UltraScale+ MPSoC的隔離設(shè)計示例
- 適用于Xilinx Zynq UltraScale+ MPSoC應(yīng)用的電源參考設(shè)計
- 米爾電子zynq ultrascale+ mpsoc底板外設(shè)資源清單分享
- 【ZYNQ Ultrascale+ MPSOC FPGA教程】第十四章 HDMI輸出實驗
- 如何調(diào)試 Zynq UltraScale+ MPSoC VCU DDR 控制器?
- 【ZYNQ Ultrascale+ MPSOC FPGA教程】第一章 MPSoC芯片介紹
- 《測控電路》習(xí)題完整參考答案(第十章) 0次下載
- HCIE復(fù)習(xí)資料第十章 特性 0次下載
- 針對UltraScale/UltraScale+芯片DFX應(yīng)考慮的因素有哪些(1) 537次閱讀
- Xilinx ZYNQ UltraScale+系列產(chǎn)品介紹 2405次閱讀
- FPGAs,Zynq和Zynq MPSoC器件的特點 2275次閱讀
- 基于Xilinx Zynq UltraScale+ RFSoC ZCU216評估套件詳細內(nèi)容介紹 9162次閱讀
- 基于Xilinx Zynq ultraScale+ 系列FPGA的AXU2CGB 開發(fā)板評測 9051次閱讀
- 米爾科技Zynq UltraScale+ MPSoC技術(shù)參考手冊介紹 2975次閱讀
- 詳解Xilinx公司Zynq? UltraScale+?MPSoC產(chǎn)品 3184次閱讀
- Xilinx Zynq UltraScale MPSoC可擴展電源設(shè)計 1950次閱讀
- Xilinx Kintex UltraScale+ FPGA KCU116評估套件主要性能和優(yōu)勢 6734次閱讀
- Zynq UltraScale+ MPSoC ZCU102評估套件解決方案 8640次閱讀
- Enea OSE可實現(xiàn)對Xilinx UltraScale+ MPSoC的支持 2790次閱讀
- Xilinx基于ARM的Zynq-7000和Zynq UltraScale+ MPSoC及RFSoC器件是否存在安全漏洞 2620次閱讀
- Zynq UltraScale+ MPSoC 上的多個Linux UIO設(shè)計 3219次閱讀
- 用ZYNQ MPSoC玩DOOM! 2539次閱讀
- Ti推出面向Zynq UltraScale+ MPSoC的電源參考設(shè)計 3588次閱讀
下載排行
本周
- 1電子電路原理第七版PDF電子教材免費下載
- 0.00 MB | 1491次下載 | 免費
- 2單片機典型實例介紹
- 18.19 MB | 95次下載 | 1 積分
- 3S7-200PLC編程實例詳細資料
- 1.17 MB | 27次下載 | 1 積分
- 4筆記本電腦主板的元件識別和講解說明
- 4.28 MB | 18次下載 | 4 積分
- 5開關(guān)電源原理及各功能電路詳解
- 0.38 MB | 11次下載 | 免費
- 6100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 7基于單片機和 SG3525的程控開關(guān)電源設(shè)計
- 0.23 MB | 4次下載 | 免費
- 8基于AT89C2051/4051單片機編程器的實驗
- 0.11 MB | 4次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費
- 2PADS 9.0 2009最新版 -下載
- 0.00 MB | 66304次下載 | 免費
- 3protel99下載protel99軟件下載(中文版)
- 0.00 MB | 51209次下載 | 免費
- 4LabView 8.0 專業(yè)版下載 (3CD完整版)
- 0.00 MB | 51043次下載 | 免費
- 5555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33562次下載 | 免費
- 6接口電路圖大全
- 未知 | 30320次下載 | 免費
- 7Multisim 10下載Multisim 10 中文版
- 0.00 MB | 28588次下載 | 免費
- 8開關(guān)電源設(shè)計實例指南
- 未知 | 21539次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935053次下載 | 免費
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537793次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191183次下載 | 免費
- 7十天學(xué)會AVR單片機與C語言視頻教程 下載
- 158M | 183277次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138039次下載 | 免費
評論
查看更多