25.无源蜂鸣器驱动设计

news2024/11/15 10:43:52

        相对于有源蜂鸣器,无源蜂鸣器的成本更低,声音频率可控。而有源蜂鸣器因其内部
自带振荡源,只要加上适当的直流电源即可发声,程序控制较为方便。

(1)设计定义:设计一个无源蜂鸣器的驱动程序,实现7个音调的循环发声,每个音调持续0.5s,占空比为50%。

(2)Visio视图:

(2)Verilog代码:

module beep(clk,reset_n,beep);

    input clk;
    input reset_n;
    
    output reg beep;
//0.5s = 500_000_000ns = 20ns * 25_000_000;  需要一个十五位的寄存器去计数
    reg[24:0]cnt;
    reg[2:0]cnt_500ms;
//freq最大值为190840,可以用一个二十位的寄存器去计数
    reg[19:0]freq_cnt;
    reg[19:0]freq_data;
    wire[19:0]duty_data;
    
    parameter MCNT_Time = 25'd24_999_999;
    parameter Do        = 20'd190839    ;
    parameter Re        = 20'd170067    ;
    parameter Mi        = 20'd151514    ;
    parameter Fa        = 20'd143265    ;
    parameter So        = 20'd127550    ;
    parameter La        = 20'd113635    ;
    parameter Si        = 20'd101213    ;

//500ms计数器模块设计
    always@(posedge clk or negedge reset_n)
        if(!reset_n)
            cnt <= 25'd0;
        else if(cnt == MCNT_Time)
            cnt <= 25'd0;
        else 
            cnt <= cnt + 25'd1;

//cnt_500ms计数器模块设计
    always@(posedge clk or negedge reset_n)
        if(!reset_n)
            cnt_500ms <= 3'd0;
        else if((cnt_500ms == 3'd6) && (cnt == MCNT_Time))
            cnt_500ms <= 3'd0;
        else if(cnt == MCNT_Time)
            cnt_500ms <= cnt_500ms + 3'd1;
        else    
            cnt_500ms <= cnt_500ms;
            
//freq_cnt计数器模块设计
    always@(posedge clk or negedge reset_n)
        if(!reset_n)
            freq_cnt <= 20'd0;
        else if((freq_cnt == freq_data) || (cnt == MCNT_Time))
            freq_cnt <= 20'd0;
        else 
            freq_cnt <= freq_cnt + 20'd1;

//freq_data设计
    always@(posedge clk or negedge reset_n)
        if(!reset_n)
            freq_data <= Do;
        else begin
            case(cnt_500ms)
                3'd0: freq_data <= Do;
                3'd1: freq_data <= Re;
                3'd2: freq_data <= Mi;
                3'd3: freq_data <= Fa;
                3'd4: freq_data <= So;
                3'd5: freq_data <= La;
                3'd6: freq_data <= Si;
                default:freq_data <= Do;
            endcase
        end
//duty_data设计      
     assign duty_data = (freq_data >> 1);
     
//beep输出设计
    always@(posedge clk or negedge reset_n)
        if(!reset_n)
            beep <= 1'd0;
        else if(freq_cnt > duty_data)
            beep <= 1'd1;
        else 
            beep <= 1'd0;
    
endmodule

(3)仿真文件代码;

`timescale 1ns / 1ps

module beep_tb;

    reg clk;
    reg reset_n;
    
    wire beep;

    beep beep_inst(
        .clk(clk),
        .reset_n(reset_n),
        .beep(beep)
    );
    
    defparam beep_inst.MCNT_Time = 25'd24_999_9;
    defparam beep_inst.Do        = 20'd1908    ;
    defparam beep_inst.Re        = 20'd1700    ;
    defparam beep_inst.Mi        = 20'd1515    ;
    defparam beep_inst.Fa        = 20'd1432    ;
    defparam beep_inst.So        = 20'd1275    ;
    defparam beep_inst.La        = 20'd1136    ;
    defparam beep_inst.Si        = 20'd1012    ;
    
    initial clk = 1'b1;
    always #10 clk = ~clk;
    
    initial begin
        reset_n = 1'b0;
        #15;
        reset_n = 1'b1;
        #50_000_000;
        $stop;
    end


endmodule

(4)仿真波形:

(5)引脚绑定:

set_property IOSTANDARD LVCMOS33 [get_ports reset_n]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports beep]
set_property PACKAGE_PIN N15 [get_ports reset_n]
set_property PACKAGE_PIN W19 [get_ports clk]
set_property PACKAGE_PIN M17 [get_ports beep]

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电脑管理软件是什么?电脑管理软件能做什么?

电脑管理软件是一种专门设计用于管理和优化计算机系统的软件工具。它涵盖了多个方面&#xff0c;从系统维护、资源分配到安全防护&#xff0c;都有着广泛的应用。以下是对电脑管理软件及其功能的详细解析&#xff1a; 一、电脑管理软件的定义 电脑管理软件是一种管理类型的软…

【Ty CLI】一个开箱即用的前端脚手架

目录 资源链接基础命令模板创建命令帮助选择模板开始创建开发模板 开发背景npm 发布流程问题记录模板创建超时 更新日志 资源链接 文档&#xff1a;https://ty.cli.vrteam.top/ 源码&#xff1a;https://github.com/bosombaby/ty-cli 基础命令 1. npm 全局安装 npm i ty-cli…

【YOLOv8系列】(一)YOLOv8介绍:实时目标检测的最新突破

目录 引言 背景与发展历程 YOLOv8架构设计 1. 改进的特征提取网络 2. 多尺度特征融合 3. 新的激活函数 4. Attention机制 模型训练与优化 性能评估 应用案例 目标检测 图像分割 图像分类 姿势估计 旋转框检测&#xff08;OBB&#xff09; 优势与挑战 优势&…

点云曲面提取

csdn是不是有有什么大bing&#xff1f;gif只能上传5m我吐了在线GIF动图压缩 - docsmall 在线GIF动图压缩工具,在线GIF动图压缩软件 代码整理中

无线充电宝哪个牌子好?绿联、西圣、小米充电宝测评对比!

随着科技的不断进步和智能设备的普及&#xff0c;无线充电宝逐渐成为了现代人生活中的必需品。它们不仅方便了我们的日常充电需求&#xff0c;更减少了线缆的束缚&#xff0c;提高了使用的便捷性。在众多品牌中&#xff0c;绿联、西圣和小米作为市场上广受好评的无线充电宝品牌…

HTML5表单的自动验证、取消验证、自定义错误信息

1、自动验证 通过在元素中使用属性的方法&#xff0c;该属性可以实现在表单提交时执行自动验证的功能。下面是关于对元素内输入内容进行限制的属性的指定。 属性说明required输入内容是否不为空pattern输入的内容是否符合指定格式min、max输入的数值是否在min~max范围step判断…

C++之List模拟实现

目录 list的逻辑结构 构造函数 拷贝构造函数 赋值运算符重载 返回迭代器的初始位置 返回迭代器的最终位置 元素的插入 头插 尾插 删除元素 头删 尾删 清空整个链表 析构函数 正向迭代器 反向迭代器 整体代码 上期我们学写了list的基本操作&#xff0c;本期我…

使用F1C200S从零制作掌机之构建debian文件系统

前情&#xff1a;使用buildrootfs构建的文件系统调试了很久NES模拟器&#xff0c;执行InfoNES模拟器的时候一直黑屏&#xff0c;无内容显示&#xff0c;调不通了&#xff0c;所以改用debian系统试试。 一、环境配置 首先下载两个工具&#xff1a;qemu-arm-static和debootstra…

SpringSecurity-SpirngBoot-方法级授权(SpringSecurity6.3新特性)(四)

SpringSecurity-SpirngBoot-方法级授权&#xff08;SpringSecurity6.3新特性&#xff09;&#xff08;四&#xff09; 本章使用SpringSecurity6.3新特性实现数据级别的鉴权&#xff0c;主要的目的是实现不同权限的用户查询同一个方法&#xff0c;限制一些内容只能拥有特定权限…

StarRocks分布式元数据源码解析

1. 支持元数据表 https://github.com/StarRocks/starrocks/pull/44276/files 核心类&#xff1a;LogicalIcebergMetadataTable&#xff0c;Iceberg元数据表&#xff0c;将元数据的各个字段做成表的列&#xff0c;后期可以通过sql操作从元数据获取字段&#xff0c;这个表的组成…

Linux--线程的控制

目录 0.前言 1.pthread库 2.关于控制线程的接口 2.1.创建线程&#xff08;pthread_create&#xff09; 2.2.线程等待&#xff08;pthread_join&#xff09; 代码示例1&#xff1a; ​编辑 ***一些问题*** 2. 3.创建多线程 3.线程的终止 &#xff08;pthread_exit /…

python—读写csv文件

目录 csv库方法参数 读取数据 csv.reader方法 文件指定行或列数据读取操作 txt文件的readlines、read方法 csv.DictReader方法 写入数据 txt文件的write&#xff0c;writelines csv.writer方法 csv.DictWriter方法 读写联合(修改及插入数据) 读写csv 文件时&#xf…

语义言语流畅性的功能连接和有效连接

摘要 语义言语流畅性(SVF)受损在多种神经系统疾病中都存在。虽然已经报道了SVF相关区域的激活情况&#xff0c;但这些区域如何相互连接以及它们在脑网络中的功能作用仍存在分歧。本研究使用功能磁共振成像评估了健康被试SVF静态和动态功能连接(FC)以及有效连接。观察到额下回(…

c++初阶学习----入门(上)

大家好啊。最近学习了一点关于c的知识。这不就迫不及待的来与大家分享了嘛。但我这也是现学现卖所以咧。有很多遗落甚至不对的地方希望大家可以在评论区里面指出来。这样也可以增加大家对知识的巩固。 c语言与c的联系 不知道大家看到c会不会不由自主的联想到C语言啊。毕竟都是…

TVBox的Json配置接口编写指南,模板格式说明(如何打造一个专属于自己的TVBox配置文件)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 配置解析 📒📝 JSON基础📝 配置文件结构/参数说明📝 编写步骤📝 注意事项🎈 接口分享⚓️ 相关链接 ⚓️📖 介绍 📖 TVBox 是一款备受欢迎的电视盒子应用(免费影视必备),它以其高度自定义的特性深受用户喜爱…

Pearson 相关系数的可视化辅助判断和怎么用

Pearson 相关系数的可视化辅助判断和怎么用 flyfish Pearson 相关系数 是一种用于衡量两个连续型变量之间线性相关程度的统计量。其定义为两个变量协方差与标准差的乘积的比值。公式如下&#xff1a; r ∑ ( x i − x ˉ ) ( y i − y ˉ ) ∑ ( x i − x ˉ ) 2 ∑ ( y i −…

jitsi 使用JWT验证用户身份

前言 Jitsi Meet是一个很棒的会议系统,但是默认他运行所有人创建会议,这样在某种程度上,我们会觉得他不安全,下面我们就来介绍下使用JWT来验证用户身份 方案 卸载旧的lua依赖性sudo apt-get purge lua5.1 liblua5.1-0 liblua5.1-dev luarocks添加ubuntu的依赖源,有则不需…

AI时代算法面试:揭秘高频算法问题与解答策略

三种决策树算法的特点和区别 ID3算法&#xff1a;基本的决策树算法&#xff0c;适用于简单的分类问题C4.5算法&#xff1a;改进了ID3算法&#xff0c;适用于更复杂的分类问题&#xff0c;可以处理连续型数据和缺失值CART算法&#xff1a;更加通用的决策树算法&#xff0c;适用于…

住宅代理、移动代理和数据中心代理之间的区别

如果您是一名认真的互联网用户&#xff0c;可能需要反复访问某个网站或服务器&#xff0c;可能是为了数据抓取、价格比较、SEO 监控等用例&#xff0c;而不会被 IP 列入黑名单或被 CAPTCHA 阻止。 代理的工作原理是将所有传出数据发送到代理服务器&#xff0c;然后代理服务器将…

用LangGraph、 Ollama,构建个人的 AI Agent

如果你还记得今年的 Google I/O大会&#xff0c;你肯定注意到了他们今年发布的 Astra&#xff0c;一个人工智能体&#xff08;AI Agent&#xff09;。事实上&#xff0c;目前最新的 GPT-4o 也是个 AI Agent。 现在各大科技公司正在投入巨额资金来创建人工智能体&#xff08;AI …