1.蜂鸣器简介
蜂鸣器按其结构可分为电磁式蜂鸣器和压电式蜂鸣器两种类型。电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳组成。压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器以及共鸣箱、外壳等组成。压电式蜂鸣器是以压电陶瓷的压电效应,来带动金属片的振动而发声;而电磁式蜂鸣器则是用电磁的原理,通电时将金属振动 膜吸下,不通电时以振动膜的弹力弹回。由于两种蜂鸣器发声原理不同,电压式结构简单耐用但音调单一、音色差,适用于报警器等设备;而电磁式由于音色好,所以多用于语音、音乐等设备。 蜂鸣器按其是否带有信号源又分为有源蜂鸣器和无源蜂鸣器。有源蜂鸣器的内部装有集成电路,不需要音频驱动电路,只需要接通直流电源就能直接发出声响。而无源蜂鸣器只有外加音频驱动信号才能发出声响。
正在上传…重新上传取消
无源蜂鸣器驱动原理
无源蜂鸣器与有缘蜂鸣器不同,因其内部不带震荡源,所以其无法向有缘蜂鸣器那样直接用直流信号驱动,这里需要使用PWM方波才能驱动其发声。
如何发出不同的声音呢?上面说到需要使用PWM方波才能驱动其发声,所以这里我们只要控制输入的PWM方波,输入不同的PWM方波发出的声音就不一样了。而不同频率和占空比的方波发出的声音是不同的,其中频率对音调有影响,占空比对音量大小有影响。所以我们只需产生不同频率和占空比的PWM方波去驱动无源蜂鸣器就能让 无源蜂鸣器发出不同的音调了。
正在上传…重新上传取消从图中可以看到,不同频率的波形其单位波形所占时间不同;不同占空比的波形其高电平在单位波形的的占用比例不同。所以我们以此为根据,就能很容易的产生不同频率以及占空比的PWM波了
2.实验目标
驱动无源蜂鸣器进行七个基本音调“哆来咪发梭拉西”的循环鸣叫,每个音阶持续鸣叫0.5s后鸣叫下一个音阶。
正在上传…重新上传取消
无源蜂鸣器原理图
由原理图可知,我们只要在BEEP端输入PWM波即可驱动无源蜂鸣器进行鸣叫了
从实验目标我们知道,我们需鸣叫七个音调,而音调是受频率影响的,不同的频率产生的音调即不同,所以这里我们需产生七个不同的频率以发出七个音调,而占空比主要是对音调的音量有影响,这里占空比我们保持为50%即可。七个音调所对应的频率,如表所示
正在上传…重新上传取消
3.波形图绘制
正在上传…重新上传取消
我们需要循环产生七个不同的频率,所以这里我们使用一个计数器对不同频率进行计数,每个频率计一个值。这样我们就能根据计数值来判断我们该产生什么频率的波形了,cnt_500ms就是对0.5s周期计数,需鸣叫七个音调,所以我们需要计7个数(0~6)。而cnt就是算0.5s里有多少个20ns。
Do”音调PWM波产生波形图
由实验目标可知,刚开始我们是鸣叫音调“Do”,该音调的频率为262,所以这里我们需输出频率为262,占空比为50%的PWM方波。
首先是音调的频率我们该如何产生?我们先计算该频率单个方波的时间:1 / 262 ≈ 0.003816794s=3816794ns;而我们单个系统时钟(50MHz)的时间为:1 / 50000000 = 0.00000002s = 20ns;所以我们需用:3816794 / 20 ≈ 190840个系统时钟去产生一个PWM波,该PWM波形的频率即为262。故我们需先对190840个系统时钟进行计数,这里我们声明freq_cnt信号进行计数。
正在上传…重新上传取消
freq_cnt:音调计数器。我们使用该计数器进行计数,当要鸣叫什么频率的音调我们就让计数器计到该音调所对应的音调分频计数器值即可。这里计数0~190839即为190840个系统时钟,该计数范围内即为一个262频率波形。
freq_data:音调分频计数值。该信号我们用于定义各音调频率的计数值,当我们需要鸣叫什么频率的值时,我们就让该信号的值定义为该频率的计数值。如上图所示我们此时需要输出的PWM波形频率为262,按上面所述的计算方法,计数值即为190839。
duty_data:占空比计数值。通过改变该值我们可改变PWM波的占空比。前面说到我们是产生占空比为50%的波形,即高电平时间所占信号周期的百分比为50%。信号周期为190840话,50%占空比的高电平持续时间即为信号周期的一半,即为95420。
beep:输出控制蜂鸣器信号,该信号即为我们前面说的PWM方波。当我们需要输出频率为262时,我们需要产生波形的一个方波时间为190840个系统时钟,而高电平的持续时间即为95420,,所以如上波形图所示,当音阶计数器(freq_cnt)中的值大于等于占空比计数值时,我们将beep信号输出高电平,小于时输出低电平,这样我们输出的信号即为频率为262,占空比为50%的PWM波了,我们将该信号接入到驱动蜂鸣器的I/O引脚即能驱动蜂鸣器发出“Do”的音调。
Beep的波形不应该在音调计数器范围内(就是3‘d0范围内)只有一个脉冲吗?为什么这么多脉冲?
Beep输出的是一定频率和一定占空比的方波才是发出DO音,不是输出一个脉冲就能发出Do音
以上就是“Do”音调的输出PWM波产生方式,其余音调的产生方式是一样的,我们只要改变freq_data与duty_data的值就能产生不同频率的PWM波了。
正在上传…重新上传取消
根据此表绘制整体波形图
正在上传…重新上传取消
4.代码
正在上传…重新上传取消
正在上传…重新上传取消
仿真代码
正在上传…重新上传取消