当前位置:   article > 正文

FPGA开发——蜂鸣器的控制

FPGA开发——蜂鸣器的控制

一、概述

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

二、概念

蜂鸣器原理图

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

三、工程实现

1、设计文件

新建beep.v文件,如下:

  1. //蜂鸣器
  2. module beep(
  3. input clk,
  4. input rst_n,
  5. input flag1,
  6. output reg beep_out
  7. );
  8. parameter TIME=50_000_000;
  9. reg [26:0] cnt;
  10. wire add_cnt;
  11. wire end_cnt;
  12. //分频系数
  13. always @(posedge clk or negedge rst_n)begin
  14. if(!rst_n)
  15. cnt<=0;
  16. else if(add_cnt)begin
  17. if(end_cnt)
  18. cnt<=0;
  19. else
  20. cnt<=cnt+1'b1;
  21. end
  22. end
  23. assign add_cnt=1'b1;
  24. assign end_cnt=add_cnt &&(cnt==TIME-1);
  25. //pwm输出
  26. always @(posedge clk or negedge rst_n)begin
  27. if(!rst_n)
  28. beep_out<=1'b0;
  29. else if(end_cnt)
  30. beep_out<=~beep_out;
  31. end
  32. endmodule

 2、测试文件

  1. //定义时间尺度
  2. `timescale 1ns/1ns
  3. module beep_tb ;
  4. //输入信号定义
  5. reg clk ;
  6. reg rst_n ;
  7. wire beep_out ;
  8. //模块例化
  9. beep beep_inst(
  10. /*input */ .clk (clk ) ,
  11. /*input */ .rst_n (rst_n ) ,
  12. /*output */ .beep_out (beep_out )
  13. );
  14. defparam beep_inst.TIME =100;
  15. //激励信号产生
  16. parameter CLK_CYC = 20;
  17. //时钟
  18. initial clk=1;
  19. always #(CLK_CYC/2)clk=~clk;
  20. //复位
  21. initial begin
  22. rst_n= 1'b0;
  23. #(CLK_CYC*2);
  24. #3;//复位结束避开时钟上升沿
  25. rst_n= 1'b1;
  26. end
  27. endmodule

四、波形仿真

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/903195
推荐阅读
相关标签
  

闽ICP备14008679号