用verilog设计频率和占空比可调pwm

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用verilog设计频率和占空比可调pwm相关的知识,希望对你有一定的参考价值。

module pwm_test(
input clk , //时钟输入,可在外部设置不同时钟
input rst_n , //低电平复位
input [7:0] f , //频率控制,最大255
input [7:0] d , //占空比控制字,上限100

output pwm_out //PWM输出
);

reg [17:0] count ; //计数

always @(posedge clk or negedge rst_n) begin
if(~rst_n) begin
count <= 0 ;
end
else if(count >= 17'd100_000) //计数到100K清零
count <= 0 ;
else
count <= count + f; //每次累加频率值
end

assign pwm_out = (count < d*1000)? 1:0 ;//PWM输出

endmodule
参考技术A // pwm out module
// author: jiajia.pi
// version: v1.0
// last modify date: 2014/01/10
// period range: 0~65535
// pulse_width range: 0~period
module pwm(
clk, // global clock
reset_n, // global async low reset
en, // pwm output enable, high enable
period, // pwm period
pulse_width, // pwm pulse width, must less or equal to pwm period
out // pwm output
);
input clk;
input reset_n;
input en;
input [15:0]period;
input [15:0]pulse_width;
output out;

reg [15:0]cnt;
reg wave;
wire out = wave;

always @(posedge clk or negedge reset_n)
if(!reset_n)
cnt <= 0;
else if(cnt<period-1 && en)
cnt <= cnt + 1;
else
cnt <= 0;

always @(posedge clk or negedge reset_n)
if(!reset_n)
wave <= 0;
else if(cnt<pulse_width && en)
wave <= 1;
else
wave <= 0;

endmodule

我以前写了一个,你看看,应该可以直接用的

STM32中的PWM的频率和占空比的设置

转于http://blog.csdn.net/liming0931/article/details/8491468

下面的这个是stm32的定时器逻辑图,上来有助于理解:

 

技术分享
 

 

TIM3的ARR寄存器和PSC寄存器,

确定PWM频率。
这里配置的这两个定时器确定了PWM的频率,我的理解是:PWM的周期(频率)就是ARR寄存器值与PSC寄存器值相乘得来,但不是简单意义上的相乘,例如要设置PWM的频率参考上次通用定时器中设置溢出时间的算法,例如输出100HZ频率的PWM,首先,确定TIMx的时钟,除非APB1的时钟分频数设置为1,否则通用定时器TIMx的时钟是APB1时钟的2倍,这时的TIMx时钟为72MHz,用这个TIMx时钟72MHz除以(PSC+1),得到定时器每隔多少秒涨一次,这里给PSC赋7199,计算得定时器每隔0.0001秒涨一次,即此时频率为10KHz,再把这个值乘以(ARR+1)得出PWM频率,假如ARR值为0,即0.0001*(0+1),则输出PWM频率为10KHz,再假如输出频率为100Hz的PWM,则将ARR寄存器设置为99即可。如果想调整PWM占空比精度,则只需降低PSC寄存器的值即可。

TIMx_CCRx寄存器,

确定PWM的占空比。
TIMx_CCR1—TIMx_CCR4确定定时器的CH1—CH4四路PWM的占空比。直接给该寄存器赋0—65535值即可确定占空比。占空比计算方法:TIMx_CCRx的值除以ARR寄存器的值即为占空比,因为占空比在0—100%之间,所以一般TIMx_CCRx寄存器值不能超过ARR寄存器的值,否则可能会引起PWM的频率或占空比的准确性。



以上是关于用verilog设计频率和占空比可调pwm的主要内容,如果未能解决你的问题,请参考以下文章

pwm频率和占空比的区别

verilog编写可调PWM波形

什么是pwm占空比

STM32中的PWM的频率和占空比的设置

什么是pwm占空比

怎么用51单片机来实现pwm调节占空比