FPGA在QuartusⅡ平台生成的可调PWM

脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。

  脉冲宽度调制是一种模拟控制方式,其根据相应载荷的变化来调制晶体管栅极或基极的偏置,来实现开关稳压电源输出晶 体管或晶体管导通时间的改变,这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。

  PWM控制技术以其控制简单,灵活和动态响应好的优点而成为电力电子技术最广泛应用的控制方式,也是人们研究的热点.由于当今科学技术的发展已经没有了学科之间的界限,结合现代控制理论思想或实现无谐振软开关技术将会成为PWM控制技术发展的主要方向之一。

// 生成一路PWM,频率默认2K
module PWM ( 
    //input 
    sys_clk,
    sys_rst_n,
    duty_cycle,  // 占空比,有效值 0-100

    //output 
    pwm
);

//input ports
input sys_clk;      //system clock;
input sys_rst_n;    //system reset, low is active;
input [WIDTH-1:0] duty_cycle;

//output ports
output pwm;

//reg define 

reg pwm_out;
reg [19:0] counter; // 最大值 1048575,PWM频率最低可以设置到 48HZ

//wire define 
wire pwm;

//parameter define 
parameter WIDTH = 7;
parameter SIZE  = 8;

/*
设PWM频率为 f,晶振频率为F
则计数器的最大值为 counter_max = (1/f)/(1/F) = F/f = 50M / 2K = 25*10^3
*/
parameter PWM_FREQUENCY = 2000; //2K
parameter OSC_FREQUENCY = 50000000; //50M
parameter COUNTER_MAX = OSC_FREQUENCY/PWM_FREQUENCY;

// 主程序
always @(posedge sys_clk or negedge sys_rst_n) begin 
        if (sys_rst_n ==1'b0)
            counter <= 20'b0;
        else if (counter>=COUNTER_MAX)
            counter <= 20'b0;
        else 
            counter  <= counter + 20'b1;
end

always @(posedge sys_clk or negedge sys_rst_n) begin 
        if (sys_rst_n ==1'b0) begin 
            pwm_out <= 1'b0;
        end
        else if (counter <= COUNTER_MAX*duty_cycle/100)  
            pwm_out  <= 1'b1;
        else 
            pwm_out  <= 1'b0;
end


assign pwm = pwm_out;

endmodule
//end of RTL code       

 

 

 

 

 

 

你可能感兴趣的:(FPGA在QuartusⅡ平台生成的可调PWM)