由于很多孩子傍晚在街道上骑脚踏车、滑板车和踩溜冰鞋,如果能够采用某些发光信号来指示他们的存在,则不失为一种有益的安全措施。目前,闪光灯的最新进展是白色LED闪光灯。白光LED之所以出众,是因为同白炽灯相比,具有比较高的亮度,以及比较长的电池使用寿命。由于白光LED需要大约3.5V的工作电压,而且基本上是电流驱动型器件,因此,这种闪光灯不可能通过一两节AA电池,或大多数便携式设备上使用的廉价电池进行驱动。
目前,市面上的白光LED闪光灯通常采用几个白光LED来提高闪光强度,不需要通过AAA电池、扭扣电池或其它专用的高电压锂电池提高能量。通过LED取代白炽灯,虽然我们能够获得非常高的能源利用率,但同普遍使用的AA电池相比,LED闪光灯用电池的单位MaH成本相当高。
很多便携式设备如MP3播放器和PDA的音响系统,均借助于各种商用IC,通过两节电池供电系统为几个串联的白光LED供电。如美国国家半导体公司的LM2705就属于这类升压调节器,专门用以驱动三个串联的白光LED。不幸地是,很多电子玩具专家认为,LM2705采用小型SOT23-5封装,很难安装。其次,LM2705的价格居然高达2.50美元。另外,LM2705还没有闪光功能,只适合用作手电筒。
使用ATTiny12L
如果使用ATTiny12-1PI,情况将大不一样。ATTiny12-1PI是一套基于闪光灯应用的微控制器,采用8个管脚的DIP封装,批量单价仅1.8美元。通过编程,ATTiny12-1PI能够获得同该专用LM2705电源芯片一样的升压功能,其DIP封装很容易焊接到PCB上。虽然它确实需要一个外部NPN晶体管开关器件,该NPN器件已经包含在LM2705里面,但是,ATTiny12-1PI MCU所需要的一些外部被动元件同LM2705所需要的被动元件是一样的,这些元件随手可得,在数量上并没有什么增加。
使用MCU,可以很方便地增加各种闪光功能。在许多情况下,大家需要闪光灯的目的是通知汽车你的存在,因此只要能够在几秒内发出一个锐利的闪光就足够了。闪光模式的占空比低,可以进一步延长电池的使用寿命。如果你的孩子对技术感兴趣,在将成品交给他之前,你还可以向他演示该闪光灯的安装过程!
TinyFlashLED电路采用两节AA电池,通过电源开关S1向TINY12V供电。Tiny12V的PB2端口通过可变占空比的信号,驱动NPN晶体管Q1的基极。当基极信号为高电平时,晶体管导通,并通过电感器L1将电池电压转接到地。当基极信号为低电平时,晶体管关闭,存储在L1中的电流被释放。该能量与电池电压一起,通过二极管D2连接到输出存储电容器C2上。存储在电感器L1上的电压与电池电压之和可以达到10.5V(13mA),足以驱动3个串联白光LED的发光要求。L1的电感值为100μH,并在大约10μs秒钟达到平衡,因此Tiny12V的PB2端口能够提供固定长度为10μs的高电平信号,具体将在后面介绍。
由于L1的充电时间特别短,容量为4μF的MLCC多层陶瓷电容器C1与电池并联,以提供短暂的“升压”。由于肖特基(Schottky)二极管的前向电压降很小,二极管D1应该选用肖特基二极管,因为毕竟我们正在尝试获得更高效率的方法。
与所有LED一样,白光LED也是电流驱动型器件。那就是说,它们具有特定的最大电流值,而不是一个准确的工作电压。工作过程中,在正向电压达到大约3.5V之前,该白光LED一直处于关闭状态。随后,只要电压值稍微超过该电压点,流经它的电流就快速升高;当电流超过规定的最大绝对值时,该LED就会烧毁。
该升压调整器必须检测流经该LED的电流,并依此进行自身调整。具体方法是,让LED上的电流流经一个电阻值为33欧姆的电阻器R3。本设计中,LED的工作电流为13mA,施加于R3的电压为0.43V。该电压被传送到Tiny12V的PB0端口,PB0则是Tiny12V的板上模拟比较器的非反向(noninverting)输入端口。该模拟比较器(PB1)的反向(inverting)输入管脚连接一个由R1和D1组成的“poor-mans”叁考电压源,其中,D1为普通硅二极管,其正向电压降为0.45V。PB3用作取样开关S2的输入端口(上拉电阻很小),而S2为闪光模态开关。
按照有关宣传资料,在此类电路中,LM2705的效率高达80-85%。但是在实际中,本电路所能够获得的效率很一般(接近75%)。因此,笔者不得不改用Zetex ZTX618低Vce-sat脉冲晶体管,这也为设计引入了另外一种电压降。
固件
采用汇编语言编写ATTiny固件。在Port B初始化后,接下来安装定时器(Timer),采用内部时钟/1024作为时钟源。这就提供了一个速率为0.25s的定时溢值(Timer overflow)信号。该定时器只在闪光模态下才用得着,以产生LED脉冲宽度和闪光周期时间信号。
紧随标签LedLight的编码用以控制升压调整器本身。如果LED的电流低於设定点(setpoint),也就是说VR3<0.45V,端口B2就设置成高电平,使Q1导通。随后,Q1将以固定的间隔导通10μs,这已经足以使L1进入饱和状态。此后,Q3将截止大约10μs时间,允许L1将自身的能量释放出来,为输出存储电容器C2充电。如果LED吸收了足够的电流,环路仍将运行,但是Q1的基极驱动信号将保持为低电平,从而将电流限定在设定点附近。
上述环路将使LED点亮大约0.25s,然后返回到编码呼叫状态。在连续模式下,环路将不断地被呼叫。在闪光模态中,环路只在每10个定时溢值周期(大约为2.5s)的时间间隔才呼叫一次。如此间隔使我无法为ATTiny12编写详细的程序。
本文中,我所写的程序是在电脑并口上连接一个简单的编程电缆实现的。其实,这种方法很简单,你完全可以自己动手。AVR编辑器可以从网上找到,而且Atmel自己的ATAVRISP编辑器还不到30美元。另外,在Atmel网站上,AVR汇编器和Studio4 IDE是完全免费的。
性能和结论
在连续模式下,电路环路从新电池那里吸收大约60mA的电流。虽然ATTiny12V-1的标称工作电压低至1.8V,但实际上,当电池电压下降到2.5V以下时,LED就开始变暗。经过推测,1.1V的线路电压实际上对应于1.25V的端接电压,如果采用高质量电池,看起来好像可以获得25小时的连续使用时间。同比较昂贵的AAA电池10小时的预期使用时间相比,你就明白使用AA电池的道理了,更不用说微型扭扣电池的高成本了。
翻译自ATMEL Applications Journal:Building a TinyFlashLED。进一步信息,请访问http://www.atmelonline.com/magazine/pdf/v_5/v_5_pg_41-43.pdf。