基于嵌入式Linux的LCD背光調節及驅動(dòng)實(shí)現
在手持式設備中,液晶顯示屏的使用越來(lái)越廣泛。由于LCD自身是不能發(fā)光的,它需要一個(gè)強勁的光源來(lái)給它提供背光,以便清晰地顯示信息。這樣的光源是非常耗電的,通常液晶顯示屏的功耗常常占到系統總功耗的60%以上。以群創(chuàng )的7寸屏為例,通常背光燈的功耗為2.5W,而LCD的功耗只有0.825W。由此可見(jiàn),背光光源的功耗在整個(gè)電源中的比重是相當高的。如果系統在不用顯示屏時(shí),也全功率的運行,系統的電池能量將很快被耗光。所以,調節LCD的背光源,降低系統在不用顯示屏時(shí)的能耗是十分必要的工作。
另外,由于手持式設備工作環(huán)境的變化,也需要根據外界光線(xiàn)強度的變化,對背光的亮度做出相應的調節,以適合人眼觀(guān)看的舒適度。
基于上述2種原因,考慮到設備功耗的降低以及使用的便利性,本文在嵌入式Linux下,設計了一種使用S3C2440的定時(shí)器產(chǎn)生PWM (Pulse Width Modulation)信號,根據設備實(shí)際使用需要,和外界光線(xiàn)強度的變化用按鍵調節LCD背光亮度的解決方案。
1 基于PWM 的背光調節原理
在中小尺寸液晶顯示屏中,一般采用白光LED作為顯示屏的背光光源。PWM 即脈寬調制,PWM 調光就是利用人眼的視覺(jué)暫停原理,以一定的頻率和占空比的方波來(lái)控制LED的導通。LED正向電流在零電流到額定工作電流之間來(lái)回切換,通過(guò)高速開(kāi)關(guān)背光,周期循環(huán)地提供不同占空比的方波,實(shí)現亮度的調節。只要導通時(shí)LED正向電流大小是恒定的,發(fā)出的白光就不會(huì )發(fā)生色偏,而且只要頻率大干100Hz,人眼看到的將是連續的光源。
圖1是脈寬調制信號的波形。假設高電平代表打開(kāi)背光,低電平代表關(guān)閉背光,背光打開(kāi)和關(guān)閉時(shí)間的比例不同會(huì )得到不同占空比的方波。從輸出的波形來(lái)看,波的平均功率是不一樣的,這樣就得到了不同的亮度,實(shí)現了背光的調節。
圖1 PWM 的波形
2 背光調節的硬件實(shí)現方案
S3C2440[4]是三星公司推出的一款基于A(yíng)RM920T內核的16/32位RISC嵌入式微處理器。其內部有5個(gè)16位的定時(shí)器,其中前4 個(gè)定時(shí)器(TOUT0~TOUT3)具有PWM 功能,第5個(gè)定時(shí)器(TOUT4)是一個(gè)沒(méi)有輸出引腳的內部定時(shí)器,另外定時(shí)器TOUT0有一個(gè)死區發(fā)生器,通常用于大電流設備控制。
PWM 信號可以用硬件產(chǎn)生,也可以由軟件產(chǎn)生。由于用軟件定時(shí)產(chǎn)生PWM 信號外圍電路簡(jiǎn)單,脈沖寬度精度高,控制靈活,所以本方案用S3C2440的定時(shí)器TOUT1,軟件定時(shí)產(chǎn)生PWM 信號,通過(guò)改變TOUT1端口GPB1輸出脈沖信號占空比,控制背光的開(kāi)關(guān)。LCD背光調節電路如圖2所示。
圖2 LCD背光調節電路圖
圖2中ZXLD1100是一個(gè)電感式的PFM(PulseFrequency Modulation)升壓轉換器,用于驅動(dòng)白光LED.當LCD正常工作時(shí),ZXLD1100的EN 端被置高電平時(shí),輸出端將得到驅動(dòng)LCD背光源所需的工作電壓。將S3C2440的端口GPB1與ZXLD1100的使能端相連,通過(guò)PWM 信號使能ZXLD1100,可以使LCD背光工作在較低的功率下。
圖2中按鍵S1_KEY用于調高背光亮度,S2_KEY用于調低背光亮度。S1_KEY和S2_KEY所用到的外部中斷分別是EINT0和EINT13.當按鍵按下時(shí),系統根據傳入的按鍵編號控制GPB1輸出PWM 信號占空比,由此完成了對設備背光的軟件控制,實(shí)現背光亮度的調節。
3 背光調節的軟件設計
背光調節的軟件部分主要是驅動(dòng)程序的設計,設備驅動(dòng)程序是連接硬件和操作系統內核的橋梁,它為應用程序屏蔽了硬件的細節,應用程序將使用統一的系統調用接口來(lái)訪(fǎng)問(wèn)設備。Linux系統將設備分為3種基本類(lèi)型,即字符設備、塊設備和網(wǎng)絡(luò )設備。本文涉及的背光驅動(dòng)屬于字符設備驅動(dòng)程序。采用Linux作為嵌入式操作系統,內核版本為L(cháng)inux 2.6.32,根文件系統采用Yaffs2,應用程序采用了Busybox.背光驅動(dòng)程序的工作流程框圖如圖3所示。
圖3 背光驅動(dòng)程序工作流程框圖
?。?)當加載驅動(dòng)時(shí),調用初始化函數s3c_bl_pwm_init()。該函數會(huì )調用request_irq()函數來(lái)注冊中斷。
request_irq()會(huì )操作中斷描述符數組button_irqs.中斷描述符數組的主要功能是記錄中斷號對應的按鍵編號和GPIO端口。
?。?)當中斷到來(lái)時(shí),會(huì )到中斷描述符數組button_irqs中查詢(xún)中斷號對應的按鍵編號。然后調用中斷處理函數等操作調節設備背光。
?。?)當卸載驅動(dòng)時(shí),調用退出函數s3c_bl_pwm_exit()。該函數中會(huì )調用free_irq(),操作中斷描述符數組button_irqs,釋放設備所使用的中斷號并刪除對應中斷處理函數。
3.1 背光驅動(dòng)的初始化和退出函數
在加載驅動(dòng)時(shí),內核調用初始化函數s3c_bl_pwm_init()。首先初始化LCD背光亮度,設置按鍵中斷觸發(fā)方式,注冊中斷。然后初始化定時(shí)器,設置按鍵初始狀態(tài)為抬起(KEY_UP)。最后使用misc_register()向內核注冊混雜設備,混雜設備是字符設備的抽象。背光驅動(dòng)中混雜設備的定義如下:
在卸載驅動(dòng)時(shí),內核調用退出函數s3c_bl_pwm_exit(),注銷(xiāo)中斷和混雜設備,完成和初始化函數相反的行為。
3.2 按鍵中斷和定時(shí)器處理程序
當按鍵被按下后,將發(fā)生快速中斷,觸發(fā)中斷處理程序buttons_interrupt()。在中斷處理程序中,當按鍵初始狀態(tài)為抬起(KEY_UP)時(shí),把按鍵狀態(tài)設置為不確定(KEY_DOWNX),然后啟動(dòng)定時(shí)器延時(shí)去抖,進(jìn)入定時(shí)器處理函數。如果當前按鍵初始狀態(tài)不是抬起則退出中斷處理程序。在定時(shí)器處理程序中,讀取按鍵GPIO端口電平,查詢(xún)按鍵是否仍然被按下。如果按鍵仍被按下且按鍵狀態(tài)是不確定(KEY_DOWNX),則標識當前按鍵狀態(tài)為按下(KEY_DOWN)。同時(shí)延時(shí)一個(gè)相對去抖更長(cháng)的時(shí)間,啟動(dòng)一個(gè)新的定時(shí)器,每次定時(shí)器到期后,查詢(xún)按鍵是否仍然被按下且按鍵狀態(tài)為按下(KEY_DOWN),如果是,則重新啟動(dòng)新的定時(shí)器;若查詢(xún)到已經(jīng)沒(méi)有按下,則標識按鍵狀態(tài)為抬起,這時(shí)候應該等待新的按鍵中斷。每次標識按鍵狀態(tài)為按下(KEY _DOWN)時(shí),應該調用背光調節函數bl_handler()依據傳入的按鍵編號調節背光亮度。按鍵中斷和定時(shí)器處理函數的流程如圖4所示。
圖4 按鍵中斷和定時(shí)器處理函數的流程圖
3.3 PWM 設置函數
PWM 定時(shí)器中有2個(gè)寄存器TCNTBn和TCMPBn,分別為定時(shí)器計數緩存寄存器和定時(shí)器比較緩存寄存器[10].TCNTBn用來(lái)設置PWM 輸出脈沖頻率,TCMPBn的值用于設置PWM 信號占空比。因此通過(guò)寫(xiě)入不同的TCMPBn的數值,就可以調節輸出信號占空比,實(shí)現PWM 功能,即:要減小PWM 的脈寬,則要減小TCMPBn值,相反要增大PWM 的脈寬,則要增大TCMPBn.如果使用了反相器,則增大和減小的結果相反,雙緩沖特性允許定時(shí)器在工作時(shí)改寫(xiě)TCMPBn的值。
PWM 設置函數pwm_set_duty()根據傳入參數改寫(xiě)TCMPBn的值,可以實(shí)時(shí)地改變輸出波形。PWM設置函數設置定時(shí)器TOUT1端口GPB1的PWM 功能操作步驟如下:
?。?)使能系統PCLK 時(shí)鐘源,獲取總線(xiàn)時(shí)鐘頻率值。設置定時(shí)器TOUT1的時(shí)鐘預分頻值和分頻值,分別寫(xiě)入定時(shí)器配置寄存器TCFG0和TCFG1;(2)寫(xiě)入初始值到比較緩存寄存器TCMPB1和計數緩存寄存器TCNTB1;(3)設置定時(shí)器控制寄存器TCON.使能定時(shí)器TOUT1的自動(dòng)重載位,關(guān)閉反相器,開(kāi)啟手動(dòng)更新位,啟動(dòng)定時(shí)器TOUT1.在定時(shí)器延時(shí)等待一定時(shí)間后定時(shí)器的下降計數器開(kāi)始計數;(4)清除定時(shí)器TOUT1的手動(dòng)更新位,手動(dòng)更新位必須在下次寫(xiě)前被清除。
4 測試結果與分析
將驅動(dòng)程序編譯后加載到內核測試,設定PWM 輸出頻率為200Hz,高電平比例為1/3的波形,通過(guò)示波器看到GPB1端口所輸出波形如圖5所示。
圖5 GPB1輸出波形
通過(guò)測試,可以得到如表1所示的該手持式設備功耗與背光亮度相關(guān)的數據。
表1 系統不同背光亮度的功耗對比表

評論