前言

正文

一、50%的占空比

目标:FPGA的时钟为50MHZ,生成20KHZ的占空比位50%的PWM波
设需要计数器计到x后清零,求出x:
x/50_000_000 = 1/20_000

设计文件

module pwm #(parameter MAX = 2499
)(input clk,input rst_n,output reg clk_20k
);reg [15:0] cnt;always @(posedge clk or negedge rst_n) beginif(!rst_n)cnt <= 16'd0;else if(cnt == MAX)cnt <= 16'd0;else    cnt <= cnt + 16'd1;
endalways @(posedge clk or negedge rst_n) beginif(!rst_n)clk_20k <= 1'd0;else if(cnt == (MAX -1) /2)clk_20k <= 1'd1;else if(cnt == MAX)clk_20k <= 1'd0;else clk_20k <= clk_20k;
endendmodule

二、占空比可调

使用FPGA生成一个占空比为70%的PWM波
注:可以通过调节PWM_num 的大小,进而实现不同占空比的PWM波

// 占空比可变
module pwm_change #(parameter MAX = 1249,parameter PWM_num = 874
)(input clk,input rst_n,output reg clk_20k_70
);reg [15:0] cnt_1249;
reg  dec_up;
reg  dec_down;// 生成三角波,使用if语句,实现自加到1249后,再自减到0
always @(posedge clk or negedge rst_n) beginif(!rst_n)cnt_1249 <= 16'd0;else if(dec_up)  cnt_1249 <= cnt_1249 + 16'd1;else if(dec_down)cnt_1249 <= cnt_1249 - 16'd1;endalways @(posedge clk or negedge rst_n) beginif(!rst_n)begindec_up <= 1'd0;dec_down <=1'd0;       endelse if(cnt_1249 == MAX)begindec_down <= 1'd1;// 计到最大值后,向下计数信号拉高dec_up <= 1'd0;      endelse if(cnt_1249 == 0)begindec_down <= 1'd0;dec_up <= 1'd1; // 计到最小值后,向上计数信号拉高      endend
// 通过上面已经生成的三角波,使用PWM_num调节占空比
always @(posedge clk or negedge rst_n) beginif(!rst_n)clk_20k_70 <= 1'd0;else if(cnt_1249 >= PWM_num)clk_20k_70 <= 1'd0;else if(cnt_1249 < PWM_num)clk_20k_70 <= 1'd1;else clk_20k_70 <= clk_20k_70;
endendmodule

最后生成的70%占空比的PWM波形如下:

FPGA:生成占空比可调的PWM波相关推荐

  1. 产生频率或者占空比可调的PWM波【汇编语言】

    PWM在各个编程中都非常的重要,在学习32单片机,FPGA等中都有学习到,本次文章为介绍汇编语言编写频率或占空比可调的PWM波,从更加底层的方面介绍和去了解pwm波生成的过程,基于S3C2410X/S ...

  2. 按键控制输出占空比可调的PWM波

    这里写自定义目录标题 按键的误区 举个例子 代码如下 实验结果 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定内容居中.居左.居右 SmartyPants 创建一个自定义列表 如何 ...

  3. 如何使用定时器产生两路频率可调、占空比可调的PWM波

    接上次的博客,上一篇博客介绍的是产生两路频率可调.占空比固定为50%的方波,但是更多情况下也需要调节占空比,这篇博客简单介绍下.其实和频率可调的输出基本上是一样的,只需要再加上一个Duty来控制CCR ...

  4. 比较器应用三:占空比可调的PWM波

    本文章产生占空比可调的PWM波主要原理是直流波和三角波通过比较器比较,从而比较器输出端输出PWM波,通过图1来说明. 假设三角波接入比较器的负输入端,直流波接入比较器的正输入端,即当直流波大于三角波时 ...

  5. 占空比输出程序c语言,关于51单片机输出频率和占空比可调的PWM波程序问题

    //------------------------------------------------------------------------------------ //程序功能简介:本程序产 ...

  6. 如何使用定时器产生两路频率可调的PWM波

    输出频率可调的方波(占空比不可调,默认为50%) 使用定时器来产生PWM波大家应该都很熟悉,但是如何使用定时器产生频率可调的PWM波呢?这就需要使用定时器的输出比较翻转模式TIM_OCMode_Tog ...

  7. 【专题5: 硬件设计】 之 【61.案例四:简易空气净化器,使用硬件产生PWM波并对马达调速】

    嵌入式工程师成长之路 系列文章 总目录 系列文章总目录 希望本是无所谓有,无所谓无的,这正如脚下的路,其实地上本没有路,走的人多了,也便成了路 原创不易,文章会持续更新,欢迎微信扫码关注公众号 承接 ...

  8. 如何使用定时器捕获一路PWM波信号的频率和占空比

    本次实验将采用定时器2的通道2产生两路频率和占空比均可调的PWM信号,然后使用定时器3的通道1来捕获其中的一路PWM波的频率和占空比. 1.首先来看下产生PWM波的程序,也就是和上篇博客是一样的,只不 ...

  9. stm32f4 用一个定时器输出多个不同频率占空比PWM波(含代码)

    之前有写过怎么使用定时器生成PWM波,以及怎么修改频率与占空比,具体大家可以看下面这篇 stm32f4 生成PWM波_居安士的博客-CSDN博客_stm32产生pwm波 STM32每一个定时器都有4路 ...

  10. stm32f4 输出pwm波_stm32的pwm输出代码及注释

    stm32是非常常用的单片机.脉冲宽度调制(PWM),是英文"Pulse WidthModulation"的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非 ...

最新文章

  1. php 运维系统开发,PHP开发运维管理系统笔记
  2. ue4小白人骨骼定义_UE4角色骨架创建流程_资源库
  3. 创建试图 失败_在失败中学习,MIT新研究显示,机器可以像婴儿一样学会理解人类目标...
  4. 三、Java面向对象编程有四个特征
  5. tp3.2 mysql elt出错_ThinkPHP3.2.3 SQL注入漏洞分析
  6. python怎么另起一行继续输入_python如何换行继续输入
  7. 基于layui的select区域联动
  8. Java基础之字符串详细比较
  9. 8.3分叉/结合的框架(Fork/Join Framework)
  10. 刘光星- 软件151
  11. win7 操作mysql_win7系统如何设置Mysql密码保护数据库
  12. word xml 上下标
  13. Cisco Packet Tracer 8.0 发布,百度网盘下载
  14. Unity 4.6.2 iOS 64位支持
  15. Android HIDL 介绍学习之客户端调用
  16. 计算机使用方法的书,是否知道飞鸽传书软件的详细使用方法?查看介绍
  17. chinapay 新版php接口,银联电子支付(chinapay)接口配置
  18. Genesis——区块链3.0时代集大成者
  19. 第 5-5 课: 如何打包部署 Spring Boot 项⽬
  20. cesium fog雾特效参数设置

热门文章

  1. php多个语言包,thinkphp实现多语言功能(语言包)
  2. 各界优秀人士的博客地址
  3. 红帽子linux装mysql_红帽学习之Linux安装
  4. OpenLayers 6 实现仿Echarts风格的动态迁徙图/航班图
  5. 一次性搞懂 HTTP、HTTPS、SPDY
  6. 闽南理工学院教务网络管理系统所有服务器,闽南理工学院教务管理网络系统登录入口 http://222.77.99.244:8094/jwweb/,精英高考网...
  7. viper12a电源电路图_基于VIPER12A芯片设计的开关电源
  8. Autodesk AutoCAD 2018 for Mac 汉化破解版安装教程
  9. social-engineer-toolkit搭建-网站克隆钓鱼
  10. 分类信息采集发布采集器软件