本节书摘来异步社区《例说8051:单片机程序设计案例教程》一书中的第2章,第2.3节,作者:张义和,陈敌北,更多章节内容可以访问云栖社区“异步社区”公众号查看
2-3 输出电路设计
例说8051:单片机程序设计案例教程
8051的输出端口可直接连接数字电路,也可用来驱动LED、继电器或喇叭等负载,以下就来探讨如何与这些负载“过招”。
2-3-1 驱动LED
发光二极管(Light-Emitting Diode,LED)体积小,功耗低,常被用作微机与数字电路的输出设备,用来指示信号状态。近年来LED的技术发展很快,在颜色方面,除了红色、绿色、黄色外,还出现了蓝色与白色,而高亮度的LED更是取代了传统灯泡成为交通灯(红绿灯)的发光器件;就连汽车的尾灯也开始流行使用LED车灯。
一般地,LED具有二极管的特点,反向偏压时,LED将不发光;正向偏压时,LED将发光;以红色LED为例,正向偏压时LED两端约有1.7V的压降(比二极管大),图2-9所示为其特性曲线。
随着通过LED正向电流的增加,LED将更亮,而LED的寿命也将缩短,因此以10mA~20mA的大小为宜。8051的输入/输出口都是漏极开路的输出,其中的P1、P2与P3内部有30k上拉电阻,因此想从P1、P2或P3流出10mA~20mA的电流,恐怕有困难。如果从外面流入8051的Port,那电流就可以大一点,如图2-10所示。
如图2-10(b)所示,当输出低电平时,输出端的FET将导通,输出端电压接近0V,若LED顺向时,两端电压V_D为1.7V,则限流电阻R两端将存在3.3V(即5-1.7)的电压。如果希望流过LED的电流I_D限制为10mA,则此限流电阻R为:
对于TTL电平的数字电路或微控制器电路,LED所串接的限流电阻大多为200~330,电阻越小,LED越亮。若LED为非连续负载(例如扫描电路或闪烁灯),则电流还可大一点,甚至采用50~100的限流电阻即可。
2-3-2 驱动继电器
如果要利用8051来控制不同电压或较大电流的负载时,则可通过继电器(RELAY)来隔离控制的意图。若要驱动继电器,光靠8051输出口的电流恐怕不够,况且驱动继电器线圈这种感性负载还要有些保护才行。我们可使用晶体管来控制继电器,以12V继电器为例,如图2-11所示。
在此这个晶体管是当成开关来用,以图2-11(a)为例,8051输出高电平时,晶体管工作于饱和状态,8051输出低电平时,晶体管工作于截止状态。图2-11(b)则相反,8051输出低电平时,晶体管工作于饱和状态,8051输出高电平时,晶体管工作于截止状态。其中的二极管D提供继电器线圈电流的放电路径,以保护晶体管。由于线圈属于电感性负载,当晶体管截止时,i_c=0,而原本线圈上的电流i_L不可能瞬间为0,所以二极管D就提供一个i_L的放电路径,使线圈不会产生高的感应电动势,就不会破坏晶体管了。
如果要同时有多个输出端口要驱动继电器,则可使用集电极式(OC)输出的反相门,如7405(驱动5V的继电器)或7406(驱动较高电压的继电器,最高30V),如图2-12所示。
2-3-3 驱动蜂鸣器
在微处理电路上的发声设备称为蜂鸣器(buzzer),蜂鸣器类似于小型喇叭。市售蜂鸣器分为电压型与脉冲型两类,电压型蜂鸣器得电就会鸣叫,其频率固定;脉冲型蜂鸣器必须加入脉冲才会发出声响,且其声音的频率就是加入脉冲的频率,在此就是使用脉冲型蜂鸣器。图2-13所示为12mm脉冲型蜂鸣器的外观与尺寸。
89S51驱动蜂鸣器的信号为各种频率的脉冲,其驱动方式可采用达林顿晶体管,或以两个常用的小晶体管(如CS9013)连接成达林顿结构,图2-14(a)适用于P1~P3,图2-14(b)增加了一个上拉电阻,适用于P0~P3。这两个驱动电路属于高电平动作(active high),也就是输出1时,蜂鸣器吸合,输出0时,蜂鸣器放开。对于蜂鸣器而言,其发声原理在于吸放动作所引起的簧片振动,至于先吸后放,还是先放后吸,并不重要。
因此,我们可采用低电平动作(active low),也就是输出0时,蜂鸣器吸合,输出1时,蜂鸣器放开。而其驱动电路就非常简单,如图2-15所示,不管使用哪个端口都可以,且驱动电流都足以使晶体管输出饱和。当端口输出1时,CPU内部的FET不导通,所以,i_b=0,i_c=0,蜂鸣器放开;当端口输出0时,CPU内部的FET导通,可吸入大电流(数毫安),所以,i_b很大,i_c当然会很大,蜂鸣器将被吸住。另外,在晶体管BE之间连接一个泄放电阻器(10k),其目的是让晶体管从饱和到截止时,提供一个泄放BE间少数载流子的路径,以加速切换,防止拖音。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。