04_基于FPGA的PWM控制灯的亮暗
实验原理
PWM的全称为Pulse-Width Modulation(脉冲宽度调制,),实际就是调节脉冲的占空比。当输出的脉冲频率一定时,输出脉冲的占空比越大,相当于输出的有效电平越大,这样也就简单实现了由FPGA来控制模拟量。由一个独立按键key来控制FPGA输出脉冲的占空比,用该脉冲去直接驱动发光二极管LED,随着占空比不同,LED的亮度将不同。
设计原理框图:
硬件原理图
实验代码
/********************************版权声明************************************** ** 大西瓜团队 ** **----------------------------文件信息-------------------------- ** 文件名称: pwm.v ** 创建日期: ** 功能描述:按键控制led的亮度 ** 硬件平台:大西瓜第三代开发板,http://daxiguafpga.taobao.com ** 版权声明:本代码属个人知识产权,本代码仅供交流学习. **---------------------------修改文件的相关信息---------------- ** 修改人: ** 修改日期: ** 修改内容: *******************************************************************************/ module pwm(clk,reset,key,led); input clk,reset,key; output led;
reg pwm_out;
reg key_out; parameter s0=2'b00,s1=2'b01,s2=2'b10,s3=2'b11; reg [1:0] state;
reg [31:0] clk_counter; reg [9:0] pwm_counter; reg flag; /******************按键消抖**************************/ always @(posedge clk) begin case (state) s0: begin key_out<=1'b1; if(key==1'b0) state<=s1; else state<=s0; end s1: begin if(key==1'b0) state<=s2; else state<=s0; end s2: begin if(key==1'b0) state<=s3; else state<=s0; end s3: begin if(key==1'b0) begin key_out<=1'b0; state<=s3; end else begin key_out<=1'b1; state<=s0; end end default: state<=s0; endcase end always @(posedge clk) begin clk_counter<=clk_counter+1'b1; if (clk_counter[13:4]<pwm_counter) pwm_out=1; else pwm_out=0;
if (clk_counter[15]==1'b1) begin if (flag==1'b1) begin flag<=1'b0; if (key_out==1'b0) pwm_counter<=(pwm_counter+10'b0000000011); else pwm_counter<=pwm_counter; end end else flag<=1'b1; end assign led=pwm_out; endmodule |
实验操作
实验效果
大西瓜FPGA-->https://daxiguafpga.taobao.com
配套开发板:https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-24211932856.3.489d7241aCjspB&id=633897209972
博客资料、代码、图片、文字等属大西瓜FPGA所有,切勿用于商业! 若引用资料、代码、图片、文字等等请注明出处,谢谢!
每日推送不同科技解读,原创深耕解读当下科技,敬请关注微信公众号"科乎"。