手把手教你使用IC单片机驱动蜂鸣器(C语言版)
- 格式:pdf
- 大小:56.65 KB
- 文档页数:3
用单片机驱动蜂鸣器演奏的方法说明音的产生是由于物体的振动,通过单片机供电来控制蜂鸣器振动来发声。
单片机IO 口通过高低电平快速切换形成频率可以驱动蜂鸣器发音。
这样蜂鸣器就会以不同的音调“鸣响”。
这里主要理解“音调”和“节拍”两个概念。
音调表示一个音的频率是多少。
即就是音的高低。
在钢琴上,中央C 所在音阶的A ,(C D E F G A B )A 的频率作为基准频率,440Hz 。
同时,需要知道如果f2 = f1*2,则称f2是f1的高八度,即f2和f1的音名相同,高度高了一个音阶。
按照钢琴12平均律,将一个音阶的音均分成12份,那么每一个对应的音都可以计算出确定的频率了。
注意!八度音指频率加倍,将八度音分为12等份,是分为12个等比级数。
f2=f1*2,且f1*12q =f2,可以计算,这个等比数列的比值是q=122=1212=1.05946.为了实现不同音的频率,需要单片机通过定时器不停的产生中断,实现管脚电平反转,来产生相应频率。
这时定时器装载初始值如何计算呢?以标准A 为例,A (f=440Hz),T=1/f=1/440=0.00227273s=2272.73us ,即单片机管脚要输出周期为2272.73us 或者f=440Hz 的方波。
通过单片机定时中断来实现反转的话,考虑单片机定时器装载数值为多少才能形成2272us 的定时中断呢?假设系统时钟8MHz ,则x/8MHz=2272.73us ,x = 18181.1818... x 取整数18181,即定时器应装载18181,才能产生440Hz 的频率。
对应参考表格FIG1.音名 C C# D D# E F F# G G# A A# B 大字组频率f(Hz)65 69 73 78 82 87 92 98 104 110 117 123 周期T(us)15289 14431 13621 12856 12135 11454 10811 10204 9631 9091 8581 8099音名 c c# d d# e f f# g g# a a# b 小字组频率f(Hz)131 139 147 156 165 175 185 196 208 220 233 247 周期T(us)7644 7215 6810 6428 6067 5727 5405 5102 4816 4545 4290 4050音名c1(中央C)c1# d1 d1# e1 f1 f1# g1 g1#a1(基准音)a1# b1小字1组频率f(Hz)262 277 294 311 330 349 370 392 415 440 466 494 周期T(us)3822 3608 3405 3214 3034 2863 2703 2551 2408 2273 2145 2025音名c2 c2# d2 d2# e2 f2 f2# g2 g2# a2 a2# b2 小字2组频率f(Hz)523 554 587 622 659 698 740 784 831 880 932 988 周期T(us)1911 1804 1703 1607 1517 1432 1351 1276 1204 1136 1073 1012音名c3 c3# d3 d3# e3 f3 f3# g3 g3# a3 a3# b3 小字3组频率f(Hz)785 832 881 933 989 1048 1110 1176 1246 1320 1398 1482 周期T(us)1274 1203 1135 1071 1011 954 901 850 803 758 715 675FIG 1.节拍音乐的调号和节拍被表示成 1=C44或者1=G 43,其中的C,或者G 或者位于“=”之后的其他音名表示的意思是,以这个音名作为基础,唱作do 。
单片机驱动蜂鸣器原理与程序单片机驱动蜂鸣器原理与设计作者:mcu110 来源:51hei 点击数:12159 更新时间:2007年08月01日【字体:大中小】蜂鸣器是一种一体化结构的电子讯响器,本文介绍如何用单片机驱动蜂鸣器,他广泛应用于计算机、打印机、复印机、报警器、电话机等电子产品中作发声器件。
蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。
电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。
接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。
压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。
多谐振荡器由晶体管或集成电路构成,当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。
下面是电磁式蜂鸣器的外形图片及结构图。
电磁式蜂鸣器实物图:电磁式蜂鸣器结构示意图:图 1 图 2 电磁式蜂鸣器内部构成:1. 防水贴纸2. 线轴3. 线圈4. 磁铁5. 底座6. 引脚7. 外壳8. 铁芯9. 封胶10. 小铁片11. 振动膜12. 电路板一、电磁式蜂鸣器驱动原理蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。
S51增强型单片机实验板通过一个三极管C8550来放大驱动蜂鸣器,原理图见下面图3:S51增强型单片机实验板蜂鸣器驱动原理图:图 3如图所示,蜂鸣器的正极接到VCC(+5V)电源上面,蜂鸣器的负极接到三极管的发射极E,三极管的基级B经过限流电阻R1后由单片机的P3.7引脚控制,当P3.7输出高电平时,三极管T1截止,没有电流流过线圈,蜂鸣器不发声;当P3.7输出低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。
4.4.4.4.1111 音调音调音调音调、、、、节拍节拍节拍节拍以及以及以及以及编码的确定编码的确定编码的确定编码的确定方法方法方法方法一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能像电子琴那样能奏出多种音色的声音。
因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和节拍表示一个音符唱多长的时间。
4.4.4.4.1111.1.1.1.1 音调的确定音调的确定音调的确定音调的确定不同音高的乐音是用C、D、E、F、G、A、B来表示,这7个字母就是音乐的音名,它们一般依次唱成DO、RE、MI、FA、SO、LA、SI,即唱成简谱的1、2、3、4、5、6、7,相当于汉字“多来米发梭拉西”的读音,这是唱曲时乐音的发音,所以叫“音调”,即Tone。
把C、D、E、F、G、A、B这一组音的距离分成12个等份,每一个等份叫一个“半音”。
两个音之间的距离有两个“半音”,就叫“全音”。
在钢琴等键盘乐器上,C–D、D–E、F–G、G–A、A–B两音之间隔着一个黑键,他们之间的距离就是全音;E–F、B–C两音之间没有黑键相隔,它们之间的距离就是半音。
通常唱成1、2、3、4、5、6、7的音叫自然音,那些在它们的左上角加上﹟号或者b号的叫变化音。
﹟叫升记号,表示把音在原来的基础上升高半音,b叫降记音,表示在原来的基础上降低半音。
例如高音DO的频率(1046Hz)刚好是中音DO的频率(523Hz)的一倍,中音DO的频率(523Hz)刚好是低音DO频率(266 Hz)的一倍;同样的,高音RE的频率(1175Hz)刚好是中音RE的频率(587Hz)的一倍,中音RE的频率(587Hz)刚好是低音RE频率(294 Hz)的一倍。
1)要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。
利用定时器计时这半个周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。
4.4.4.4.1111 音调音调音调音调、、、、节拍节拍节拍节拍以及以及以及以及编码的确定编码的确定编码的确定编码的确定方法方法方法方法一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能像电子琴那样能奏出多种音色的声音。
因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和节拍表示一个音符唱多长的时间。
4.4.4.4.1111.1.1.1.1 音调的确定音调的确定音调的确定音调的确定不同音高的乐音是用C、D、E、F、G、A、B来表示,这7个字母就是音乐的音名,它们一般依次唱成DO、RE、MI、FA、SO、LA、SI,即唱成简谱的1、2、3、4、5、6、7,相当于汉字“多来米发梭拉西”的读音,这是唱曲时乐音的发音,所以叫“音调”,即Tone。
把C、D、E、F、G、A、B这一组音的距离分成12个等份,每一个等份叫一个“半音”。
两个音之间的距离有两个“半音”,就叫“全音”。
在钢琴等键盘乐器上,C–D、D–E、F–G、G–A、A–B两音之间隔着一个黑键,他们之间的距离就是全音;E–F、B–C两音之间没有黑键相隔,它们之间的距离就是半音。
通常唱成1、2、3、4、5、6、7的音叫自然音,那些在它们的左上角加上﹟号或者b号的叫变化音。
﹟叫升记号,表示把音在原来的基础上升高半音,b叫降记音,表示在原来的基础上降低半音。
例如高音DO的频率(1046Hz)刚好是中音DO的频率(523Hz)的一倍,中音DO的频率(523Hz)刚好是低音DO频率(266 Hz)的一倍;同样的,高音RE的频率(1175Hz)刚好是中音RE的频率(587Hz)的一倍,中音RE的频率(587Hz)刚好是低音RE频率(294 Hz)的一倍。
1)要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。
利用定时器计时这半个周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。
单⽚机学习(四)蜂鸣器和独⽴按键的使⽤⽬录蜂鸣器两种蜂鸣器的介绍有源蜂鸣器⼀般是输⼊⼀个电流或电压即可直接驱动⼯作,⽽⽆源蜂鸣器则需要输⼊脉冲信号才可以进⾏⼯作。
在51单⽚机开发板上的即为⽆源蜂鸣器。
蜂鸣器相关电路图可以看出,信号是通过P15传递到ULN2003D芯⽚后进⽽传递到芯⽚的OUT5(即BEEP端⼝)再传递到蜂鸣器中的,其中ULN2003D芯⽚起着电流放⼤的作⽤。
控制代码⾸先我们先获得控制蜂鸣器的引脚,从电路图可以看出是P15,所以:sbit BEEP= P1^5;因为这是⽆源蜂鸣器,所以我们需要给它提供脉冲信号输⼊才能使它⼯作。
⽽当BEEP为0时有电流,BEEP为1时⽆电流,所以我们需要循环改变BEEP的值,主函数代码如下所⽰:int main() {while (1){BEEP = ~BEEP;deley(10);}}如果我们希望改变蜂鸣器的⾳调,只需要改变脉冲信号的频率即可,也就是while循环中deley()的参数。
我们也可以不断改变deley()中填⼊的参数来使蜂鸣器发出奇怪的声⾳ :int main() {u16 time = 10;u8 cnts = 50;u8 i;for(time=10;time<200;time++) {for(i=0;i<cnts;i++) {BEEP = ~BEEP;deley(time);}}}独⽴按键独⽴按键电路图可以看到,这4个独⽴按键都是⼀端和单⽚机的引脚(P3[0..3])相连,⽽另⼀端直接接地的。
这些按键的效果是,当按键没有按下时,它们对应的端⼝的输出是⾼电平,⽽当按键按下之后,这些端⼝的输出则变为低电平了。
因此我们可以使⽤轮询的⽅式查看这些端⼝的电平情况来检测按钮是否被按下,如果按下,则我们可以进⾏计数等控制其他元件的操作。
按键控制⼀个LED的点亮和熄灭我们希望当点击按键时,第⼀个LED点亮,⽽在此单击时则熄灭。
按照之前的思路,我们很容易就能写出对应的控制代码:sbit OneLED = P2^0; // 使⽤OneLED来控制对应的引脚的输出sbit k1 = P3^1;void keypros() {if (k1 == 0) {deley(1000); // 消抖if (k1 == 0) {OneLED = ~OneLED;}while (!k1);}}int main() {while (1) {keypros();}}重要的是keypros()函数中的内容,当我们点击第⼀个按钮时,k1的值会变为0,因此我们进⾏轮询的时候就会进⼊到keypros()函数的第⼀个if中。
要编写C语言的STM32蜂鸣器代码,首先需要了解蜂鸣器的工作原理和STM32的基本操作。
在编写代码之前,建议按照以下步骤进行准备和规划。
一、了解蜂鸣器的工作原理蜂鸣器是一种能够产生声音的电子元件,它通常由振膜和驱动电路组成。
当有电流通过时,振膜会受到驱动而振动,从而产生声音。
我们在编写蜂鸣器代码时需要考虑如何控制电流输出来操控蜂鸣器的声音。
二、学习STM32的基本操作STM32是由意法半导体公司制造的一系列32位的嵌入式处理器芯片,它具有强大的功能和丰富的外设。
在使用STM32芯片时,需要了解其基本操作,包括寄存器的配置、时钟的设置、外设的控制等。
三、准备开发环境在编写C语言的STM32蜂鸣器代码之前,需要准备好相应的开发环境,包括编译器、调试器、下载器等工具。
常见的开发环境包括Keil、IAR等,选择一款适合自己的开发环境,进行相应的设置和配置。
四、编写蜂鸣器代码在以上准备工作完成之后,就可以着手编写C语言的STM32蜂鸣器代码了。
在编写代码时,需要注意以下几点:1. 选择合适的GPIO引脚首先需要选择一个合适的GPIO引脚来连接蜂鸣器,以便控制蜂鸣器的电流输出。
在选择引脚的需要了解其对应的端口号和引脚号,以便在代码中正确设置。
2. 配置引脚通过设置GPIO的相应寄存器,配置选定的GPIO引脚为输出模式,并初始化为低电平状态,以防止蜂鸣器在开始时就发出声音。
3. 控制蜂鸣器通过设置GPIO引脚的输出状态,来控制蜂鸣器的声音输出。
可以通过循环控制引脚的输出状态,从而产生不同频率和音调的声音。
4. 完善代码在编写完基本的蜂鸣器代码之后,可以考虑添加一些额外的功能,比如控制蜂鸣器的响声时长、声音的音量等,以使代码更加完善和实用。
五、调试和测试代码在编写完代码后,需要进行调试和测试,确保代码能够正常运行。
可以通过连接调试器,使用仿真器进行调试,或者直接下载到STM32芯片中进行测试,检查蜂鸣器是否按照预期工作。
单片机蜂鸣器C语言程序教学提纲一、引言(150字)单片机蜂鸣器是一种常见的发声装置,广泛应用于各种电子产品中。
本文以C语言为基础,介绍了如何控制单片机蜂鸣器发出不同的声音。
首先介绍了蜂鸣器的原理和工作方式,然后详细讲解了编写控制蜂鸣器的C 语言程序的步骤和注意事项。
通过本文的学习,读者将能够掌握如何使用C语言控制单片机蜂鸣器,并在实际应用中灵活运用。
二、蜂鸣器的原理与工作方式(300字)1.蜂鸣器的原理-蜂鸣器是一种电声转换器,通过电信号驱动其振膜产生声音。
-蜂鸣器一般由振膜、电磁线圈、铁芯和外壳等组成。
2.蜂鸣器的工作方式-蜂鸣器根据输入信号的频率和占空比的不同发出不同的声音。
-通过控制蜂鸣器发声的时间和间隔,可以产生不同的音乐效果。
三、编写单片机蜂鸣器控制程序(500字)1.硬件准备-单片机开发板-蜂鸣器-连接线-电源2.编写C程序-定义蜂鸣器引脚和常量-初始化引脚和IO口-编写蜂鸣器控制函数-在主函数中调用控制函数3.编写蜂鸣器控制函数-设置蜂鸣器引脚为输出模式-控制蜂鸣器发声-控制蜂鸣器静音4.调试程序-使用调试工具或示波器监测蜂鸣器引脚的电平变化-修改程序中的参数,调整发声频率和占空比-验证程序的正确性和蜂鸣器的工作状态四、注意事项与拓展(250字)1.注意事项-确保蜂鸣器引脚正确接入单片机引脚-检查程序中的硬件配置和引脚定义是否正确-注意蜂鸣器的工作电压和电流限制-参考单片机的数据手册2.拓展-加深对单片机和蜂鸣器的了解,学习其他控制蜂鸣器的方法-设计一个简单的音乐播放器,利用蜂鸣器发出不同的乐曲-结合其他传感器和模块,设计一个基于单片机的智能报警系统五、总结(100字)本文通过介绍蜂鸣器的工作原理和C语言编写控制程序的步骤,使读者能够掌握如何使用C语言控制单片机蜂鸣器。
同时,本文还提供了一些注意事项和拓展内容,帮助读者深入理解和拓展相关知识。
通过学习本文,读者能够在实际应用中自如地使用单片机蜂鸣器,并能够通过自身的创新设计实现更多有趣的功能。
单片机中蜂鸣器驱动模块在单片机应用的设计上,很多方案都会用到蜂鸣器,大部分都是使用蜂鸣器來做提示或报警,比如按键按下、开始工作、工作结束或是故障等等。
1.驱动方式由于自激蜂鸣器(有源蜂鸣器)是直流电压驱动的,不需要利用交流信号进行驱动,只需对驱动口输出驱动电平并通过三极管放大驱动电流就能使蜂鸣器发出声音,很简单,这里就不对自激蜂鸣器进行說明了。
这里只对必须用1/2duty的方波信号进行驱动的他激蜂鸣器进行说明。
单片机驱动他激蜂鸣器(无源蜂鸣器)的方式有兩种:一种是PWM输出口直接驱动,另一种是利用I/O定时翻转电平产生驱动波形对蜂鸣器进行驱动。
PWM输出口直接驱动是利用PWM输出口本身可以输出一定的方波來直接驱动蜂鸣器。
在单片机的软体设置中有几个系统寄存器是用來设置PWM口的输出的,可以设置占空比、周期等等,通过设置这些寄存器产生符合蜂鸣器要求的频率的波形之后,只要打开PWM输出,PWM输出口就能输出该频率的方波,这个时候利用这个波形就可以驱动蜂鸣器了。
比如频率为2000Hz的蜂鸣器的驱动,可以知道周期为500μs,这样只需要把PWM的周期设置为500μs,占空比电平设置为250μs,就能产生一个频率为2000Hz的方波,通过这个方波再利用三极管就可以去驅動這個蜂鳴器了。
而利用I/O定时翻转电平來产生驱动波形的方式会比较麻烦一点,必须利用计时器來做定时,通过定时翻转电平产生符合蜂鸣器要求的频率的波形,这个波形就可以用來驱动蜂鸣器了。
比如为2500Hz的蜂鸣器的驱动,可以知道周期为400μs,这样只需要驱动蜂鸣器的I/O口每200μs翻转一次电平就可以产生一个频率为2500Hz,占空比为1/2duty的方波,再通过三极管放大就可以驱动这个蜂鸣器了。
2.蜂鸣器驱动电路由于蜂鸣器的工作电流一般比较大,以致于单片机的I/O口是无法直接驱动的,所以要利用放大电路來驱动,一般使用三极管來放大电流就可以了。
3.蜂鸣器驱动设计由于这里要介绍兩种驱动方式的方法,所以在设计模组系统中将兩种驱动方式做到一块,即程式里边不仅介绍了PWM输出口驱动蜂鸣器的方法,还要介绍I/O口驱动蜂鸣器的方法。