蜂鸣器播放音乐 fpga实现

本文介绍了无源蜂鸣器播放音乐的原理及FPGA实现方法。通过利用计数器产生PWM波形,根据乐谱设置震荡周期,详细阐述了如何用FPGA实现《两只老虎》的播放。实现过程中涉及三个计数器,用于控制音符周期、响铃次数和总音符数量,并给出音符周期计算公式。总结中提到,实际操作并不复杂,关键在于理解并合理使用计数器。
摘要由CSDN通过智能技术生成

目录

原理

蜂鸣器分为有源蜂鸣器和无源蜂鸣器,即以有无震荡源分类,
有震荡源直接通直流电就可发生,无震荡源则需要通震荡波才能发声。
这里介绍无源蜂鸣器播放音乐的方法。
思路:
利用计数器产生pwm波形
根据乐谱设置震荡周期
给蜂鸣器赋值

注:一个音符响一个周期不在人耳的感知范围内,一般一个音符需要重复200以上个周期可以清楚的听到
在这里插入图片描述
注:音符周期计算:时钟频率 / 音符频率 = 音符周期数
或者 音符周期 / 时钟周期

实现

这里实现的《两只老虎》

三个计数器
cnt0 计数音符周期
cnt1 计数一个音符响的次数
cnt2 计数总的音符个数

两个参数
一个音符周期预设值
一个音符周期占空比

代码

module pwm_beep2(
    input clk,
    input rst_n,
    output reg beep
);

parameter M1 = 17'd95600;
parameter M2 = 17'd85150;
parameter M3 = 17'd75850;
parameter M4 = 17'd71600;
parameter M5 = 17'd63750;
parameter M6 = 17'd56800;
parameter M7 = 17'd50600;

reg [16:0] cnt0;//音符周期计数器
wire add_cnt0;
wire end_cnt0;

reg [8:0] cnt1;//音符重复次数计数器
wire add_cnt1;
wire end_cnt1;

reg [4:0] cnt2;//音符总次数
wire add_cnt2;
wire end_cnt2;

reg 	[16:0] preset_note;//预设音符周期数
wire 	[16:0] preset_duty;//占空比
//音符周期计数
always@(posedge clk or negedge rst_n)begin
    if(!rst_n)begin
        cnt0 <= 17'b0;
    end
    else if(add_cnt0)begin
        if(end_cnt0)begin
            cnt0 <= 
FPGA蜂鸣器播放音乐的方法是利用计数器产生PWM波形,根据乐谱设置震荡周期,并给蜂鸣器赋值。在无源蜂鸣器中,有震荡源直接通直流电就可发声,而无震荡源则需要通震荡波才能发声。 具体实现方法如下: 1. 首先,通过FPGA的计数器模块产生PWM波形。计数器的计数频率可以根据需要调整,一般情况下,计数频率越高,音质越好。通过设置计数器的初始值和周期,可以控制PWM信号的频率和占空比。 2. 根据乐谱将音符的频率转换为对应的震荡周期。音符的周期可以通过时钟频率除以音符频率得到,或者通过音符周期除以时钟周期得到。根据乐谱的要求,设置计数器的初始值和周期,使得计数器在每个音符周期内完成一个完整的循环。 3. 将计数器的值传递给蜂鸣器,使其发出对应频率的声音。通过将计数器的值赋给蜂鸣器的输入端口,可以控制蜂鸣器的振动和声音的产生。 总结:FPGA蜂鸣器播放音乐的方法是通过计数器产生PWM波形,根据乐谱设置震荡周期,并将计数器的值赋给蜂鸣器实现对应频率的声音。这样就可以利用FPGA蜂鸣器播放出音乐。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* *2* [蜂鸣器播放音乐 fpga实现](https://blog.csdn.net/xianyudewo/article/details/120525690)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值