设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 1130|回复: 0
收起左侧

Quartus Verilog HDL/FPGA 声音的方波调制超声波PWM载波实现控制无源蜂鸣器频率与音量

[复制链接]
发表于 2022-9-20 18:50:21 | 显示全部楼层 |阅读模式
本帖最后由 HDL 于 2022-9-20 18:52 编辑
PWM载波:必须是超声波,占空比越高,音量越高。
蜂鸣器方波:低电平无载波,高电平有载波,不加载波没有控制音量的功能。
1Khz 蜂鸣器方波:500us低电平+500us高电平。

main.png
  1. `define fosc 50000000                        //晶振频率

  2. module beep(                                //无源蜂鸣器频率音量发生器模块 (几个蜂鸣器就调用几个)
  3.         input clk,                                //时钟输入
  4.         input [14:0] hz,                //频率 0~32767Hz (0静音)
  5.         input [7:0] volum,        //音量 0~255 (0静音 255最大)
  6.         output out                                //无源蜂鸣器 (高电平触发,静音输出低电平)
  7. );

  8. reg beep;
  9. reg [7:0] j;
  10. assign out = beep & (j < volum);
  11. integer i = 0;
  12. always @(posedge clk) begin
  13.         if(hz != 0 && volum != 0) begin
  14.                 i = i + 1;
  15.                 if(i >= `fosc/hz/2) begin
  16.                         i = 0;
  17.                         beep <= !beep;
  18.                 end
  19.         end else begin
  20.                         i = 0;
  21.                         beep <= 0;
  22.         end
  23.         j = j + 1'b1;
  24.         if(&j) begin
  25.                 j = 0;
  26.         end
  27. end
  28. endmodule

  29. module main(
  30.         input clk,                //Pin17 50Mhz
  31.         output beep                //Pin40 无源蜂鸣器(高电平触发)
  32. );

  33. beep U1(                                //模块实例化
  34.         .clk(clk),
  35.         .hz(15'd1000),                //频率
  36.         .volum(8'd1),                //音量
  37.         .out(beep)
  38. );

  39. endmodule
复制代码

相关帖子

您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-4-29 03:39 , Processed in 1.050060 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表