• 04_基于FPGA的PWM控制灯的亮暗


    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所有,切勿用于商业! 若引用资料、代码、图片、文字等等请注明出处,谢谢!

       

    每日推送不同科技解读,原创深耕解读当下科技,敬请关注微信公众号"科乎"。

  • 相关阅读:
    ip netns
    PPT动手动脑1
    暑假作业日总结
    暑假作业日总结
    课前测试总结
    暑假作业日总结
    大二上每日总结
    暑假作业日总结
    大二上每日总结
    暑假作业日总结
  • 原文地址:https://www.cnblogs.com/logic3/p/15915886.html
Copyright © 2020-2023  润新知