一文搞懂HUB75接口(附帶LED單元板驅(qū)動介紹)
導讀:HUB75接口是一種常用的LED單元板驅(qū)動接口,本文就常見的HUB75接口知識點進行整理。
一、HUB75 接口介紹
上圖中有 A/B/C/D 4根地址線,所以是16掃( 2 4 = 16 2^4=16 24=16)
上圖所示HUB75接口,有兩個RGB通道,共占用6個IO(R1/R2/G1/G2/B1/B2)。剩下的 A/B/C/D/E 為地址通道,LAT為行數(shù)據(jù)鎖存通道,CLK為數(shù)據(jù)時鐘,OE為低電平使能LED顯示。圖片這里沒有E,證明它是16掃的,有E就會把B上面的地改為E,如下圖所示。這樣就是5位,2的5次方32掃。16掃控制16行顯示(16行中顯示一行),共2個RGB通道所以16掃可以控制 16*2=32行 顯示(32行同時顯示2行,比如第1行和第16行…第15行和第31行,所以是2/32掃,即1/16掃)。
(1)單元板的顯示為單位時間內(nèi)顯示一行數(shù)據(jù),然后短時間內(nèi)切換到另一行顯示,16掃,即一個顯示周期為切換16次。
(2)兩個RGB通道分別控制上下兩部分的RGB燈。舉例 32*16 的LED燈屏,需要4個地址ABCD,假設(shè)ABCD,4個IO為高電平意味著選定第15行跟第31行,R1/G1/B1通道數(shù)據(jù)被寫到第15行,R2/G2/B2數(shù)據(jù)被寫到第31行。
(3)【???】數(shù)據(jù)的寫入順序:失能LED顯示,寫入一行數(shù)據(jù),選定行,鎖存,使能LED顯示。
(4)全彩顯示:顏色漸變。方法是同一行掃描32次,假設(shè)R1我只顯示一次,那它占空比就是1/32,顯示次數(shù)越多越來亮。
上圖中有 A/B/C/D/E 5根地址線,所以是32掃( 2 5 = 32 2^5=32 25=32)
二、一款 8x8 LED 單元板介紹(2R1G)
單元板外觀:
注:LED單元板上通常沒有存儲,所以需要FPGA快速刷新以顯示圖像!
單元板HUB75接口:
單元板點亮順序:
單個單元板,一共8行,可同時點亮2行,故為1/4掃。
控制時序:
三、一款 64x64 LED 單元板介紹(RGB)
單元板外觀:
單元板HUB75接口:
它具有2個R/G/B數(shù)據(jù)輸入引腳,5個地址引腳和3個控制引腳(時鐘,鎖存器和使能)。故仍然還是32掃,通過同時控制兩行的方式實現(xiàn)64行控制,即2/64=1/32掃。
【???】控制時序:(以上半部分32行為例,下半部分自動匹配上半部分選中的行)
1.使用5個地址字節(jié)選擇要顯示的行,從32行中選擇1行。
2.通過將Blank管腳設(shè)為高電平來關(guān)閉顯示器,這可以防止故障。【或者說消隱!】
3.使用Clock引腳和RGB引腳進行選中的行數(shù)據(jù)輸入。
4.將鎖存器引腳切換為高->低以將數(shù)據(jù)加載到選中的行。
5.通過將Blank引腳拉低來打開顯示器。
注:其中的Blank,代表輸出使能 OE 引腳!
有2個R,G和B引腳。如果選擇地址0,則R0/G0/B0將數(shù)據(jù)寫入第0行,而R1/G1/B1將數(shù)據(jù)寫入第32行;選擇地址1,則R0/G0/B0將數(shù)據(jù)寫入第1行,而R1/G1/B1將數(shù)據(jù)寫入第33行。要顯示圖像,你需要寫一行,稍等一下才能顯示它,再寫下一行,依此類推。為了獲得圖像,需要以60Hz的頻率寫入和顯示64行,或者為了獲得不錯的幀速率,可以更快提高頻率。但遺憾的是,以這種方式寫線時,LED會熄滅或亮起。使用RGB,僅可以顯示8種不同的顏色,而不完全是漂亮的圖像。
全彩顯示
獲得更多顏色意味著對顯示進行PWM。進行此顯示的PWM的唯一方法是在轉(zhuǎn)到下一行之前多次寫一行:
1、將數(shù)據(jù)移至如上所述的選中行
2、等待一位的時間
3、在同一行中移動下一個值
4、等待一位的時間
5、重復此N次,對于4位PWM為16次,對于8位PWM為256次。
6、移至下一行
一種簡化方法是將二進制編碼調(diào)制(BCM)與BCM一起使用,過程如下:
1、將數(shù)據(jù)移至選中行
2、等待x時間
3、在同一行中移動下一個值
4、等待x * 2時間
3、在同一行中移動下一個值
5、等待x * 4次。
6、重復N次,對于4位PWM重復4次,對于8位PWM重復8次。
7、移至下一行
驅(qū)動矩陣
FPGA代碼可能非常簡單,從幀緩沖區(qū)讀取數(shù)據(jù)并傳輸?shù)絉GB矩陣。
為了簡化顯示,以發(fā)送格式來組織幀緩沖存儲器。我沒有將數(shù)據(jù)存儲為RGB值,而是將它們拆分為64位行數(shù)據(jù)。這樣,數(shù)據(jù)發(fā)送器塊只需要讀取數(shù)據(jù),將其移出時鐘并等待所需的時間即可。
這是用于4位的BCM,但是用于8位的圖像會有點大。這樣,F(xiàn)PGA代碼的傳輸就是一個簡單的狀態(tài)機。首先,它獲取數(shù)據(jù)。其次,它發(fā)送它并等待正確的時間,然后才能發(fā)送下一行。
LED單元板驅(qū)動原理
LED 單元板就是大量單色或三色 LED 的點陣,掃描式驅(qū)動,一般是行線共陰、單列單色 LED 共陽,采用專用芯片進行恒流驅(qū)動。所謂掃描式驅(qū)動,就是每一列的數(shù)據(jù)線共享、單元板的同一時刻只有一行被選中并點亮,通過快速的掃描加上人眼視覺暫留來實現(xiàn)整屏顯示。有些做的比較好的單元板提供內(nèi)置的余暉、消隱功能,在掃描其他行時之前點亮的行仍會繼續(xù)點亮、重新掃描當前行時會強制熄滅不應(yīng)點亮的像素,以降低屏幕的閃爍、提升畫面的顯示效果。
所以不難理解,單元板的驅(qū)動過程就基本是兩個階段:
1、選擇當前掃描的行
2、點亮當前行的數(shù)據(jù)
什么是 “32 掃”?行選擇階段
如果你學過計算機組成原理之類的課程,你應(yīng)該聽說過存儲器的地址線。HUB75 的行選擇信號與存儲器的地址線運作方式相同,使用多條地址線,用高低電平組合出二進制的各位數(shù)字,然后通過譯碼器將 n 條地址線的組合信號變?yōu)?2^n 選 1 的行選擇信號。HUB75 接口的多種變體基本上就是從這里派生。一般情況 HUB75 的插座使用 16P 簡易牛角座,下面是接口示意圖:
注意 9、10、11 三個引腳,名稱分別為 A、B、C,這三根線就是 3 位地址線的 A0、A1、A2 三位,單元板的內(nèi)部實現(xiàn)中,會使用一個 3-8 譯碼器將這 3 根輸入地址線高低電平的二進制組合轉(zhuǎn)化為 8 根輸出片選線中其中一根的選中狀態(tài)。例如當這四位的電平值分別為 H、L、L 時,代表了當前行地址為 001b,所以 1 號地址線(即代表第二行)為選中狀態(tài),其他為非選中狀態(tài)。由于廠商具體內(nèi)部設(shè)計的差異,行選擇激活狀態(tài)可能為高電平,也可能為低電平,所以這里不能確定具體電平的高低,只能確定哪條線處于激活狀態(tài)。由于同一時刻 8 條行選擇中只有一條被激活,即同一時刻有 1/8 的行正在被點亮,所以這種掃描方式被稱作 1/8 掃描,行業(yè)簡稱“8 掃”。
變體由此產(chǎn)生。有些單元板的行數(shù)不足 8 行,不需要如此多的地址線,所以會把不需要的地址線空置或接地,比如 1/4 掃描的單元板會將 11 號 C 引腳空置,僅使用 2 條地址線。1/32 掃描的單元板會將 12 號、6 號引腳作為 D、E 信號即行地址二進制的第四、五位,使用 5-32 譯碼器來提供 32 條行地址線來進行更大范圍的掃描,此時形成了 HUB75 最常用的變體——HUB75E。
那為什么 32 掃的接口可以驅(qū)動 64 行的單元板?
這里會有同學疑惑,市場上也有很大一部分單元有 64 行,但卻使用的 HUB75E 接口,怎樣實現(xiàn)使用 5 條地址線完成 64 行(地址二進制有 6 位)的掃描呢?如果單元板提供了說明,你會發(fā)現(xiàn)此時單元板仍然是 1/32 掃描,上面說 32 行同時點亮 1 行,那么如果是 64 行,就是同時點亮 2 行。沒錯,這就是幾乎所有使用 HUB75 接口的單元板,有 n 行像素、使用 n/2 掃方式驅(qū)動的原因——單元板被分成了上下兩部分,行選擇信號會同時選擇上下兩部分中的各一行,通過兩路信號同時點亮兩行,這樣就實現(xiàn)了更少的地址線以及更高的掃描頻率。減少地址線、增加數(shù)據(jù)線,學過計算機組成原理的同學們想起來了沒?
行內(nèi)數(shù)據(jù)如何傳入?行數(shù)據(jù)傳輸階段
簡單點說就是,串入并出加鎖存。同學們一定聽說過赫赫有名的移位寄存器——74595,沒錯,這東西塞滿了整塊單元板。觀察 HUB75 接口的 13、14、15 三個引腳,分別為串行數(shù)據(jù)時鐘、鎖存時鐘、輸出使能三個引腳,功能上完全對應(yīng) 74595 的三個對應(yīng)引腳。而它的串行數(shù)據(jù)輸入有 6 根,即 1、2、3、5、6、7 這 6 個,分別代表上下兩半部分的 R、G、B 像素信號。這 6 根數(shù)據(jù)線共用相同的時鐘線,并行傳輸行內(nèi)的像素數(shù)據(jù)。
【???】任意行被選擇后,當 14(鎖存)引腳拉高,數(shù)據(jù)開始進行傳輸,13(數(shù)據(jù)時鐘線)為低電平時 6 根數(shù)據(jù)線并行輸入數(shù)據(jù),數(shù)據(jù)就緒后數(shù)據(jù)時鐘拉高觸發(fā)寄存器移位,然后數(shù)據(jù)時鐘拉低觸發(fā)寄存器完成歷史數(shù)據(jù)的輸出,同時數(shù)據(jù)線準備下一位的數(shù)據(jù)。所有數(shù)據(jù)移位輸入完成后拉高鎖存時鐘,完成整行數(shù)據(jù)傳輸。對于有些提供余暉、消隱功能的單元板,需要根據(jù)要求給15(低電平輸出使能)一個適當寬度的高電平信號來觸發(fā)消隱和余暉。這樣快速反復的行選擇、數(shù)據(jù)傳輸過程,就完成了每一行的掃描與顯示。
多塊單元板如何連接?
每塊單元板都提供了兩個接口,一個輸入一個輸出。多塊單元板之間就是串聯(lián)關(guān)系,上一塊板子的輸出對應(yīng)連接在下一塊板的輸入即可。這樣一連串單元板的時鐘信號共用、數(shù)據(jù)信號串接,調(diào)整每行傳輸?shù)臄?shù)據(jù)長度,即可實現(xiàn)對不同數(shù)量單元板的驅(qū)動過程。
如何實現(xiàn)全彩?
每個像素的每個單色子像素只有兩種狀態(tài)——點亮和熄滅,那么可以通過 PWM 或 BCM 調(diào)制來實現(xiàn)子像素的灰階。可以通過把一行重復掃描 n 次、點亮 m 次實現(xiàn) m/n 亮度的灰階,也可以把每一幀圖像重復掃描 n 場,m/n 灰階的子像素選擇其中 m 場點亮來實現(xiàn)。兩種方式各有優(yōu)劣,需要根據(jù)單元板的實現(xiàn)原理、程序編寫難度等來選擇不同的全彩實現(xiàn)方式。
能否簡化連線?
我們注意到 HUB75 實際是由一組組合邏輯的并行傳輸行信號和一組 6 路時序邏輯的像素數(shù)據(jù)信號(可認為是并行 SPI)組成的。通過將 6 路 SPI 數(shù)據(jù)線輸入輸出首尾串接,可以將 6 路并行 SPI 變?yōu)?1 路串行 SPI,同時再通過一片 74595 可以實現(xiàn)行信號的并行輸出。使用一個非門制作一個 1-2 譯碼器,實現(xiàn)行選擇串行數(shù)據(jù)、行數(shù)據(jù)串行數(shù)據(jù)的選擇,配合適當?shù)臄?shù)據(jù)信號,就可以實現(xiàn)僅通過 3 根數(shù)據(jù)線(功能選擇、數(shù)據(jù)、時鐘)實現(xiàn)整組單元板的數(shù)據(jù)傳輸,節(jié)省引腳有利于使用更小型的單片機進行顯示。當然這樣會大大受制于 SPI 頻率而降低單元板的刷新頻率,孰輕孰重視具體情況具體選擇。
開頭提到的大坑是什么?
因為 HUB75 接口標準缺乏明確規(guī)范,導致一些廠商并沒有完全按照上面的格式傳輸數(shù)據(jù)。就拿我買到的第一塊單元板為例,雖然號稱 1/32 掃的 HUB75,但它的行選擇信號并不是標準的5位地址線,而是將每半場的 32 條行選擇線接入了一個串入并出移位寄存器,使用 ABC 三條信號線作為移位寄存器的數(shù)據(jù)、時鐘、鎖存信號,相當于直接把上面的簡化版行選擇直接集成進了單元板,這直接導致了我找到的所有關(guān)于 HUB75 的資料全都跑不通。最后我根據(jù)芯片型號找到手冊、用萬用表一個一個焊點試驗摸出走線才把這塊單元板的驅(qū)動原理摸通。詢問賣家有沒有資料,賣家只說不兼容市面上的控制器(所有賣家都這么說,不知道是不是為了讓你買他們家的控制器),完全不提供任何技術(shù)支持,這個就是最大的坑——單元板拿到手之前,你永遠不知道它到底該怎么用。
參考
Driving a 64*64 RGB LED panel with an FPGA.
LED dimming using Binary Code Modulation
關(guān)于LED點陣屏單元板的通信接口——HUB75
LED單元板驅(qū)動(HUB75接口)
rpi-rgb-led-matrix
64x128 LED Matrix with HUB75 (not HUB75E) interface not working
Everything You Didn’t Want to Know About RGB Matrix Panels
FPGA
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。