1. 程式人生 > >基於Charlieplexing演算法(查理複用演算法)的LED矩陣控制設計

基於Charlieplexing演算法(查理複用演算法)的LED矩陣控制設計

目錄

Charlieplexing 基本原理

Charlieplexing 注意事項

結論


最近發現一個非常有意思的實驗:查理複用技術控制LED燈(按鍵)。

簡單來說就是:希望能夠用較少的I/O口控制較多的LED燈!按照Charlieplexing 方法,n個引腳可以有n*(n-1)個組合,也就是說,可以用n個引腳驅動n*(n-1)個LED燈!帥吧!比起我們一個引腳控制1個LED燈,多了n-1倍。使用行列式驅動,也沒這個控制的多。到底多了多少呢?計算一下:

1個引腳——當然只能控制一個LED燈啦。

2個引腳——2個燈,冒失沒有多呀——但是:不用共地/共電。

3個引腳——6個燈!依然不用共地什麼的。

4個引腳——12個燈!(傳統的控制方式需要7個引腳)。

查閱了相關資料,進行總結分享~

Charlieplexing 作為一種 LED 顯示器多路複用的方法,能夠使人們控制的 LED 數量大得多,在 LED 領域應用廣泛。利用“行列分時複用”的思想,它能使用 N 條 I/O 線路來控制 N*(N—1)只 LED,而標準的多路複用發法控制的 LED 則少得多。

  • Charlieplexing 基本原理

當使用 Charlieplexing 方法,n 引腳可以有 n*(n—1)個組合。也就是說,它可以用 n個引腳驅動 n*(n—1)個 LED 二極體。而傳統的行列複用則需要更多的引腳來驅動相同的LED 二極體,也就是說要驅動 6 個 LED,用行列式需要 5 個口,而這種方法只要 3 個。LED越多,節省的 IO 越多。比方說驅動 20 個 LED,行列式要用 9 個,而這種只要 5 個。

1、互補驅動

Charlieplexing 最簡單的形式如圖 1 所示,是使用 LED 的互補對稱矩陣。

 矩陣橫座標是 LED 正負極性之間的電壓值,縱座標是 LED1 和 LED2。charlieplexed矩陣是這樣的:通過應用一個正電壓針腳 1 和接地引腳 0,LED1 會亮起。由於電流不能流過反向偏置的 LED2,發光二極體 2 將保持熄滅。如果在引腳 1 和引腳 2 的電壓是反向的,發光二極體燈 LED 2 將亮而 LED1 將熄滅。

2、 三態邏輯擴充套件

這是一張 3 個 IO 驅動 6 只 LED 的簡化版電路圖,電阻在這裡起限流決定性作用:

這裡出現了一個問題,為了使我們能夠更好的演示前面那個例子,在使用其中的兩個引腳前,必須斷開另外的一個引腳。這可以使用微控制器引腳的三態邏輯來解決。微控制器管腳通常有三種狀態,5V、0V 和高阻態。輸入方式置於高阻狀態,從電流上講是從電路上斷開那個引腳,意思就是非常小的電流或者沒有電流流過它。這使得電路在任何時候可以使用任何數目的引腳,只需要簡單的改變引腳的狀態。為了驅動上面 6 個 LED 矩陣,我們所期望亮的兩個 LED 相應的連線到 5V 和 0V,第三個腳設定為輸入狀態。這樣做我們可以防止電流從第三引腳洩露出,以確保我們期望的 LED 燈是唯一一個點亮。採用三態邏輯,只要引腳可用,矩陣理論上可以擴充套件到任何大小。任何可以被點亮的 LED 採用 5V 和 0V 至其相應的管腳,矩陣的所有其他引腳設定成輸入高阻態。 

  • Charlieplexing 注意事項

1、LED  顯示頻率

因為 LED 二極體是單極性的,都具有一個陽極和陰極,Charlieplexing 通過輸出一個變化的頻率,幾乎可以同時點亮 LED 二極體。當頻率確定,所有的 LED 不會同時點亮,而是一個簡單的發光二極體被點亮,然後再設定,點亮另一個,週期重複。但如果頻率足夠快,人眼會認為 LED 是一直亮著的。為使顯示為沒有任何明顯的閃爍,為每個 LED 的重新整理速率必須大於 50Hz。基於 Charlieplexing 的方法使用 8 引腳來控制 56 個 LED,這個足夠給 8 個7 段數碼管顯示(不包括小數點)。通常情況下 7 段數碼管有一個共同的陽極,或者一個共陰極,假設它是一種常見的共陰極。所有的 8 個 7 段 LED 數碼器不能同時開啟通過任何Charlieplexing 的理想組合,由 8 位直接得到 56 位的資訊是不可能的,相反,人眼被使用的閃爍給欺騙了。只有一個 7 段數碼管顯示,其它 7 個發光二極體可以在任何時候被啟用。這將是該做的方法為 8 個數碼管中的 8 個共陰極每一個都分配一個獨特的 I / O 埠引腳。在任何時候,只有唯一一個 I/O 控制引腳被置低,因此只有它的 7 段數碼管的陽極連線到正極就可以使 LED 點亮。這樣就啟用一個 7 段數碼管,被啟用的 7 段數碼管顯示的 7 段 LED 陽極可以在任何組合轉向由其他 7 個 I/O 埠或高阻抗模式的任意組合。它們通過電阻被連線到剩下的 7 個引腳中(共陰極連線到引指令碼身,不是通過一個電阻,否則電流會分流到所有開啟的數碼管)。但為了顯示所需的數字需要使用 8 個數碼管,只有 7 段數碼管在同一時段被顯示,因此 8 個引腳必須通過單獨的迴圈,並在每個頻率至少為 50Hz。一次顯示必須重新整理在 400Hz 通過全部 8 段,確保 LED 的閃關燈不低於 50 次每秒,這就要求微處理器執行中斷至少 400 次每秒。

 2、峰電流

由於佔空比下降,一個 Charlieplexing 電路的顯示速度必須比傳統的複用顯示技術更快。當顯示的數量變大,通過 LED 的平均電流必須(大約)大於一個維持它持續點亮的常數,這要求增加相應的電流峰值。這將導致限制了使用 Charlieplexing 顯示數量的問題。LED通常有一個最大峰值電流額定值以及平均額定電流。如果微控制器程式碼崩潰,已點亮的 LED比傳統的複用處在一個非常大的電壓下,增加了一個危險故障。

3、三態要求

所有的輸出埠用於驅動一個 charlieplexed 必須有三態。如果電流足夠低以至於不能直接驅動微控制器的 I/O 引腳顯示,這是沒有問題的,但如果必須使用外部狀態,每個三態一般需要兩個輸出線,以控制消除了一個 charlieplexed 顯示優勢。由於來自微控制器引腳的電流通常僅限於 20mA,因此這嚴重限制了一個 charlieplexed 顯示的實際尺寸。但是,這是可以做到使一段數碼管在一個時刻亮。

4 、正向電壓的複雜性

Charlieplex 矩陣比傳統的複合矩陣明顯更加複雜,無論是在所需的 PCB 板佈局和微控制器程式設計,這增加了設計時間。當使用不同正向的電壓的 LEDs,不如使用不同的彩色 LEDs,可能存在的問題就是我們不期望亮的 LED 會亮起。

如果我們仔細看看上面的設計,我們會注意到,例如我們想點亮 D1,可以令 Net1=1,Net2=0,Net3=Z,這樣,D1 就亮起來了,什麼問題也沒有,可是如果 D1 損壞,或者沒有安裝時,問題就來了。當電源電壓較高時(例如 5V),會形成圖中箭頭所示電流回路,造成 D4、D5 兩隻 LED 被意外點亮,而 3V 電壓為什麼沒事呢,因為對於大部分 LED,3V 電壓還沒達到LED 壓降的兩倍,所以不會導致兩隻二極體串聯導通(稱之為二極體連鎖現象)。

這僅僅是 3 個 IO 的情況,有更多 IO 的情況下將更糟糕,而且如果你使用了擴流電路,問題會非常棘手,這也是為什麼 Charliplex 結構的電壓必須小心選擇 LED 壓降和電源電壓的原因,否則只要有一兩個壞點就足以毀了整個螢幕的畫面 。不光是 LED 屏,某些掃描鍵盤中也存在類似現象。 

5 、LED 故障

如果一個 LED 出現故障,無論是成為一個開路電路,或者是一個短路電路,或者是漏電路(潛在的並聯電路導致電流分流),將會影響一個整體的顯示,而且實際壞了的 LED很難被發現,當不只是一個 LED 而是可能潛在的一系列 LEDs 會被同時點亮,如果對電路沒有詳細的瞭解,哪一個 LED 壞了和怎麼設定 LED 點亮的區分就不能很容易的建立。

如果壞了的 LED 成為一個斷路,LED2 兩端的電壓可能會建立起來,知道找到一個路徑通過兩個 LEDs。有很多這樣的路徑,因為引腳被用來控制陣列減 2 個方向;如果在節點M 陽極和節點 N 陰極上的 LED 壞了,可能每個 LED 在節點 M 陽極,陰極是 P,隨之而來的 LED 陽極是 P 並且陰極是 N,都會被點亮。

如果有 8 個 I/O 引腳控制矩陣,這意味著將會有 6 個獨立的路徑通過每兩個 LEDs,也就是 12 個 LED 會被無意點亮,但是幸運的是這隻發生在假定一個 LED 壞了,這可能只發生一小部分時間,當有故障的 LED 沒有被點亮時,這不會影響整體的功能。如果問題是在節點 x 和 y 間短路,則每次任何一個 LED1 是以 x 或者 y 最為它的陽極或陰極,其他的節點z 作為他另外一個點選,假定將要被點亮(假定 LED1 的陰極連線 x),LED2 的陰極 y 和陽極 z 將也會點亮,所以任何時間任一節點 x 或 y 作為陽極或者陰極,兩個 LEDs 會代替一個而點亮。在這種情況下,它只是無意的點亮一個附加的 LED,但是它的頻率比較快,不
只是當壞的 LED 假定被點亮,當任何一個 LED 有一個引腳和壞了的 LED 是共用的也會假定被點亮。

這個問題變得特別困難來確定是否有兩個或者兩個以上的 LED 是壞的。這意味著不像大多數方法一樣,其中一個 LED 損壞的原因只是被燒燬了。當使用 Charlieplexing,一個或兩個燒燬的發光二極體,無論失敗的模式,幾乎肯定會導致意想不到的 LED 被點亮,這些仍然工作的很可能使整個裝置完全無法使用,立即發生連鎖反應。裝置的使用壽命和破壞特徵都必須要在設計時考慮。

  • 結論

Charlieplexing 除了應用在 LED 二極體的輸出控制上,也可以用於微處理器輸入訊號的複用上,一個典型應用如一個標準(4*3)12 鍵盤只需要使用 4 個 I/O 線,而傳統的行列掃描方法需要 4+3=7 個 I/O 線,因此 Charlieplexing 節約了三個 I/O 口。雖然 Charlieplexing面臨一系列問題待解決,但是其應用在 LED 控制中仍具有廣泛前景。