嵌入式之Linux的LCD背光調節及驅動的工作原理

在手持式設備中,液晶顯示屏的使用越來越廣泛。由於LCD自身是不能發光的,它需要一個強勁的光源來給它提供背光,以便清晰地顯示信息。這樣的光源是非常耗電的,通常液晶顯示屏的功耗常常佔到系統總功耗的60%以上。以羣創的7寸屏爲例,通常背光燈的功耗爲2.5W,而LCD的功耗只有0.825W。由此可見,背光光源的功耗在整個電源中的比重是相當高的。如果系統在不用顯示屏時,也全功率的運行,系統的電池能量將很快被耗光。所以,調節LCD的背光源,降低系統在不用顯示屏時的能耗是十分必要的工作。

  另外,由於手持式設備工作環境的變化,也需要根據外界光線強度的變化,對背光的亮度做出相應的調節,以適合人眼觀看的舒適度。

  基於上述2種原因,考慮到設備功耗的降低以及使用的便利性,本文在嵌入式Linux下,設計了一種使用S3C2440的定時器產生PWM (Pulse Width Modulation)信號,根據設備實際使用需要,和外界光線強度的變化用按鍵調節LCD背光亮度的解決方案。

  1 基於PWM 的背光調節原理

  在中小尺寸液晶顯示屏中,一般採用白光LED作爲顯示屏的背光光源。PWM 即脈寬調製,PWM 調光就是利用人眼的視覺暫停原理,以一定的頻率和佔空比的方波來控制LED的導通。LED正向電流在零電流到額定工作電流之間來回切換,通過高速開關背光,週期循環地提供不同佔空比的方波,實現亮度的調節。只要導通時LED正向電流大小是恆定的,發出的白光就不會發生色偏,而且只要頻率大幹100Hz,人眼看到的將是連續的光源。

  圖1是脈寬調製信號的波形。假設高電平代表打開背光,低電平代表關閉背光,背光打開和關閉時間的比例不同會得到不同佔空比的方波。從輸出的波形來看,波的平均功率是不一樣的,這樣就得到了不同的亮度,實現了背光的調節。

  圖1 PWM 的波形

  2 背光調節的硬件實現方案

  S3C2440[4]是三星公司推出的一款基於ARM920T內核的16/32位RISC嵌入式微處理器。其內部有5個16位的定時器,其中前4 個定時器(TOUT0~TOUT3)具有PWM 功能,第5個定時器(TOUT4)是一個沒有輸出引腳的內部定時器,另外定時器TOUT0有一個死區發生器,通常用於大電流設備控制。

  PWM 信號可以用硬件產生,也可以由軟件產生。由於用軟件定時產生PWM 信號外圍電路簡單,脈衝寬度精度高,控制靈活,所以本方案用S3C2440的定時器TOUT1,軟件定時產生PWM 信號,通過改變TOUT1端口GPB1輸出脈衝信號佔空比,控制背光的開關。LCD背光調節電路如圖2所示。

  圖2 LCD背光調節電路圖

  圖2中ZXLD1100是一個電感式的PFM(PulseFrequency Modulation)升壓轉換器,用於驅動白光LED.當LCD正常工作時,ZXLD1100的EN 端被置高電平時,輸出端將得到驅動LCD背光源所需的工作電壓。將S3C2440的端口GPB1與ZXLD1100的使能端相連,通過PWM 信號使能ZXLD1100,可以使LCD背光工作在較低的功率下。

  圖2中按鍵S1_KEY用於調高背光亮度,S2_KEY用於調低背光亮度。S1_KEY和S2_KEY所用到的外部中斷分別是EINT0和EINT13.當按鍵按下時,系統根據傳入的按鍵編號控制GPB1輸出PWM 信號佔空比,由此完成了對設備背光的軟件控制,實現背光亮度的調節。

  3 背光調節的軟件設計

  背光調節的軟件部分主要是驅動程序的設計,設備驅動程序是連接硬件和操作系統內核的橋樑,它爲應用程序屏蔽了硬件的細節,應用程序將使用統一的系統調用接口來訪問設備。Linux系統將設備分爲3種基本類型,即字符設備、塊設備和網絡設備。本文涉及的背光驅動屬於字符設備驅動程序。採用Linux作爲嵌入式操作系統,內核版本爲Linux 2.6.32,根文件系統採用Yaffs2,應用程序採用了Busybox.背光驅動程序的工作流程框圖如圖3所示。

  圖3 背光驅動程序工作流程框圖

  (1)當加載驅動時,調用初始化函數s3c_bl_pwm_init()。該函數會調用request_irq()函數來註冊中斷。

  request_irq()會操作中斷描述符數組button_irqs.中斷描述符數組的主要功能是記錄中斷號對應的按鍵編號和GPIO端口。

  (2)當中斷到來時,會到中斷描述符數組button_irqs中查詢中斷號對應的按鍵編號。然後調用中斷處理函數等操作調節設備背光。

  (3)當卸載驅動時,調用退出函數s3c_bl_pwm_exit()。該函數中會調用free_irq(),操作中斷描述符數組button_irqs,釋放設備所使用的中斷號並刪除對應中斷處理函數。

  3.1 背光驅動的初始化和退出函數

  在加載驅動時,內核調用初始化函數s3c_bl_pwm_init()。首先初始化LCD背光亮度,設置按鍵中斷觸發方式,註冊中斷。然後初始化定時器,設置按鍵初始狀態爲擡起(KEY_UP)。最後使用misc_register()向內核註冊混雜設備,混雜設備是字符設備的抽象。背光驅動中混雜設備的定義如下:

  在卸載驅動時,內核調用退出函數s3c_bl_pwm_exit(),註銷中斷和混雜設備,完成和初始化函數相反的行爲。

  3.2 按鍵中斷和定時器處理程序

  當按鍵被按下後,將發生快速中斷,觸發中斷處理程序buttons_interrupt()。在中斷處理程序中,當按鍵初始狀態爲擡起(KEY_UP)時,把按鍵狀態設置爲不確定(KEY_DOWNX),然後啓動定時器延時去抖,進入定時器處理函數。如果當前按鍵初始狀態不是擡起則退出中斷處理程序。在定時器處理程序中,讀取按鍵GPIO端口電平,查詢按鍵是否仍然被按下。如果按鍵仍被按下且按鍵狀態是不確定(KEY_DOWNX),則標識當前按鍵狀態爲按下(KEY_DOWN)。同時延時一個相對去抖更長的時間,啓動一個新的定時器,每次定時器到期後,查詢按鍵是否仍然被按下且按鍵狀態爲按下(KEY_DOWN),如果是,則重新啓動新的定時器;若查詢到已經沒有按下,則標識按鍵狀態爲擡起,這時候應該等待新的按鍵中斷。每次標識按鍵狀態爲按下(KEY _DOWN)時,應該調用背光調節函數bl_handler()依據傳入的按鍵編號調節背光亮度。按鍵中斷和定時器處理函數的流程如圖4所示。

  圖4 按鍵中斷和定時器處理函數的流程圖

  3.3 PWM 設置函數

  PWM 定時器中有2個寄存器TCNTBn和TCMPBn,分別爲定時器計數緩存寄存器和定時器比較緩存寄存器[10].TCNTBn用來設置PWM 輸出脈衝頻率,TCMPBn的值用於設置PWM 信號佔空比。因此通過寫入不同的TCMPBn的數值,就可以調節輸出信號佔空比,實現PWM 功能,即:要減小PWM 的脈寬,則要減小TCMPBn值,相反要增大PWM 的脈寬,則要增大TCMPBn.如果使用了反相器,則增大和減小的結果相反,雙緩衝特性允許定時器在工作時改寫TCMPBn的值。

  PWM 設置函數pwm_set_duty()根據傳入參數改寫TCMPBn的值,可以實時地改變輸出波形。PWM設置函數設置定時器TOUT1端口GPB1的PWM 功能操作步驟如下:

  (1)使能系統PCLK 時鐘源,獲取總線時鐘頻率值。設置定時器TOUT1的時鐘預分頻值和分頻值,分別寫入定時器配置寄存器TCFG0和TCFG1;(2)寫入初始值到比較緩存寄存器TCMPB1和計數緩存寄存器TCNTB1;(3)設置定時器控制寄存器TCON.使能定時器TOUT1的自動重載位,關閉反相器,開啓手動更新位,啓動定時器TOUT1.在定時器延時等待一定時間後定時器的下降計數器開始計數;(4)清除定時器TOUT1的手動更新位,手動更新位必須在下次寫前被清除。

  4 測試結果與分析

  將驅動程序編譯後加載到內核測試,設定PWM 輸出頻率爲200Hz,高電平比例爲1/3的波形,通過示波器看到GPB1端口所輸出波形如圖5所示。

  圖5 GPB1輸出波形

  通過測試,可以得到如表1所示的該手持式設備功耗與背光亮度相關的數據。

  表1 系統不同背光亮度的功耗對比表

  從表1中可以看出背光亮度等級越低,系統的功耗越小。所以,在該設備使用時,在環境允許的條件下,可以降低背光亮度等級,以減少功耗。本文的背光驅動程序爲背光調節提供了7級的亮度控制。在實際使用的過程中,設置1/3的亮度即可,只有在特殊的場合才需要設置爲高亮。在LCD不工作的時候,可以調低或者關閉背光,這樣可以大大節省能耗。在應用時,爲了確保人眼看不到LED週期亮滅的情況,以獲得視覺上的滿意效果,PWM 輸出的頻率一般在設置在100~300Hz之間比較合適,否則會給人閃爍的感覺。

  5 結 語

  本文在嵌入式Linux下,設計了一種基於PWM 調節LCD背光的軟硬件實現方案。本方案與普通的線性調光相比,更符合人們對LED調光精度、效率以及效果的要求,同時可以降低系統功耗並能滿足手持式設備調節背光的要求,該方案已經在一款手持設備產品上得到了應用。在實際應用中,爲了防止當PWM 頻率落在200~20kHz之間時,LED驅動電路的電感和電容產生人耳聽得見的噪聲,可以根據需求,增加成本,用高耐壓的鉭電容代替陶瓷電容;還可以犧牲調光精度,把開關頻率提高到20kHz以上,跳出人耳聽覺的範圍。

相關閱讀
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章