基于FPGA的音乐蜂鸣器的设计与设计。背景技术蜂鸣器是电子蜂鸣器的集成结构。它由直流电压供电,广泛用于计算机,打印机,复印机,警报器,电子玩具,汽车电子设备和电话。 ,计时器等电子产品为音响设备。在一般设计中,可以使用蜂鸣器来检测是否按下了某些按钮,或者某些功能是否正常等。当然,如果声音足够浪漫,也可以使用蜂鸣器来播放音乐。设计原理本设计使用无源蜂鸣器,也可以称为蜂鸣器。原理电路图如下所示。它没有内部驱动电路。被动蜂鸣器的理想信号是方波。如果使用直流电,则蜂鸣器将不会响应,因为磁路是恒定的,并且钼片无法振动和发出声音。根据电路图,由于FPGA的驱动能力不足,因此增加了一个三极管来驱动无源蜂鸣器。行驶时,只需向蜂鸣器发送一定频率的方波即可使蜂鸣器发声。那么应该发送什么频率呢?有关详细信息,请参阅下表(音节频率表)。连续演奏音乐所需的两个基本数据是:构成音乐作品的每个音符的频率值(音高)和每个音符的持续时间(音高)。因此,只要控制从FPGA输出到蜂鸣器的激励信号的频率和持续时间,蜂鸣器就可以发出连续的音乐声。在本设计中,由于核心开发板的晶体振荡器为50MHz,因此我们需要一个分频器模块(PLL)来产生较低的参考频率(1MHz)。它还需要一个空间来存储乐谱。由于乐谱是固定的,不需要更改,因此我们选择ROMIP内核进行存储。可以对1MHz的参考频率进行分频以获得所有不同频率的信号。最大分频比为1_000_000 / 262/2。由于是音乐,因此需要一个节拍,通常为4个节拍,即声音长度为0.25s,因此有必要设计一个模块来控制每0.25s,ROM地址增加1。发送低音1并保持1秒钟,您只需要在ROM的四个连续地址中写入低音1的相应信息即可。在设计中,为方便将数据存储在ROM中,此处的数据格式为8hAB,其中A临时为分别代表低音,中音和高音的三个值1、2和4。 B临时具有1,2,3,4,5,6,7的七个值。例如,如果您要生成低音1,您只需要在ROM中存储8h11,如果您要生成高音7,只需要在ROM中存储8h47,依此类推。此时,需要一个解码模块来将ROM中的数据恢复为音乐生成器所需的数据。设计架构图通过以上分析,可获得以下架构图。该设计包括6个模块。 PLL模块将50MHz的时钟信号降低到1MHz,rom模块存储音乐数据,time_counter是一个计数模块,每0.25s产生一次节拍。 ,输出time_finsh在一个周期内变为高电平。并将其发送到addr_gen模块,生成addr,让rom输出下一个地址的数据。 rom输出的数据rom_data通过计数器输入到解码解码模块,解码的数据music_data通过计数器输入到music_gen模块,如果计数器小于music_data的值,则蜂鸣声保持不变,否则,蜂鸣器保持不变。发出哔哔声并将计数器清零,从而生成特定的方波频率。设计代码time_counter模块代码如下:addr_gen模块代码如下:解码解码模块代码如下:music_gen模块代码如下:哔声顶级模块代码如下:仿真图仿真结果如下:从仿真图看:当rom输出rom_data为8' h16时,表示输出低音6,解码结果music_data为1136,输出蜂鸣频率为440Hz,与实际低音6音节的值一致频率表;当rom输出rom_data为8h22时,它代表输出中音2,解码结果Music_data为851,输出蜂鸣频率为563Hz,与实际中音2音节频率的值相差24Hz桌子。存在一定的错误,但它不会影响音乐的播放。如果要提高蜂鸣频率的精度并减少误差,可以将参考频率增加1MHz。