由于很多孩子傍晚在街道上騎腳踏車、滑板車和踩溜冰鞋,如果能夠采用某些發光信號來指示他們的存在,則不失為一種有益的安全措施。目前,閃光燈的最新進展是白色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。