基于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)相关推荐

  1. 基于FPGA的呼吸灯设计

    一:背景介绍: 网上类似的标题很多,有一些呼吸灯的设计是基于单片机的,还有一部分设计是基于FPGA的,我也一时手痒,将这两天自己重新写的verilog描述语句晒出来,免得压箱底放久了,出现发霉点. 为 ...

  2. 【嵌入式知识12】使用PWM实现LED呼吸灯

    本次实验使用TIM3和TIM4,分别输出一个PWM波形,PWM的占空比随时间变化,去驱动外接的一个LED以及最小开发板上已焊接的LED(固定接在 PC13 GPIO端口),实现2个 LED呼吸灯的效果 ...

  3. GD32F303的PWM实现LED呼吸灯的方法

    GD32F303的PWM实现LED呼吸灯的方法 首先配置TIMER1,定义初始化结构体变量 static void ConfigTIMER1ForPWMPB10(unsigned short arr, ...

  4. 小熊派gd32f303学习之旅(7)—使用PWM实现LED呼吸灯

    小熊派gd32f303学习之旅(7)-使用PWM实现LED呼吸灯 一.前言 通过查看gd32f30x的参考手册,可以知道gd32f303的通用定时器和高级定时器可以硬件生成PWM波,然后我们查看gd3 ...

  5. ESP32 Arduino开发之路(2)— 使用PWM实现LED呼吸灯

    ESP32 Arduino开发之路(2)- 使用PWM实现LED呼吸灯 一.前言 在ESP32上有一个LEDC外设模块专用于输出PWM波形,其介绍如下所示: 参考文章:在 ESP32 上使用 LEDC ...

  6. (99)Verilog HDL:呼吸灯设计

    (99)Verilog HDL:呼吸灯设计 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL:呼吸灯设计 5)结语 1.2 FPGA简介 FPGA( ...

  7. 声控灯程序C语言,基于51单片机的声控灯设计设计-包含完整设计与指导文件.doc...

    基于51单片机的声控灯设计设计-包含完整设计与指导文件 工 学 院 毕 业 设 计(论文) 题 目:基于单片机的智能光控路灯的设计 专 业: 机电技术教育 班 级: *** 姓 名: *** 学 号: ...

  8. 基于STM32F4实现LED呼吸灯效果(PWM)

    文章目录 前言 一.定时器及PWM的概述 1.通用定时器 2.PWM 二.配置步骤及代码实现 总结 前言 今天我们来进行PWM的学习,今天使用到的是通用定时器TIM14 ,在此之前我们已经简单学习过定 ...

  9. 启明智显分享| ESP32学习笔记参考--PWM(脉冲宽度调制) 篇,配PWM控制 LED呼吸灯代码示例参考

    提示:启明智显专为智能产品提供一站式彩屏显示+连接+云端服务+APP软件开发.维护等解决方案,帮厂商快速实现硬件的智能化.作为启明云端旗下方案公司,我们用心整理了开发小伙伴在开发过程中可能会遇到的问题 ...

最新文章

  1. 大数据技术下面向企业需求的高校应用型人才培养课程体系设计
  2. 最新动态,电信屏蔽Godaddy部分DNS服务
  3. Error: Could not find or load main class org.apache.spark.deploy.yarn.ExecutorLauncher
  4. 一款可留言的恋爱计时HTML源码
  5. 漫画:如何给女朋友解释什么是适配器模式?
  6. 了解 Promise.any() 用法
  7. MFC 教程【2_MFC和Win32 】
  8. 如何在Mac上使用听写进行语音到文本的键入
  9. 电脑课学生端密码查看
  10. 品今第一届集团迎新分享会,进•无止境
  11. android 手机内存64实际不到,手机拥有64G,为何用了不到1G,就显示内存不足?是谁在搞鬼?...
  12. html可以播放所有本地视频播放器,VR播放器有哪些 能播放本地视频的VR播放器推荐...
  13. 蹩脚的Access分页语句
  14. 华为云计算机访问手机软件,手机也能当电脑使用?华为黑科技:手机云电脑
  15. 《国家宝藏》甘肃省博物馆专场:杜淳、黄轩演绎丝路传奇
  16. 笔记本电脑属于个人计算机吗,黄真真:笔记本电脑属于个人计算机的一种形式莫?...
  17. 杭电ACM2188题
  18. 影视剪辑,如何一个人自学短视频7天vlog教程
  19. 中国人保为中环盛达环保科技集团承保产品责任险,为消费者保驾护航
  20. CF杂题训练(交互题不做,2500以上的看情况吧)

热门文章

  1. 基于几何学习图像的三维重建发展_立体图像的三维重建-对极几何
  2. DST 工况 FUDS 工况 DST工况
  3. 如何面对黑天鹅与灰犀牛?ThoughtWorks技术雷达峰会给出答案
  4. 32位tomcat_64的mysql_tomcat环境搭建
  5. Docker容器内Ubuntu更新源失败/卡住的解决方法
  6. cad打印本计算机未配置,cad无法打印怎么设置_cad图纸无法打印的处理方法
  7. 微软2017年预科生计划在线编程笔试
  8. 动态开题报告论文答辩PPT模板
  9. InnoDB的全文索引
  10. windows电脑离线安装mysql 8_windows环境下手动安装Mysql8