在实际的应用中,虽然有源蜂鸣器控制简单,缺陷是成本比较高,在潮湿的环境用久了,容易损坏。而无源蜂鸣器弥补了有源蜂鸣器缺点,但问题是无源蜂鸣器需要PWM驱动。在系统的设计中,微控制器的PWM资源往往是比较紧张的,同时使用PWM驱动也加大了软件开发的难度。接下来笔者将引领大家学习如何设计一个无需PWM也能驱动无源蜂鸣器的低成本电路。
1.1 无源蜂鸣器常规驱动电路
图1 无源蜂鸣器常规驱动电路
如图1所示,此图为无源蜂鸣器的常规驱动电路。需要在输入端输入一定频率PWM的信号才能使蜂鸣器发声。为了解放PWM资源,实现简单控制,必须如有源蜂鸣器一样提供一个振荡电路。而有源蜂鸣器主要使用LC振荡,如果要实际搭建此电路,电感参数比较难控制,而且成本高。此时,自然会想到简易的RC振荡,而由三极管构成的RC多谐振荡电路显然是一个不错的选择。
1.2 三极管多谐振荡电路
图2 三极管多谐振荡电路
三极管多谐振荡的通用电路如图2所示。这个电路起振的原理主要是通过电阻与电容的充放电使三极管交替导通。首先,在电路上电时,分别通过R1与R4对电容C1与C2进行充电。由于三极管元件的参数不可能完全一致,可以假设三极管Q1首先饱和导通,由于电容两端的电压不能突变,Q2的B极此时变成负压,Q2截止,Vo端输出高电平;C1通过R2进行充电,当C2的电位使BE极正向偏置时,Q2导通,Vo端输出低电平;同理C2电容两端电压不能突变,Q1的B极电压变为负压,此时Q1截止。这样循环往复,使在Vo端输,一定频率的方波信号。如图3所示,笔者使用示波器截取了Q1与Q2的B极和E极的波形,可以发现与上面的分析是吻合的。
图3 多谐振荡电路充放电波形
从以上的分析可以看出,Vo的输出信号频率受到R2与C1,R3与C2充放电速度的控制。假设,以Q2的C极作为信号的输出,R2与C1的充电时间T1决定了输出信号高电平时间,而R3与C2的充电时间T2决定了信号输出低电平时间。而信号的频率为:f=1/(T1+T2)。由此,可以推导出输出信号的公式。由于RC充电时间公式:t=R*C*Ln[(E-V0)/(E-Vt)],在本电路中,E为VCC,V0为-(VCC-Vbe),Vt为Vbe,则,最终的公式为:t=R*C*Ln[(2*VCC-Vbe)/(VCC-Vbe)]。
接下来,就可以进行电路参数设计了。而笔者手中的蜂鸣器振荡频率全是2.4KHz的,所以此处只计算此频率的参数。设电容C1=C2=0.1μF,VCC=5V,Vbe=0.63V则可以计算出电阻参数:R=1/(2*10-7*2.4*103*Ln[(2*5-0.63)/(5-0.63)])=2.7KΩ。至于R1与R4的取值,只需要参数比R2与R3小一些即可,而信号输出的边沿的陡峭程度受这两个电阻影响,电阻越小,边沿越陡峭。按照此计算的参数搭建电路,测试频率如图4所示,实际频率与理论值接近。
图4 多谐振荡Vo实际输出信号
1.3 无源蜂鸣器驱动电路改进
上面的振荡电路已经有了,下面又该如何驱动并且控制无源蜂鸣器呢?其实,只需要将电路进行简单修改即可实现目的。
第一,将原电路R4替换成为蜂鸣器,并在蜂鸣器两端并联二极管。细心的读者如果看过《EasyARM-iMX283教你设计蜂鸣器电路》,会发现在无源蜂鸣器两端没有并联电容。通过实际的电路测量,无源蜂鸣器并没有产生尖峰脉冲,所以去掉此电容,如图5所示。
蜂鸣器两端的续流二极管的选择十分的重要。如果二极管选择不当,可能会引起蜂鸣器电路的不稳定。通常使用的1N4148开关二极管,可能会使电路的充电回路不稳定,使蜂鸣器的发声比较嘶哑。在此电路中笔者建议二极管最好选择肖特基类型的二极管。
图5 无源蜂鸣器驱动电路
第二,为电路加入了一个控制端。在实际的电路中,不能让蜂鸣器一直鸣叫,所以需要进行控制。控制电路,笔者想到了两种,读者也可以发挥自己的想象,改进电路。
(1)在Q的B极通过一个小的电阻接到单片机的IO口,但此方法要求单片机IO处于开漏或弱上拉状态。当单片机输出低电平时,B极电压非常低,不会饱和导通,振荡也就停止了,蜂鸣器不叫;当IO输出高电平,由于处于弱上拉(内部上拉电阻一般几十K欧姆)或开漏状态,对电路的充放电电路几乎没有影响,电路开始振荡,蜂鸣器鸣叫,电路如图6的a图所示。
(2)使用一个二极管对电路电路进行隔离,如果单片机IO一不小心处于了推挽输出状态,使用第一种方式电路的频率就将被改变。如果使用二极管隔离,这样不用担心电路异常了,可以实现如(1)相同的简单控制。但要注意,此时二极管的导通压降一定要比三极管的Vbe小,使三极管处于截止状态,电路如图6的b图所示。
通过比较两种方式可以发现加一个小电阻是一个即简单又廉价的控制方式,但如果想要“偷懒”,二极管的隔离是很好的选择。
图6 无源蜂鸣器控制电路
1.4 无源蜂鸣器电路兼容设计
图7 无源蜂鸣器兼容设计电路
为了电路的兼容性的设计,即可驱动无源蜂鸣器又能驱动有源蜂鸣器,笔者设计如图7所示的改进电路。与图6的b图所示的电路比较,主要增加了两个电阻和两个电容。在实际的使用的过程中,可以根据实际的工程应用,选择合适的驱动电路。
如果是驱动无源蜂鸣器,如图7的a图所示,图中标为红色的器件都不用焊接。而如果在设计过程中想让电路使用有源蜂鸣器,可以修改为如图7的b图所示的电路,同样图中的红色的器件不用焊接即可。
1.5 驱动电路局限性分析
其实,仔细的分析这个电路也存在一定的局限性。由于此三极管多谐振荡电路的振荡频率主要是通过RC的冲放电时间来决定的。所以,电阻和电容的选择尤其的重要。在大多数环境下,其实电阻的稳定性是比较好的,电容最易受到温度变化的影响。本次试验笔者使用了100nF电容,通过厂家提供的器件手册,在-55~+125度范围内误差为±10%。也就是说,如果常温(25度)频率为2.4KHz,在恶劣的温度环境下振荡将在2.16KHz~2.64KHz范围内,因此,在高低温的环境下音调可能会发生一定的变化。
为了验证猜想,笔者也做了一个简单的试验作为验证。笔者将电路板的温度控制到85度左右,然后使用示波器抓取此时三极管的输出波形。通过示波器发现,确实如所预料的一般,振荡频率发生了改变,变成了2.7KHz左右,与预估的频率相近。然后,为了测试电路的低温特性,又将电路板的温度控制到-40度左右。此时,测试蜂鸣器的输出频率为2.25KHz左右。这个数据也在初始的预计的范围以内,有兴趣的读者也可以自己实践试一试。