呼吸灯实验
目录
1 呼吸灯简介
2 实验任务
3 硬件设计
4 程序设计
5 下载验证
1 呼吸灯简介
呼吸灯采用 PWM 的方式,在固定的频率下,通过调整占空比的方式来控制 LED 灯亮度的变化。 PWM (Pulse Width Modulation ),即脉冲宽度调制,它利用微处理器输出的 PWM 信号,实现对模拟电路控制的一种非常有效的技术,广泛应用于测量、通信、功率控制等领域。 在由计数器产生的固定周期的 PWM 信号下,如果其占空比为 0 ,则 LED 灯不亮;如果其占空比为 100%,则 LED 灯最亮。所以将占空比从 0 到 100% ,再从 100% 到 0 不断变化,就可以实现 LED 灯的“呼吸”效果。
2 实验任务
实现呼吸灯的效果。
3 硬件设计
#IO 管脚约束 set_property -dict {PACKAGE_PIN U18 IOSTANDARD LVCMOS33} [get_ports sys_clk] set_property -dict {PACKAGE_PIN N16 IOSTANDARD LVCMOS33} [get_ports sys_rst_n] set_property -dict {PACKAGE_PIN J16 IOSTANDARD LVCMOS33} [get_ports led]
4 程序设计
module breath_led(input sys_clk , //时钟信号 50Mhzinput sys_rst_n , //复位信号output led //LED
);//reg define
reg [15:0] period_cnt ; //周期计数器频率:1khz 周期:1ms 计数值:1ms/20ns=50000
reg [15:0] duty_cycle ; //占空比数值
reg inc_dec_flag ; //0 递增 1 递减//*****************************************************
//** main code
//*****************************************************//根据占空比和计数值之间的大小关系来输出 LED
assign led = (period_cnt >= duty_cycle) ? 1'b1 : 1'b0;//周期计数器
always @(posedge sys_clk or negedge sys_rst_n) beginif(!sys_rst_n)period_cnt <= 16'd0;else if(period_cnt == 16'd50000)period_cnt <= 16'd0;elseperiod_cnt <= period_cnt + 1'b1;
end//在周期计数器的节拍下递增或递减占空比
always @(posedge sys_clk or negedge sys_rst_n) beginif(!sys_rst_n) beginduty_cycle <= 16'd0;inc_dec_flag <= 1'b0;endelse beginif(period_cnt == 16'd50000) begin //计满 1msif(inc_dec_flag == 1'b0) begin //占空比递增状态if(duty_cycle == 16'd50000) //如果占空比已递增至最大inc_dec_flag <= 1'b1; //则占空比开始递减else //否则占空比以 25 为单位递增duty_cycle <= duty_cycle + 16'd25;endelse begin //占空比递减状态if(duty_cycle == 16'd0) //如果占空比已递减至 0inc_dec_flag <= 1'b0; //则占空比开始递增else //否则占空比以 25 为单位递减duty_cycle <= duty_cycle - 16'd25;endendend
endendmodule 5 下载验证
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
