FPGA开发——蜂鸣器的控制
创始人
2024-11-11 19:38:34

一、概述

在项目开发的过程当中,我会通常会需要一个东西就行报警显示,有使用语音报警,信息报警等注入此类的方式,但最为简单使用的还是蜂鸣器的使用,蜂鸣器控制简单,成本低,是最为常用的模块之一。今天我们就来对蜂鸣器在FPGA中的使用进行一个简单实现。

二、概念

蜂鸣器原理图

从图中可以看出我们这使用的蜂鸣器是高电平触发。初始蜂鸣器为低电平,当控制引脚按下按下,接通高电平,蜂鸣器通过高电平。这里就一个控制引脚,没有其他需要特别注意的。

三、工程实现

1、设计文件

新建beep.v文件,如下:

//蜂鸣器 module beep(   input         clk,   input         rst_n,   input         flag1,   output    reg    beep_out ); parameter TIME=50_000_000; reg [26:0] cnt; wire add_cnt; wire end_cnt; //分频系数 always @(posedge clk or negedge rst_n)begin    if(!rst_n)     cnt<=0;   else if(add_cnt)begin      if(end_cnt)       cnt<=0;     else       cnt<=cnt+1'b1;   end end  assign add_cnt=1'b1; assign end_cnt=add_cnt &&(cnt==TIME-1);  //pwm输出 always @(posedge clk or negedge rst_n)begin   if(!rst_n)     beep_out<=1'b0;   else if(end_cnt)     beep_out<=~beep_out; end endmodule 

 2、测试文件

//定义时间尺度 `timescale 1ns/1ns module beep_tb ;  //输入信号定义 reg          clk           ;   reg          rst_n         ;  wire         beep_out       ; //模块例化 beep beep_inst(   /*input        */ .clk        (clk      )   ,   /*input        */ .rst_n      (rst_n    )   ,   /*output       */ .beep_out    (beep_out  )    ); defparam beep_inst.TIME =100; //激励信号产生 parameter CLK_CYC = 20; //时钟 initial clk=1; always #(CLK_CYC/2)clk=~clk;  //复位 initial begin     rst_n= 1'b0;     #(CLK_CYC*2);     #3;//复位结束避开时钟上升沿     rst_n= 1'b1; end endmodule

四、波形仿真

通过仿真波形图可以看到当计数器计数了一个周期之后,蜂鸣器状态变换一次,最终在开发板上实现了蜂鸣器响和不响的状态实现 

相关内容

热门资讯

裸辞做“一人公司”,我后悔了 去年这个时候,一位以色列程序员正在东南亚旅行。他顺手把一个在脑子里转了很久的想法做成了产品,一个让任...
南京建成国内首个Pre-6G试... 4月21日,2026全球6G技术与产业生态大会在南京开幕。全息互动技术展台前,一名远在北京的工作人员...
超梵求职受邀参加“2025抖音... 超梵求职受邀参加“2025抖音巨量引擎成人教育行业生态大会”,探讨分享优质内容传播,服务万千学员。 ...
摩托罗拉Razr 2026(R... IT之家 4 月 22 日消息,摩托罗拉宣布新一代 Razr 折叠手机将于 4 月 29 日在美国发...
库克卸任,特纳斯领航:苹果新纪... 苹果首席执行官蒂姆·库克将卸任,硬件工程主管约翰·特纳斯将接任,苹果公司今天宣布此事。 库克将在夏季...