【FPGA基础】基于PWM脉宽调制的呼吸灯设计(Vivado)
基于PWM脉宽调制的呼吸灯设计(Vivado)
- 1.开发环境
- 2.预备知识
- 3.思路介绍
- 4.verliog代码
- 5.仿真
1.开发环境
软件:Vivado2019.1
硬件:Zynq7010
仿真:Vivado Simulator
2.预备知识
众所周知,灯的亮度和加在其两端的电压有关。电压越高,亮度越亮,反之越暗。
于是,设计一个呼吸灯就变得很简单了。让IO的输出电平由低到高,再有高到底有规律的变化,就能达到呼吸效果。
现在问题来了,IO的输出电平只有0和3.3V的区别,那么如何让其输出0-3.3V之间的任意电压呢?这就需要用到PWM脉宽调制计数。通俗来讲,就是通过控制一个PWM周期内高电平和低电平的时间来控制其电压。比如一个周期内,高电平时间占50%,那么输出电压为1.65v。
总结:PWM就是在合适的信号频率下,通过一个周期里改变占空比的方式来改变输出的有效电压。
3.思路介绍
一般人眼睛对于80Hz 以上刷新频率则完全没有闪烁感。
举个例子:
如果在1秒内,高电平0.5秒,低电平0.5秒,(频率1Hz)如此反复,那么你看到的电灯就会闪烁,
但是如果是10毫秒内,5毫秒打开,5毫秒关闭,(频率100Hz) 这时候灯光的亮灭速度赶不上开关速度(LED灯还没完全亮就又熄灭了),由于视觉暂留作用 人眼不感觉电灯在闪烁,而是感觉灯的亮度少了。
既然如此,那我们就采用频率为100hz的PWM波形对电压进行调制。对应的周期为10ms,也就是说10ms内灯的亮度不变(占空比不变),每隔10ms占空比变化一次。如果我们设定满占空比为100,那么整个呼吸灯的周期为2×10ms×100=2s。换句话说,从暗-亮-暗的时间为2s。
ZYNQ的PL端的板载晶振为50mhz,按照以上的思路,我们需要设计一个周期为10ms的定时器,来更新占空比。
设计模块的常量如下:
parameter CLOCK_FREQ = 50000000;//周期20ms,也就是说20ms内比较值不变parameter PWM_FREQ = 100;//100hz parameter PERIOD = CLOCK_FREQ / PWM_FREQ - 1;//10ms定时计数parameter FULL_DUTY = 100;//满占空比parameter STEP = PERIOD / FULL_DUTY;//步长5000
4.verliog代码
module breath_led(input clk,input rst,output reg [3:0] led);parameter CLOCK_FREQ = 50000000;//周期20ms,也就是说20ms内比较值不变parameter PWM_FREQ = 100;//100hz parameter PERIOD = CLOCK_FREQ / PWM_FREQ - 1;//10ms定时计数parameter FULL_DUTY = 100;//满占空比parameter STEP = PERIOD / FULL_DUTY;//步长5000reg [19:0] compare;reg [19:0] counter;//10ms定时reg [6:0] now_duty;//占空比计数reg flag = 1'b1;//方向标志always@(posedge clk or negedge rst) beginif(!rst) begincompare <= 20'd0;counter <= 20'd0;now_duty <= 7'd0; endelse begincounter <= counter + 1'b1;if(counter == PERIOD) beginif(flag) beginnow_duty <= now_duty + 1'b1;compare <= compare + 14'd5000;counter <= 20'd0;endelse beginnow_duty <= now_duty - 1'b1;compare <= compare - 14'd5000;counter <= 20'd0; endend end endalways@(counter) beginif(counter < compare) beginled <= 4'b1111; endelse beginled <= 4'b0000; endendalways@(now_duty) beginif(now_duty == FULL_DUTY) beginflag = 1'b0;endif(now_duty == 0) beginflag = 1'b1;endendendmodule
5.仿真
testbench文件如下:
`timescale 1ns / 1psmodule breath_led_tb();reg clk_reg;
reg rst_reg;
wire [3:0] led;wire clk;
wire rst;initial begin
clk_reg = 0;
rst_reg = 0;
#10
rst_reg = 1;
endalways #1 clk_reg=~clk_reg;
assign rst = rst_reg;
assign clk = clk_reg;breath_led test
(
.clk(clk),
.rst(rst),
.led(led)
);
endmodule
可以看到占空比由小变大的过程,说明我们的逻辑是正确的。
【FPGA基础】基于PWM脉宽调制的呼吸灯设计(Vivado)相关推荐
- 基于FPGA的呼吸灯设计
一:背景介绍: 网上类似的标题很多,有一些呼吸灯的设计是基于单片机的,还有一部分设计是基于FPGA的,我也一时手痒,将这两天自己重新写的verilog描述语句晒出来,免得压箱底放久了,出现发霉点. 为 ...
- 【嵌入式知识12】使用PWM实现LED呼吸灯
本次实验使用TIM3和TIM4,分别输出一个PWM波形,PWM的占空比随时间变化,去驱动外接的一个LED以及最小开发板上已焊接的LED(固定接在 PC13 GPIO端口),实现2个 LED呼吸灯的效果 ...
- GD32F303的PWM实现LED呼吸灯的方法
GD32F303的PWM实现LED呼吸灯的方法 首先配置TIMER1,定义初始化结构体变量 static void ConfigTIMER1ForPWMPB10(unsigned short arr, ...
- 小熊派gd32f303学习之旅(7)—使用PWM实现LED呼吸灯
小熊派gd32f303学习之旅(7)-使用PWM实现LED呼吸灯 一.前言 通过查看gd32f30x的参考手册,可以知道gd32f303的通用定时器和高级定时器可以硬件生成PWM波,然后我们查看gd3 ...
- ESP32 Arduino开发之路(2)— 使用PWM实现LED呼吸灯
ESP32 Arduino开发之路(2)- 使用PWM实现LED呼吸灯 一.前言 在ESP32上有一个LEDC外设模块专用于输出PWM波形,其介绍如下所示: 参考文章:在 ESP32 上使用 LEDC ...
- (99)Verilog HDL:呼吸灯设计
(99)Verilog HDL:呼吸灯设计 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL:呼吸灯设计 5)结语 1.2 FPGA简介 FPGA( ...
- 声控灯程序C语言,基于51单片机的声控灯设计设计-包含完整设计与指导文件.doc...
基于51单片机的声控灯设计设计-包含完整设计与指导文件 工 学 院 毕 业 设 计(论文) 题 目:基于单片机的智能光控路灯的设计 专 业: 机电技术教育 班 级: *** 姓 名: *** 学 号: ...
- 基于STM32F4实现LED呼吸灯效果(PWM)
文章目录 前言 一.定时器及PWM的概述 1.通用定时器 2.PWM 二.配置步骤及代码实现 总结 前言 今天我们来进行PWM的学习,今天使用到的是通用定时器TIM14 ,在此之前我们已经简单学习过定 ...
- 启明智显分享| ESP32学习笔记参考--PWM(脉冲宽度调制) 篇,配PWM控制 LED呼吸灯代码示例参考
提示:启明智显专为智能产品提供一站式彩屏显示+连接+云端服务+APP软件开发.维护等解决方案,帮厂商快速实现硬件的智能化.作为启明云端旗下方案公司,我们用心整理了开发小伙伴在开发过程中可能会遇到的问题 ...
最新文章
- 大数据技术下面向企业需求的高校应用型人才培养课程体系设计
- 最新动态,电信屏蔽Godaddy部分DNS服务
- Error: Could not find or load main class org.apache.spark.deploy.yarn.ExecutorLauncher
- 一款可留言的恋爱计时HTML源码
- 漫画:如何给女朋友解释什么是适配器模式?
- 了解 Promise.any() 用法
- MFC 教程【2_MFC和Win32 】
- 如何在Mac上使用听写进行语音到文本的键入
- 电脑课学生端密码查看
- 品今第一届集团迎新分享会,进•无止境
- android 手机内存64实际不到,手机拥有64G,为何用了不到1G,就显示内存不足?是谁在搞鬼?...
- html可以播放所有本地视频播放器,VR播放器有哪些 能播放本地视频的VR播放器推荐...
- 蹩脚的Access分页语句
- 华为云计算机访问手机软件,手机也能当电脑使用?华为黑科技:手机云电脑
- 《国家宝藏》甘肃省博物馆专场:杜淳、黄轩演绎丝路传奇
- 笔记本电脑属于个人计算机吗,黄真真:笔记本电脑属于个人计算机的一种形式莫?...
- 杭电ACM2188题
- 影视剪辑,如何一个人自学短视频7天vlog教程
- 中国人保为中环盛达环保科技集团承保产品责任险,为消费者保驾护航
- CF杂题训练(交互题不做,2500以上的看情况吧)
热门文章
- 基于几何学习图像的三维重建发展_立体图像的三维重建-对极几何
- DST 工况 FUDS 工况 DST工况
- 如何面对黑天鹅与灰犀牛?ThoughtWorks技术雷达峰会给出答案
- 32位tomcat_64的mysql_tomcat环境搭建
- Docker容器内Ubuntu更新源失败/卡住的解决方法
- cad打印本计算机未配置,cad无法打印怎么设置_cad图纸无法打印的处理方法
- 微软2017年预科生计划在线编程笔试
- 动态开题报告论文答辩PPT模板
- InnoDB的全文索引
- windows电脑离线安装mysql 8_windows环境下手动安装Mysql8