单片机小白学步(22) IO口:蜂鸣器的使用/三极管的工作原理
这一篇继续上一篇的内容,我们来做实验四:按键控制有源蜂鸣器,按下按键蜂鸣器响,释放按键不响。
蜂鸣器
实验四之前简单介绍下蜂鸣器。蜂鸣器有两种,无源蜂鸣器和有源蜂鸣器,一般用于发出报警的声音。声音是由震动产生的,大家都见过喇叭,喇叭里面有磁铁和线圈。给线圈通上不断变化的电压,在磁铁产生的磁场中就会运动。于是和线圈固定在一起的振膜就会震动,于是就能听见声音了,而无源蜂鸣器和喇叭效果基本一样。和无源蜂鸣器不同的是,有源蜂鸣器内部就有发声电路,通上电压合适的直流电就会发出叫声。另外,有源蜂鸣器有正负极之分。图中是常用的一种工作电压为5V的有源蜂鸣器,正面标有加号的一侧引脚为正极,如果器件是全新的没有剪过引脚,正极引脚比负极长。
![](../img/eep/emb/emb-572562aplcurm3yl.jpg)
![](../img/eep/emb/emb-57257ggrig0pew3u.jpg)
驱动电路
从上面的介绍来看,有源蜂鸣器和LED一样,只要通电就能工作(如果没有特殊说明,后面蜂鸣器就是指有源蜂鸣器)。但是为什么要单独作为一个实验呢?
前面我们说了,单片机IO口能通过的电流是有限的,过大的电流可能会烧坏管脚,或者不能正常工作。蜂鸣器和LED相比最主要的区别,就是蜂鸣器比LED需要的电流大很多,电压一般也会高一些。
为了让单片机驱动蜂鸣器,也就是控制蜂鸣器工作,我们需要使用一些特别的电路。不知道大家是否了解继电器,继电器的特点就是用小电流低电压,控制大电流高电压电路。但是一般的继电器控制端需要的电流,对于单片机来说还是太大了,而且继电器价格比较高,能控制很大的电流,用在这里大材小用了。而这里我们要用的器件是三极管。
三极管基本介绍
三极管的作用主要是放大电流。和名字一样,三极管有三个管脚:发射极、基极、集电极,分别简写为E、B、C。有两种类型,PNP型和NPN型,两种类型的三极管工作时电流方向恰好相反,电路符号也不相同,如图所示。发射极上的箭头正是表示工作时电流方向的。
![](../img/eep/emb/emb-57258l04te4yppvy.jpg)
三极管有很多参数,实际的三极管也有很多种,封装也各种各样。下图是常见的TO-92封装的直插式小功率三极管。注意,这种外形只是封装,并不是三极管专用,也有其他器件会用这样的封装,具体要看上面标示的器件型号,例如图中的S9012表示它是9012三极管。像图中一样管脚朝下放置,半圆柱的平面正对自己,从左往右三个管脚分别是E、B、C。
![](../img/eep/emb/emb-57259v5rbzldqf2h.jpg)
三极管作为电子开关使用
三极管有三种工作状态,截止区、放大区、饱和区。在放大区,可以放大电信号,我们用的扩音器等设备就可以通过三极管实现。在单片机中我们主要利用三极管的截止区和饱和区,作电子开关使用,常用下面这样的电路图。
![](../img/eep/emb/emb-57260g4fu0xoesr1.jpg)
左图和右图分别是NPN、PNP型三极管的电路图。R1、S1和R2、S2相当于单片机IO口,三极管集电极接蜂鸣器。NPN型电路控制蜂鸣器高电平有效,即IO口输出高电平的时候,蜂鸣器就会响。PNP型反之。为了方便观察,我接的是LED,和蜂鸣器是一样的道理,可以看到图中LED就点亮了。注意三极管的管脚位置不可接反,要驱动的负载即图中的LED也不能接反。
常用PNP三极管有9012、8550等,NPN三极管有9013,8050等。
三极管的原理和很详细的工作情况分析,需要不少的计算过程,有兴趣的读者可以查看模拟电路相关的书籍资料。文章末尾也会简单分析三极管工作机制,有兴趣的同学可以看看。如果觉得难以理解,学习单片机过程中,可以不做深入研究。
电路设计
程序的实现和点亮LED差不多,不过要看你的电路确定是高电平还是低电平有效。按照前面的三极管电路,我们可以用9012实现蜂鸣器驱动电路,低电平有效,电路图如下,注意蜂鸣器的正负极不能接反。
![](../img/eep/emb/emb-57261hba5vqxl3ze.jpg)
图中P1.0上接的LED还放在那(当然也可以去掉),P2.0上接了按键开关,P2.1上连接了三极管驱动的蜂鸣器。
我用面包板搭建的电路。
![](../img/eep/emb/emb-572621dowslqtgmy.jpg)
备注:三极管在这里起到开关的状态,建议优先考虑使用PNP型三极管电路。因为三极管的作用是放大电流,对于同一个三极管而言,如果要输出更大的电流,一般就要在基极输入更大电流。而使用PNP型电路时,IO口输出低电平有效,对于单片机来说是灌电流,此时基极能提供的电流更大,从而提供更大电流以驱动蜂鸣器。我在实际测试时,如果使用NPN型三极管9013,可以驱动LED,但不足以驱动蜂鸣器,除非自己给IO口再外接一个上拉电阻。
程序实现
首先是定义LED、按键、蜂鸣器三个IO口
sbit LED = P1^0;
sbit KEY = P2^0;
sbit BUZZER = P2^1;
然后先设置KEY=1,然后在主循环中处理即可。这里我用的是PNP驱动,蜂鸣器和LED一样,是低电平有效。
void main()
{
KEY = 1;
while(1) {
LED = KEY;
BUZZER = KEY;
单片机蜂鸣器三极管工作原 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)