前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Verilog实现产生任意占空比的PWM波

Verilog实现产生任意占空比的PWM波

作者头像
单片机点灯小能手
发布2020-07-16 17:49:08
1.9K0
发布2020-07-16 17:49:08
举报

实现思路

实现方法很简单,使用一个计数器一直计数,然后和两个值进行比较,一个值是高电平时间htime,一个值是周期period,在小于htime期间,输出高电平;大于h_time期间,输出低电平,到达周期period时,计数器清零。

端口说明

  • clk:时钟信号
  • nreset:复位信号,低电平复位,输出为0
  • en:使能信号,高电平使能输出,低电平输出为0,
  • period:PWM的周期,如主时钟96M,产生4MHz的波形,则period = 96/4 = 24
  • htime:高电平的时间,如主时钟96M,产生4MHz,占空比25%的波形,则htime = 24 * 0.25 = 6
  • pwm:PWM波输出
源程序

pwm_gen.v

代码语言:javascript
复制
module pwm_gen(
input nreset,input clk,input en,
input [15:0] period,input [15:0] h_time,
output reg pwm
);
reg [31:0] CNT;
always @ (posedge clk)begin    if(!nreset)        CNT <= 0;    else if(CNT >= period - 1 )        CNT <= 0;    else        CNT <= CNT + 1;end
always @ (posedge clk)begin    if(!nreset)        pwm <= 0;    else    //nreset = 1    begin        if(en == 0)            pwm <= 0;        else    //en = 1        begin            if(CNT <= h_time - 1)                pwm <= 1;            else                pwm <= 0;        end    endend
endmodule

实际应用

可产生任意占空的PWM波,若主时钟为96MHz。

  • 产生4MHz,50%占空比:period = 24,h_time = 12;
  • 产生3KHz,50%占空比:period = 32000,h_time = 16000;
  • 产生宽度10us,间隔100us的脉冲信号:period = 10560,h_time = 960;

历史精选

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 电子电路开发学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实现思路
  • 端口说明
    • 源程序
    • 实际应用
    • 历史精选
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档