1 引言
LED 的發展已過了幾十年了,它現在的技術也相當成熟了。它有很寬的可視角,并且能夠 顯示圖像、數字、視頻,還能夠通過紅綠籃三種LED 組合成任一顏色系統,但是不推薦在 小顯示屏上顯示視頻。典型應用是在商場、高速公路、大型體育場和白天日照下的舞臺。
我們都知道,由PN 結構成的LED 需要用直流電源驅動發出其顏色,改變通過PN 結上 的電流達到顯示顏色亮度的變化。每個顯示板上的LED 都是被恒流源產生的可控電流單獨 直接控制,雖然一個LED 顏色灰度容易產生,但是大量LED 組成的LED 顯示屏就需要一個 非常復雜的控制系統來控制。本文的目的是實現這個基于FPGA 的具有高刷新率的全彩LED 顯示控制系統。本文介紹了LED 顯示系統中三基色發光管同時產生灰度的工作原理,也描述 了基于FPGA 的 LED 顯示系統模型在細節上的實現。
2 LED 顯示面板的工作原理
根據驅動 LED 的工作原理LED 顯示屏有靜態、虛擬、掃描之分,那么對應的LED 顯示控制系統也不同。本文介紹的是適合掃描屏的LED 控制系統。
目前,許多LED 顯示面陣板是利用8*8 的LED 矩陣塊拼接起來,這有益于PCB 的設 計和節省空間,在本文的研究中就是使用這樣的LED 面陣板[3]。如圖1 所示,由8 塊8*8 的矩陣塊組成,三色LED 點陣利用每行的陰極作為公共端,行的選通是通過3-8 譯碼器驅 動NPN 三極管來控制的,并且任一時刻只有一行被Ri 選通;每列有3 路輸入信號Rc、Gc、 Bc 分別單獨控制每列的紅、綠、藍LED,每種顏色有8 個8 位移位寄存器(74HC595)提 供恒流去控制列。為了便于讀圖,在圖中沒畫出LED 和驅動芯片間的限流電阻。
很明顯,能得到的顏色值僅僅是紅、綠、藍三種顏色組成的,顏色灰度實際上是依靠改 變顏色亮度值產生的,顏色亮度的控制是通過驅動LED 像素點在一周期內總的導通時間來 決定的。為了產生顏色灰度需要對LED 像素值進行重新分配,這需要在控制系統里實現對 同一位面的數據進行組合,然后發送到LED 面陣板。
LED 顯示屏為了獲得更高的亮度等級,顯示控制器必須能夠在一個可接受的周期內刷 新整個LED 屏,如果這個不能達到,閃變效應就會影響觀眾。微處理器和微控制器在普通 的控制方面是很強的芯片,但是它不太適合控制帶合適亮度等級和高刷新率的LED 顯示屏。 所以使用基于可編程邏輯器件的控制器來實現是一個很好的選擇 [4]。
如圖 2 所示的結構,LED 顯示控制由器由LEDINTERFACE、BUFFERUPDATA 和 VIDEORAM 模塊組成[5]。LEDINTERFACE 和BUFFERUPDATA 兩個模塊共用一個SRAM 存儲器,它類似于一雙通道存儲器。以下幾個部分詳細說明這幾個模塊。
3.1 LEDINTERFACE 模塊
LEDINTERFACE 模塊是負責控制圖1 所示的LED 點陣的顏色顯示,如圖3 所示為 LEDINTERFACE 模塊的狀態機的狀態圖。它能夠很方便的表現狀態轉換和數據流動,最重 要的是一個狀態圖能夠簡單的修改成VHDL 程序。
從這圖中看出,LEDINTERFACE 模塊的初始化狀態是INIT_SIGNALS,它初始化所有 涉及到LED 顯示屏上的信號,然后準備轉換到SET_PIXEL_ADDRESS 狀態,這個狀態計 算輸出數據緩沖器中的地址(VIDEORAM 的地址),在READ_PIXEL 狀態讀出數據。注意, READ_PIXEL 不僅是取數據而且決定當前的LED 狀態是否需要去置位或清除有關像素數據 的亮度值和當前位面。READ_PIXEL 狀態利用一個PIXCOLOR 表,如表1 所示,這個表存 儲的是像素顏色值和亮度的關聯數據。用作重新得到LED 狀態的參量是像素數據DataR、 DataG、DataB、Plane,在不增加顯示緩沖區的情況下,把一個像素的顏色值直接轉換成LED 的亮度等級,不僅是一個簡單的方法,而且相比較以前的方法能減少硬件復雜度和存儲器的 使用。
下面舉一像素顏色轉換的例子,說明這個方法的工作過程。例如首先位面值是‘0’,1 個點的像素值是是(4,0,2),分別是RED,GREEN,BLUE,在READ_PIXEL 期間,這 些像素值同時從VIDEORAM 中取出存到DataInR,DataInG,DataInB,再通過查表1 可以 得到,位面值為‘0’時的LED 狀態(RI,GI,BI)即第PIXCOLORE 第一位(1,0,1); 位面值是‘1’時即第二位(1,0,1);位面值‘3’時即第三位(1,0,0)。很顯然,32 個位面值都取完后,這個像素點的RGB 發光管在這個周期的導通時間分別是4/32,0/32, 2/32,實際上由于LED 面板是1/8 掃描的,RGB 發光管的導通時間分別是4/256,0/256, 2/256,這個過程產生了LED 的不同灰度[6]。
一旦 R、G、B 狀態定下來,狀態機的下兩個狀態ACTIVE_CLK 和INACTIVE_CLK 把 RDi、GDi、BDi 里的數據移位到LED 面板上,這些操作被重復直到當前所有LED 數據分 配完,重復次數由一個計數器控制,計數器的最大值是LED 面板每行的LED 數。
當一行所有的 LED 數據分配完成后,狀態機進入OUT_ROW_BUS 狀態,激活LED 顯 示面板的當前行,并更新cROW 指向下一行,DELAY 狀態是為了能夠在退出更新狀態以前, 在掃描延時的控制下使能行一段周期。多路掃描速率由SCAN_DELAY 控制,在更新行期間 (cROW=cROW+1),如果cROW 小于8,則繼續回到SET_PIXEL_ADDRESS 狀態開始掃描 下一行。另外,,如果8 行全部掃描完成,它將進到ADVANCE_PLANE 狀態。從這個狀態 圖可以看出,顏色位面是32 個,總共能夠顯示的顏色是32*32*32=32768 色。
3.2 BUFFERUPDATA 模塊
BUFFERUPDATA 模塊是作視頻源信號和VIDEOSRAM 的接口部分。BUFFERUPDATA 設計了只接收24 位RGB 數據格式的信號,這種格式的信號可以很容易的從標準的視頻源 信號轉換過來,且這種轉換模塊需要帶數據緩沖區。
除了24 位顏色數據總線,BUFFERUPDATA 模塊還增加了2 個信號:RDB_FULL 和 RGB_RD。RGB_FULL 是指示RGB 視頻源緩沖區中至少有一個像素值可以讀取, BUFFERUPDATA 模塊去使能RGB_RD 信號,然后通過24 位數據總線去讀取視頻源緩沖區 中的值。如圖3 所示,用有限狀態機來描述這個模塊。
從圖 3 可以看出,這個BUFFERUPDATA 模塊的初始狀態是IDLE,所有有關信號都在 這個狀態被初始化,并且檢測RGB_FULL 信號狀態;從IDLE 狀態到ACF_RD 是通過 RGB-FULL 信號來激勵的;在ACT_RD 和INACT_RD 狀態為了得到RGB 數據強制 BUFFERUPDATA 模塊產生RGB-RD 信號。RGB-RD 有效的時間是DELAY 的值來控制的, DELAY 的值是在ACD-RD 狀態重復的時鐘周期數。
接收完數據后,BUFFERUPDATA 模塊沒有立即把數據存到VIDEORAM 中,而是檢查 MemBusy 信號的狀態,為了保證VIDEORAM 模塊可操作,即沒有被LEDINTERFACE 模 塊占用;當MemBusy 信號無效時,BUFFERUPDATA 模塊就把得到的RGB 數據存到相應 的VIDEORAM 地址中,每個像素值的讀取/存儲過程的最終狀態是回到IDLE 狀態。
3.3 VIDEORAM 模塊的結構
前面提到,VIEDORAM 模塊是LEDINTERFACE 模塊和BUFFERUPDATA 模塊和共用 模塊。實際上一個雙端口RAM 是很容易得到的,這個模塊可能使用一個靜態RAM 來實現。
在FPGA 里只需綜合相對簡單的SRAM 的接口模塊和另外兩個模塊,這個接口模塊即 VIDEORAM 模塊,事實上這不是一個真正的雙端口模塊。如圖4 所示為VIDEORAM 內部 結構圖。很容易看出,這個模塊由以下幾個部分組成:一個2 選1 的8 位地址選擇器、一個 24 位雙向三態數據總線,一個2 選1 的Wr 信號選擇器。
4 FPGA 的功能實現
FPGA內部寄存器資源比較豐富,適合做同步時序電路較多的設計。FPGA是選用Xilinx 公司的有5萬門的XC2S50,它有1728個邏輯單元(LC),384 個可配置邏輯快( CLB) , 32Kbit 的塊RAM, 176 個可用的I/O 口。以上的幾個功能模塊都是在Xilinx 的ISE 平臺上實現的, 三個模塊共消耗62%的資源[7]。
5 結束語
提出了一種基于FPGA 的LED 掃描屏控制系統的實現方案,通過 硬件和軟件的輔助設計,完全實現了對LED 顯示屏的掃描控制。基于FPGA 的硬件設計大 大降低了電路系統的復雜性,提高了整個系統的開發效率。
-
FPGA
+關注
關注
1629文章
21736瀏覽量
603421 -
led
+關注
關注
242文章
23277瀏覽量
660895 -
芯片
+關注
關注
455文章
50816瀏覽量
423674
發布評論請先 登錄
相關推薦
評論