FPGA实战篇(呼吸灯实验)

1.呼吸灯简介

        呼吸灯采用 PWM 的方式,在固定的频率下,通过调整占空比的方式来控制 LED 灯亮度的变化。 PWM(Pulse Width Modulation ),即脉冲宽度调制,它利用微处理器输出的 PWM 信号,实现对模拟电路控制的 一种非常有效的技术,广泛应用于测量、通信、功率控制等领域。
        在由计数器产生的固定周期的 PWM 信号下,如果其占空比为 0 ,则 LED 灯不亮;如果其占空比为 100% ,则 LED 灯最亮。所以将占空比从 0 100% ,再从 100% 0 不断变化,就可以实现 LED 灯的“呼吸”效果。
        PWM 占空比调节示意图如下图所示:
        由上图可知,LED 高电平的时间由长渐渐变短,再由短渐渐变长,如果 LED 灯是高电平点亮,则 LED灯会呈现出亮度由亮到暗,再由暗到亮的过程。
2.实验任务
        本节实验任务是使用正点原子 ZYNQ 开发板(核心板)上的 PL LED ,实现呼吸灯的效果,即由灭渐亮,然后再由亮渐灭。
3.硬件设计
        发光二极管的原理图如下图所示,PL LED 发光二极管位于核心板上,其阴极通过 330 欧姆的电阻连到地(GND ),阳极与 ZYNQ IO 相连, LED 与地之间的电阻起到限流作用。当 PL_LED 输出高电平时,点亮 LED 灯,当 PL LED 输出低电平时, LED 灯熄灭。

        本实验中,系统时钟、按键复位以及 LED 端口的管脚分配如下表所示:
4.程序设计
        本次实验的模块端口及结构框图如下图所示。
        周期信号计数器用于产生驱动 LED 的脉冲信号,本次实验的周期信号频率为 1Khz ,其占空比由后级逻辑在每个周期之后进行递增或递减,最后再对当前计数值和占空比计数值进行比较,以输出占空比可调的 脉冲信号。
        呼吸灯代码如下:
1 module breath_led(
2 input sys_clk , //时钟信号 50Mhz
3 input sys_rst_n , //复位信号
4 
5 output led //LED
6 );
7 
8 //reg define
9 reg [15:0] period_cnt ; //周期计数器频率:1khz 周期:1ms 计数值:1ms/20ns=50000
10 reg [15:0] duty_cycle ; //占空比数值
11 reg inc_dec_flag ; //0 递增 1 递减
12
13 //*****************************************************
14 //** main code
15 //*****************************************************
16
17 //根据占空比和计数值之间的大小关系来输出 LED
18 assign led = (period_cnt >= duty_cycle) ? 1'b1 : 1'b0;
19
20 //周期计数器
21 always @(posedge sys_clk or negedge sys_rst_n) begin
22 if(!sys_rst_n)
23 period_cnt <= 16'd0;
24 else if(period_cnt == 16'd50000)
25 period_cnt <= 16'd0;
26 else
27 period_cnt <= period_cnt + 1'b1;
28 end
29
30 //在周期计数器的节拍下递增或递减占空比
31 always @(posedge sys_clk or negedge sys_rst_n) begin
32 if(!sys_rst_n) begin
33 duty_cycle <= 16'd0;
34 inc_dec_flag <= 1'b0;
35 end
36 else begin
37 if(period_cnt == 16'd50000) begin //计满 1ms
38 if(inc_dec_flag == 1'b0) begin //占空比递增状态
39 if(duty_cycle == 16'd50000) //如果占空比已递增至最大
40 inc_dec_flag <= 1'b1; //则占空比开始递减
41 else //否则占空比以 25 为单位递增
42 duty_cycle <= duty_cycle + 16'd25;
43 end
44 else begin //占空比递减状态
45 if(duty_cycle == 16'd0) //如果占空比已递减至 0
46 inc_dec_flag <= 1'b0; //则占空比开始递增
47 else //否则占空比以 25 为单位递减
48 duty_cycle <= duty_cycle - 16'd25;
49 end
50 end
51 end
52 end
53
54 endmodule
        第 21-28 行是 1KHz 周期信号的计数器,用于产生 1KHz LED 驱动信号。第 31-52 行的 always 块为占空比设定模块,每次计数完了一个周期,就根据递增/ 递减标志来对占空比计数值( duty_cycle)进行递增/递减 25 个计数值,这个递增或者递减的数值大小可以用来控制呼吸灯的呼吸频率。
        如果占空比计数值(duty_cycle )已经递增到了最大,则呼吸灯已经处于最亮的状态,接下来开始递减; 反之,如果占空比计数至已经递减到了最小,即 0 ,则呼吸灯处于熄灭的状态,接下来开始递增;如此循环往复,最终实现了流水灯的效果。
        在代码的第 18 行通过组合逻辑把当前的周期计数值和占空比计数值进行比较,来判断 LED 的输出电平。在一个周期内,如果当前的周期计数值小于等于占空比计数值,则 LED 输出高电平,即点亮;如果当前的周期计数值大于占空比计数值,则 LED 输出低电平,即熄灭。
5.下载验证
        编译工程并生成比特流.bit 文件。将下载器一端连接电脑,另一端与开发板上的 JTAG 下载口连接,连接电源线,并打开开发板的电源开关。
        点击 Vivado 左侧“ Flow Navigator ”窗口最下面的“ Open Hardware Manager ”,此时 Vivado 软件识别到下载器,点击“Hardware” 窗口中“ Progam Device ”下载程序,在弹出的界面中选择“ Program ”下载程序。
        程序下载完成后,可以看到核心板的 PL LED 灯由暗慢慢变亮,再由亮慢慢变暗,即呈现出“呼吸”的效果,如下图所示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/486259.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 OpenCV 进行 Android 开发

在本节中&#xff0c;我们将创建一个简单的应用程序&#xff0c;它除了加载 OpenCV 之外什么都不做。在下一节中&#xff0c;我们将扩展它以支持相机。 除了这个说明&#xff0c;你还可以使用一些视频指南&#xff0c;例如这个 打开 Android Studio 并选择Empty Views Activi…

项目实例_FashionMNIST_CNN

前言 提醒&#xff1a; 文章内容为方便作者自己后日复习与查阅而进行的书写与发布&#xff0c;其中引用内容都会使用链接表明出处&#xff08;如有侵权问题&#xff0c;请及时联系&#xff09;。 其中内容多为一次书写&#xff0c;缺少检查与订正&#xff0c;如有问题或其他拓展…

Autosar FO时间分析和设计规范导读

一、规范功能概述 “Timing Analysis and Design AUTOSAR FO R24 - 11” 文档主要聚焦于汽车电子系统开发中的定时分析与设计&#xff0c;详细阐述了相关概念、方法、用例及涉及的各项要素&#xff0c;旨在为汽车电子系统的开发提供全面且系统的定时分析指导&#xff0c;以确保…

使用 libssh2_session_set_timeout 设置 SSH 会话超时时间

使用 libssh2_session_set_timeout 设置 SSH 会话超时时间 函数原型参数说明返回值示例代码注意事项libssh2_session_set_timeout 是 libssh2 库中的一个函数,用于设置 SSH 会话的超时时间。这对于防止网络延迟或连接中断导致的长时间挂起非常有用。 函数原型 int libssh2_se…

001 LVGL PC端模拟搭建

01 LVGL模拟器介绍 使用PC端软件模拟LVGL运行&#xff0c;而不需要任何嵌入式硬件 环境搭建&#xff1a;codeblocks-20.03mingw-setup 正常安装流程即可 工程获取&#xff1a;LVGL官网-> github仓库 本地安装包下载资源包 工程模版和软件安装包 补充&#xff1a;…

开源ISP介绍(2)————嵌入式Vitis搭建

Vivado搭建参考前一节Vivado基于IP核的视频处理框架搭建&#xff1a; 开源ISP介绍&#xff08;1&#xff09;——开源ISP的Vivado框架搭建-CSDN博客 导出Hardware 在vivado中导出Hardware文件&#xff0c;成功综合—实现—生成比特流后导出硬件.xsa文件。&#xff08;注意导…

人工智能-自动驾驶领域

目录 引言自动驾驶与人工智能的结合为什么自动驾驶领域适合发表文章博雅智信的自动驾驶辅导服务结语 引言 自动驾驶技术的崛起是当代交通行业的一场革命。通过结合先进的人工智能算法、传感器技术与计算机视觉&#xff0c;自动驾驶不仅推动了技术的进步&#xff0c;也使得未来…

Kubernetes 深入浅出系列 | 容器编排与作业调度之Deployment

目录 概述Deployment 的更新原理实验 概述 Kubernetes 中&#xff0c;Deployment 控制器是用于管理应用程序生命周期的核心对象。Deployment 通过管理 ReplicaSet 来间接控制 Pod&#xff0c;确保在任何时刻都能维持指定数量的 Pod 副本。这种间接管理使得 Deployment 功能比 …

Java——异常机制(上)

1 异常机制本质 (异常在Java里面是对象) (抛出异常&#xff1a;执行一个方法时&#xff0c;如果发生异常&#xff0c;则这个方法生成代表该异常的一个对象&#xff0c;停止当前执行路径&#xff0c;并把异常对象提交给JRE) 工作中&#xff0c;程序遇到的情况不可能完美。比如…

如何查看电脑的屏幕刷新率?

1、按一下键盘的 win i 键&#xff0c;打开如下界面&#xff0c;选择【系统】&#xff1a; 2、选择【屏幕】-【高级显示设置】 如下位置&#xff0c;显示屏幕的刷新率&#xff1a;60Hz 如果可以更改&#xff0c;则选择更高的刷新率&#xff0c;有助于电脑使用起来界面更加流…

WAT绕过姿势

一.空格字符绕过 两个空格代替⼀个空格&#xff0c;⽤ Tab 代替空格&#xff0c;%a0空格 %20 %09 %0a %0b %0c %0d %a0 %00 /**/ /*!*/ select * from users where id1 /*!union*//*!select*/1,2,3,4; %09 TAB 键&#xff08;⽔平&#xff09;%0a 新建⼀⾏%0c 新的⼀⻚%0d …

Ubuntu 环境美化

一、终端选择 zsh 参考文章使用 oh-my-zsh 美化终端 Oh My Zsh 是基于 zsh 命令行的一个扩展工具集&#xff0c;提供了丰富的扩展功能。 先安装zsh再安装Oh My Zsh 1.zsh安装 sudo apt-get install zsh 2.设置默认终端为 zsh chsh -s /bin/zsh 3.安装 oh-my-zsh 官网&…

QT的ui界面显示不全问题(适应高分辨率屏幕)

//自动适应高分辨率 QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);一、问题 电脑分辨率高&#xff0c;默认情况下&#xff0c;打开QT的ui界面&#xff0c;显示不全按钮内容 二、解决方案 如果自己的电脑分辨率较高&#xff0c;可以尝试以下方案&#xff1a;自…

docker报错ls: cannot access SURF: Transport endpoint is not connected

docker挂载nfs文件夹/CMADAAS/DATA。它大部分时间都可用&#xff0c;只是有时会断开连接。重新挂载后&#xff0c;实际挂载的文件夹将再次可用。 问题是我将此文件夹放入docker卷中以使其可供我的应用程序使用&#xff1a;/SURF。当我启动容器时&#xff0c;该卷可用。 但是&…

AJAX三、XHR,基本使用,查询参数,数据提交,promise的三种状态,封装-简易axios-获取省份列表 / 获取地区列表 / 注册用户,天气预报

一、XMLHttpRequest基本使用 XMLHttpRequest&#xff08;XHR&#xff09;对象用于与服务器交互。 二、XMLHttpRequest-查询参数 语法: 用 & 符号分隔的键/值对列表 三、XMLHttpRequest-数据提交 核心步骤 : 1. 请求头 设置 Content-Type 2. 请求体 携带 符合要求 的数…

【Ubuntu】URDC(Ubuntu远程桌面助手)安装、用法,及莫名其妙进入全黑模式的处理

1、简述 URDC是Ubuntu远程桌面助手的简称。 它可以: 实时显示桌面:URDC支持通过Windows连接至Ubuntu设备(包括x86和ARM架构,例如Jetson系列、树莓派等)的桌面及光标。远程操控双向同步剪切板多客户端连接:同一Ubuntu设备最多可同时被三台Windows客户端连接和操控,适用于…

MVC基础——市场管理系统(一)

文章目录 项目地址一、创建项目结构1.1 创建程序以及Controller1.2 创建View1.3 创建Models层,并且在Edit页面显示1.4 创建Layou模板页面1.5 创建静态文件css中间件二、Categories的CRUD2.1 使用静态仓库存储数据2.2 将Categorie的列表显示在页面中(List)2.3 创建_ViewImport.…

KV Shifting Attention Enhances Language Modeling

基本信息 &#x1f4dd; 原文链接: https://arxiv.org/abs/2411.19574&#x1f465; 作者: Mingyu Xu, Wei Cheng, Bingning Wang, Weipeng Chen&#x1f3f7;️ 关键词: KV shifting attention, induction heads, language modeling&#x1f4da; 分类: 机器学习, 自然语言处…

spring下的beanutils.copyProperties实现深拷贝

spring下的beanutils.copyProperties方法是深拷贝还是浅拷贝&#xff1f;可以实现深拷贝吗&#xff1f; 答案&#xff1a;浅拷贝。 一、浅拷贝深拷贝的理解 简单说拷贝就是将一个类中的属性拷贝到另一个中&#xff0c;对于BeanUtils.copyProperties来说&#xff0c;你必须保…

沈阳工业大学《2024年827自动控制原理真题》 (完整版)

本文内容&#xff0c;全部选自自动化考研联盟的&#xff1a;《沈阳工业大学827自控考研资料》的真题篇。后续会持续更新更多学校&#xff0c;更多年份的真题&#xff0c;记得关注哦~ 目录 2024年真题 Part1&#xff1a;2024年完整版真题 2024年真题