陳 俊,唐小琦,周會成
(華中科技大學 機械科學與工程學院,武漢 430074)
隨著液晶技術的日益成熟,目前液晶顯示器已經具有輕薄,低功耗,壽命長,接口方便的特點[1],液晶顯示器在顯示技術中已經得到了越來越廣泛的運用。基于MCU 的屏幕驅動方法在使用上較靈活,但一般只適用于小尺寸的屏幕。例如Samsung 公司的S3C2440 內部就集成了一個液晶控制器,但最大只支持640X480的分辨率[2],如果驅動更高分辨率更大尺寸的液晶屏幕時,會使得CPU 的負載過重,造成屏幕刷新困難,甚至出現閃屏,花屏的現象。以前大尺寸屏幕的驅動都由專門的集成電路實現[3],靈活性差。而現在使用FPGA 作為接口可以驅動VGA 接口的屏幕,幀速度可以達到60HZ[4]。目前工業領域大尺寸顯示屏的需求越來越大,在不便更換系統處理器平臺而需要驅動大屏幕的情況下,可以基于ARM+FPGA 這種架構,ARM負責將數據經由FPGA 寫入外接的顯存,而將屏幕數據刷新的工作交由FPGA 屏幕驅動模塊來處理,這樣可以極大的減輕CPU 的負擔,從而實現了大尺寸,高分辨率顯示器的顯示控制。FPGA 可以既作為大尺寸屏幕的驅動接口,也可以同時添加系統所需要IO,脈沖,編碼器AD/DA 等接口,有效節省開發時間。
顯示控制器主要由FPGA,顯存,驅動電壓產生電路,以及液晶屏幾部分組成[5],如圖1。其中FPGA 接受從ARM 發送的屏信號,經過處理后驅動液晶屏幕,而驅動電壓模塊產生TFT 液晶屏顯示所需要的電壓,以及接受FPGA 發送的PWM 脈沖來調整屏幕亮度。

圖1 顯示控制器組成圖
由于高分辨率,多位色顯示的屏幕顯示需要的數據較大,FPGA 本身的數據存儲能力不強,因此需要專門的顯存來實現對數據的緩存[6]。采用SRAM 作為顯示,操作很是方便,但會給成本帶來很大的壓力,于是在本文的設計中選擇了SDRAM 作為液晶的顯存。但是需要在FPGA 內部設計一個SDRAM 控制器來實現對SDRAM 的讀、寫、刷新,預充電操作等[7]。其中ARM 與FPGA 的數據位為32 位寬,如果采用64K 色(16BPP)模式,一個4 字節的數據可以表示2 個像素。
實現液晶屏幕的圖像顯示,需要向液晶屏提供包括AVDD,VGH,VGL,Vcom、背光電源VLED +和VLED -以及邏輯電源等多組電源[8]。為了使本文設計的驅動器能夠適用于不同型號的液晶屏幕,我們采用了TI 公司的電源管理芯片TPS65150 來提供所需要的AVDD,VGH,VGL,Vcom;以及TPS61166 來提供背光電壓VLED+和VLED-。圖2 為電源模塊的原理框圖。

圖2 系統電源模塊
液晶顯示器對于上電,下電時序有著嚴格的要求,如果上電,下電時序不符合要求,常常會出現亂碼,鎖存等現象[9]。TPS65150 能夠調整電壓上電順序,使其符合相應液晶屏的上電時序要求。經過測試,表明電路能夠有效的控制上電順序,無亂碼,鎖存等現象。
在FPGA 內部有一個PWM 生成模塊,通過接受CPU 發送的數據,以控制背光電壓的輸出,來實現液晶屏幕亮度的調節。當PWM 波的頻率為零時,即可關斷背光芯片的工作,使屏幕進入節能狀態。
FPGA 內部功能的設計是實現液晶屏幕正確顯示的關鍵,主要分為總線控制模塊和驅動控制模塊[10]。其中總線控制模塊主要包括幀的片選,幀的地址產生以及幀的讀寫控制模塊;而驅動控制模塊主要包括屏顯時序控制模塊和屏顯數據產生模塊。如圖3。
圖3 為ARM 與FPGA 的讀寫控制模塊,在ARM寫之前,需要和FPGA 有一個“握手”信號,以便知道現在是否可以對FPGA 進行數據的寫入。當數據寫入時,數據先暫存入FIFO 模塊,然后SDRAM 控制模塊將數據進行轉換后,根據寫地址發生器生成的地址信號,按照一定的寫時序將數據寫入顯存。當數據讀出時,根據讀地址發生器的地址信號,將數據讀入灰度值發生器,最后由串行數據發生器將讀取的并行數據轉換成液晶屏顯示所需要的串行數據送出。
解決SDRAM 分時讀寫的關鍵是ARM 發出的控制信號,和FPGA 產生的控制時序信號并完成總線仲裁邏輯。當一屏的數據刷新完成之后,通知ARM 寫入新的數據,此時SDRAM 切換到寫模式狀態,等待接收ARM 寫入的新數據,ARM 接管SDRAM 的控制權,此時ARM 發送的數據根據寫地址發生器的地址經數據總線傳送。數據寫入完成后,SDRAM 切換為讀使能信號,ARM 釋放SDRAM 的控制權,不再寫入新數據,使其處于等待狀態,等待FPGA 讀取數據信號。

圖3 FPGA 顯示控制模塊
TM080SDH01 -00 的點時鐘的典型值是40M,幀掃描時序以HSYN 為基準時鐘,其中,HSYN 為行掃描信號,VSYN 為幀同步信號,低電平有效。每掃描完一幀(600 行),VSYN 信號有效,有效寬度為3 個VSYN(TVPW)。在VSYN 有效之前,VSYN 之前插入21 個HSYN 的幀消隱前肩,有效之后插入36 個幀消隱后肩,這樣幀掃描信號相當于對HSYN 進行660 分頻[11]。VSYN 時序圖如圖4。

圖4 幀掃描時序圖
同樣,HSYN 以CLK 為基準進行1000 分頻,其中有效點數為每行800 點,信號有效時間為48 個CLK,行前插入消隱時間為112CLK。
使用quartus ii 進行設計工具,并用VHDL 語句編寫各個模塊,最后進行仿真實驗,ARM 通過32 位DATA 將圖像數據寫入FPGA,FPGA 經過處理后產生16位像素數據,最后得到灰度值RGB,如圖5。可以發現ARM 寫入的第一個數據位8421FEDC,經過FPGA 處理后得到兩個像素的數據,分別問8421 和FEDC,最后每個16 位的數據依據色彩5∶6∶5的格式,得到了兩組RGB 的數據,經過分析可以發現得到的兩組RGB的數據就是ARM 寫下來的數據,從而驗證了程序設計的正確性。

圖5 FPGA 讀寫仿真波形圖
最后在ARM 上裝載有界面顯示的應用程序運行后,左邊的圖由于FPGA 驅動控制模塊的HSYN 和VSYN 沒有嚴格按照液晶屏的數據來,可以看到圖像向左上方有一定的偏移。經過調試參數過后,可以發現在屏幕上已經得到了正確的圖像輸出。如圖6 實驗中所使用的屏幕的分辨率為800 ×600,嵌入式系統在復雜的加工代碼計算下仍能夠很穩定的驅動屏幕的顯示,驗證了該方法的有效性。而且通過調整FPGA 程序內部的相應的參數,修改相應的時序和顯存數據位,最后驗證該FPGA 模塊能夠有效驅動天馬公司的TM097TDH01,分辨率為1024 ×768,9.7 寸液晶顯示屏,大大的提升了系統所能驅動液晶屏的能力,并且完全能夠滿足目前絕大部分工業領域的顯示需要。

圖6 嵌入式數控系統
本文提出了一種基于ARM +FPGA 的大尺寸液晶屏驅動方法,并且通過在FPGA 里面實現SDRAM的讀寫時序控制,以及讀寫總線仲裁,采用了單片SDRAM 作為顯存,有效的減少了經濟成本。最后在嵌入式系統中得到了實現和應用,證明了該方法能夠有效的緩解ARM 的運行壓力,并解決了系統運行時運行速度,尋址能力以及功耗等問題,從而支持更大區域的穩定顯示,以及更加豐富的色彩顯示。
[1]盛磊,徐科軍,照明,陳智淵,液晶顯示驅動板的設計與實現[J].電視技術,2005(2):53 -55.
[2]韋東山.嵌入式Linux 應用開發完全手冊[M]. 北京:人民郵電出版社,2008.
[3]Shihong Qin,Huanhuan Li,Kai Chen. The Design of Large Screen Display Control System Based on FPFA[C]. Proceedings of the 8~(th)International Symposium on Distributed Computing and Applications to Business,Engineering and Science.2009,173 -174.
[4]Zhang Wenai,Zhang Bo,Chen Yongqian. Implementation of Bilinear CFA Interpolation and VGA Display Controller Based on FPGA[J]. Chinese Journal of Liquid Crystals and Displays,2008(1):1284 -1287.
[5]李維緹,郭強.最新液晶顯示應用[M].北京:電子工業出版社,2006.
[6]劉晶,賈銀亮. 基于FPGA 的液晶驅動電路設計[J]. 金陵科技學院學報,2009,25(3):26 -28.
[7]王言榮.基于FPGA 液晶控制器設計與實現[D]. 杭州:浙江大學,2006.
[8]高潮. TFT 液晶顯示器驅動電路與電源優化設計方法[J].深圳信息職業技術學院學報2007,5 (2):14 -18.
[9]張超建,王厚軍. 基于FPGA 的TDT-LCD 液晶顯示模塊設計[J].中國測試,2010,36(5):73 -75.
[10]Liang Zhiming,Li Bin. Design of scan controller in large LED screen based on FPGA circuit[J]. Chinese Journal of Liquid Crystals and Displays ,2007,22(4):477 -481.
[11] Shanghai AvicOptoelectronics. TM080SDH01 - 00 Data sheet[Z].2010:11 -12.