蜂鸣器应用:基于FPGA实现简易电子琴设计验证


一, 蜂鸣器概念

蜂鸣器分为有源蜂鸣器和无源蜂鸣器,其产生声音的原理是一样的,都是通过振动产生声音。有源蜂鸣器内部集成了震荡源,无源蜂鸣器内部没有震荡源。开发板集成的蜂鸣器为无源蜂鸣器。如果需要其产生不同音符的声音,需要我们产生不同频率的信号给到蜂鸣器。


二, 简易电子琴设计要求

当我们对按键进行操作时,如果一直按着按键,蜂鸣器就会一直发出该按键对应的音符声音,我们需要对按键进行处理时产生一个对按键一直按下的使能信号,利用该使能信号控制蜂鸣器信号的产生。由于开发板集成的按键我们能够用到的有20个,而音符频率对应的是21个,我们将高音7去掉,这样我们就可以利用20个按键对应20个音符频率,规定:4个独立按键,从左到右一次对应的频率为:低音1,低音2,低音3.低音4,16位的矩阵键盘对应的音符频率为:0到2对应低音5,低音6,低音7;3到9按键对应中音1到中音7,10到15按键对应音符为高音1到高音6。

三,设计架构

forum.jpg

三,设计架构

产生频率控制字控制模块fword_ctrl设计分析:

对于矩阵键盘来说,其产生的标志信号flag和按键键值结合起来就可以分辨出我们对哪一个音符按键进行操作,我们在独立按键消抖处理过程中产生一个key_num信号,用来表示对应独立按键的键值,0表示高位按键,3表示低位按键,通过判断条件:flag = =1或者^flag1== 1,将矩阵键盘和独立按键产生的键值拼接起来形成一个六位的变量num[6:0],num= {key_num,key_value},利用case语句判断num信号的值。

case(num)

001_1111 : 独立按键1 fword = (50_000_000/262)/2

010_1111 : 独立按键2fword = (50_000_000/294)/2

011_1111 : 独立按键3

100_1111 :独立按键4

000_0000 :矩阵键盘0按键

000_0001 :矩阵键盘1按键

....

000_1111 :矩阵键盘F按键

defult: fword=0;

endcase

//////////////////////////////////////////////////////////////////////////////////////