FPGA:生成占空比可调的PWM波
前言
正文
一、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波相关推荐
- 产生频率或者占空比可调的PWM波【汇编语言】
PWM在各个编程中都非常的重要,在学习32单片机,FPGA等中都有学习到,本次文章为介绍汇编语言编写频率或占空比可调的PWM波,从更加底层的方面介绍和去了解pwm波生成的过程,基于S3C2410X/S ...
- 按键控制输出占空比可调的PWM波
这里写自定义目录标题 按键的误区 举个例子 代码如下 实验结果 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定内容居中.居左.居右 SmartyPants 创建一个自定义列表 如何 ...
- 如何使用定时器产生两路频率可调、占空比可调的PWM波
接上次的博客,上一篇博客介绍的是产生两路频率可调.占空比固定为50%的方波,但是更多情况下也需要调节占空比,这篇博客简单介绍下.其实和频率可调的输出基本上是一样的,只需要再加上一个Duty来控制CCR ...
- 比较器应用三:占空比可调的PWM波
本文章产生占空比可调的PWM波主要原理是直流波和三角波通过比较器比较,从而比较器输出端输出PWM波,通过图1来说明. 假设三角波接入比较器的负输入端,直流波接入比较器的正输入端,即当直流波大于三角波时 ...
- 占空比输出程序c语言,关于51单片机输出频率和占空比可调的PWM波程序问题
//------------------------------------------------------------------------------------ //程序功能简介:本程序产 ...
- 如何使用定时器产生两路频率可调的PWM波
输出频率可调的方波(占空比不可调,默认为50%) 使用定时器来产生PWM波大家应该都很熟悉,但是如何使用定时器产生频率可调的PWM波呢?这就需要使用定时器的输出比较翻转模式TIM_OCMode_Tog ...
- 【专题5: 硬件设计】 之 【61.案例四:简易空气净化器,使用硬件产生PWM波并对马达调速】
嵌入式工程师成长之路 系列文章 总目录 系列文章总目录 希望本是无所谓有,无所谓无的,这正如脚下的路,其实地上本没有路,走的人多了,也便成了路 原创不易,文章会持续更新,欢迎微信扫码关注公众号 承接 ...
- 如何使用定时器捕获一路PWM波信号的频率和占空比
本次实验将采用定时器2的通道2产生两路频率和占空比均可调的PWM信号,然后使用定时器3的通道1来捕获其中的一路PWM波的频率和占空比. 1.首先来看下产生PWM波的程序,也就是和上篇博客是一样的,只不 ...
- stm32f4 用一个定时器输出多个不同频率占空比PWM波(含代码)
之前有写过怎么使用定时器生成PWM波,以及怎么修改频率与占空比,具体大家可以看下面这篇 stm32f4 生成PWM波_居安士的博客-CSDN博客_stm32产生pwm波 STM32每一个定时器都有4路 ...
- stm32f4 输出pwm波_stm32的pwm输出代码及注释
stm32是非常常用的单片机.脉冲宽度调制(PWM),是英文"Pulse WidthModulation"的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非 ...
最新文章
- php 运维系统开发,PHP开发运维管理系统笔记
- ue4小白人骨骼定义_UE4角色骨架创建流程_资源库
- 创建试图 失败_在失败中学习,MIT新研究显示,机器可以像婴儿一样学会理解人类目标...
- 三、Java面向对象编程有四个特征
- tp3.2 mysql elt出错_ThinkPHP3.2.3 SQL注入漏洞分析
- python怎么另起一行继续输入_python如何换行继续输入
- 基于layui的select区域联动
- Java基础之字符串详细比较
- 8.3分叉/结合的框架(Fork/Join Framework)
- 刘光星- 软件151
- win7 操作mysql_win7系统如何设置Mysql密码保护数据库
- word xml 上下标
- Cisco Packet Tracer 8.0 发布,百度网盘下载
- Unity 4.6.2 iOS 64位支持
- Android HIDL 介绍学习之客户端调用
- 计算机使用方法的书,是否知道飞鸽传书软件的详细使用方法?查看介绍
- chinapay 新版php接口,银联电子支付(chinapay)接口配置
- Genesis——区块链3.0时代集大成者
- 第 5-5 课: 如何打包部署 Spring Boot 项⽬
- cesium fog雾特效参数设置
热门文章
- php多个语言包,thinkphp实现多语言功能(语言包)
- 各界优秀人士的博客地址
- 红帽子linux装mysql_红帽学习之Linux安装
- OpenLayers 6 实现仿Echarts风格的动态迁徙图/航班图
- 一次性搞懂 HTTP、HTTPS、SPDY
- 闽南理工学院教务网络管理系统所有服务器,闽南理工学院教务管理网络系统登录入口 http://222.77.99.244:8094/jwweb/,精英高考网...
- viper12a电源电路图_基于VIPER12A芯片设计的开关电源
- Autodesk AutoCAD 2018 for Mac 汉化破解版安装教程
- social-engineer-toolkit搭建-网站克隆钓鱼
- 分类信息采集发布采集器软件