題:
通過PWM控制500個LED
littlebirdceo
2009-12-21 13:17:25 UTC
view on stackexchange narkive permalink

我正在考慮一個項目,該項目將涉及單獨尋址500個LED,最好是每個LED都支持PWM。

我已經計劃使用Arduino,因為我已經準備好使用它,但是如果有人認為使用其他平台更合適,我可以公開建議。

移位寄存器需要被雇用。在這種情況下使用什麼好的移位寄存器?如果PWM使該項目變得昂貴得多,那麼我可以不用它。我想嘗試花費少於$ 100。我會在ebay上批量購買500個LED。

您對控制如此大量的LED的最佳方法有何看法?另外,我將如何提供電源?我將不勝感激。我對電子產品非常有經驗,但是我從來沒有做過如此大規模的事情。

十五 答案:
ElcoJacobs
2012-08-10 03:09:16 UTC
view on stackexchange narkive permalink

我是ShiftPWM庫的作者,我剛剛更新了文檔,其中包括普通LED,LED燈條和大功率LED的示意圖和更多常規信息。

您可能已經開始了項目,但是由於此頁面吸引了很多訪問者,因此我仍然想提供詳細的答案。

如果要使用ShiftPWM控制500個LED,則每個LED在60 Hz時可獲得約64個亮度級別。您將使用64個移位寄存器。專用的硬件PWM驅動器將為您提供更多的亮度,但價格會更高一些。我認為我的庫的主要優點是易於使用,因為它包含RGB和HSV函數以及許多示例。

我個人會選擇TLC5917的TLC5916而不是普通的移位寄存器,因為它們有一個內置的恆流LED驅動器。

在我的網站上( http://www.elcojacobs.com/shiftpwm),這將節省您很多焊接時間。

有關如何連接LED以及如何使用Arduino快速驅動長信號線的信息。

如果還有其他問題,請詢問。

你看下面我的回答了嗎?儘管我描述的技術使用了額外的硬件,但可能仍可以使用相同的方法來極大地提高庫的速度。我尚未對Arduino進行編程,所以我不熟悉它的指令時序,但是以最簡單的形式,您可以將CPU負載減少到僅將SPI爆破比特所需的一切(如果您目前處於5個週期內)每位,而SPI每字節需要16個週期,即2.5倍加速)。您甚至可以在仍以這種速度運行時甚至可以做一些更複雜的事情。
例如,假設您要具有八個亮度級別,分別代表全開,1 / 2、1 / 4、1 / 8、1 / 16、1 / 32、1 / 64和1/128。如果Arduino可以對從指針獲取的值執行“與”或“或”運算,並在不到四個週期的時間內遞增該指針,則可能可以使用每個像素三位來存儲亮度信息,但仍可以達到傳輸速度每8個LED 16個週期。
計算PWM值與我的庫中的SPI輸出重疊。我以4MHz運行SPI,計算時間僅比SPI輸出長一點。每個字節需要43個時鐘週期,因此每8個輸出。對於大多數設置而言,這足夠快。通過使用位碼調製,您可以獲得更快的速度,其中有8個更新周期,每個下一個週期是前一個週期的一半。我已經寫了一個BCM版本,但是對您更新亮度設置的那一刻更加敏感。未對準時會引起閃爍。我可能會在矩陣版本中使用它。
BCM的優勢在於您可以利用1 / 2、1 / 4 ...時序,但每個LED仍只佔用一個引腳。如果您具有計算機科學背景,您可能會發現有趣的是計算SPI字節。我從內存中接收到佔空比(2個時鐘),然後執行一個compare(1個時鐘)。比較結果存儲在進位中,因此我可以通過一次進位(1個時鐘)將其移入字節。進行8次將所有比較結果放在一個字節中,即可發送到SPI。
Axeman
2009-12-21 13:21:13 UTC
view on stackexchange narkive permalink

只需複制:-)

http://www.evilmadscientist.com/article.php/peggy2

今天我們重新發布了我們的“ Peggy”開源LED Pegboard項目的更新。 Peggy版本2已從頭開始重新設計。而且看起來……幾乎完全一樣。不過,引擎蓋下的變化是巨大的,我們認為它在許多方面都有很大的改進。

首先,也是最重要的一點,Peggy 2.0仍然做同樣的事情:它為25 x 25個LED位置陣列。 Peggy旨在消除玩LED時的刺痛,複雜性和混亂。它是一種多功能且功能強大的發光釘板,可讓您以所需的任何配置有效地驅動數百個LED,而無需計算單個負載電阻。您可以安裝一個到625個LED,Peggy會為您點亮它們。


Peggy 2.0現在也與Arduino兼容:它支持通過a USB-TTL電纜,使用流行的Arduino軟件環境。

精彩的鏈接!已收藏。我本來不打算從事類似這樣的項目,但是現在我必須看到那個小視頻:-)
@NicolaeSurdu未損壞。我剛剛打開它。
從理論上講,這可能可以回答問題,但是[更可取的是](http://meta.stackexchange.com/q/8259)在此處包括答案的基本部分,並提供鏈接以供參考。
davr
2009-12-21 15:09:54 UTC
view on stackexchange narkive permalink

您想要LED進入哪種佈局?如果購買一些LED矩陣,則可以節省很多工作,可以得到單色的8x8 LED矩陣(64個LED),需要錢兩個

您不會通過AVR獲得真正的PWM並在這麼多LED上移位寄存器,但是您可能能夠壓縮2-4級亮度。您必須對這些數字進行運算,看看有什麼可能。

Allegro製造了一些方便的恆定電流吸收移位寄存器,專門用於控制LED陣列,因此您不必需要額外的電阻,這也會使事情變得更簡單。如果AVR輸出不能提供足夠的功率,則可能無法直接從AVR輸出驅動LED,因此您需要使用晶體管。您可以在單個IC的陣列中獲得它們,這也節省了一些工作。

一切都很好!
Len Holgate
2009-12-21 17:49:47 UTC
view on stackexchange narkive permalink

我不知道LED需要的PWM範圍,但我一直在為伺服控制應用開發64通道PWM控制器,該控制器可以給我600us到2.4ms的脈衝。它使用CD74HCT238E(3-8行解復用器)從ATMega168上的8個I / O引腳生成64個通道,並且可以通過簡單的串行命令進行控制。我猜您可以在一條串行線上將此控制器的多個版本的修改版本鏈接在一起,並尋址所有500個LED ...您可能會使用ATTiny2313版本的控制器,因為您的固件要求會更簡單。 >我的博客包含裝配源,原理圖以及設計過程的詳細信息。

David Brenner
2009-12-21 21:57:17 UTC
view on stackexchange narkive permalink

簽出mouser / digikey上的“ LED驅動器” IC。例如,TI製造了許多具有各種接口(I2C,SPI)的驅動程序,這些接口肯定可以滿足您的需求。這些驅動器中的大多數被設計為菊花鏈連接,因此從一個驅動器輸出的串行信號將被饋送到另一個驅動器的串行輸入信號。

例如,TL​​C5940之類的器件可提供16通道PWM控制。因此,基本上它是具有12位灰度PWM控制的恆流16位移位寄存器。我可以推薦該特定的IC,因為我幫助設計了一個80x16的顯示器。

Lepton
2010-07-29 11:09:17 UTC
view on stackexchange narkive permalink

Mondomatrix製造了一些串行(rs-485)可尋址LED驅動器板,並基於Arduino平台: http://www.displayduino.com/您也許可以將一個系統使用該硬件相當容易

supercat
2011-03-16 22:38:26 UTC
view on stackexchange narkive permalink

如果您不希望每個LED都有太多的PWM控制位,並且不想讓處理器在每個PWM週期內浪費500個LED,則可以使用N 74HC595控制8個N位亮度的LED或同等籌碼。將所有N個芯片的輸出連接在一起,然後將使能連接到某些電路,這些電路將在適當的時間一次只啟用一個。安排使第一個芯片有一半時間處於啟用狀態,第二個芯片有一半處於啟用狀態,依此類推。

任何移位寄存器的重載都應與PWM速率同步,以最小化混疊效果(例如,如果亮度水平在0111和1000之間快速切換,則發生開關時PWM週期中的點可能會瞬間改變視在亮度)。

每個LED必須使用多個74HC595輸出可能很煩人,這種方法可能是最簡單的方法,可以在不進行CPU干預的情況下保持不同的亮度水平。

Ricardo
2013-12-12 18:57:24 UTC
view on stackexchange narkive permalink

這不能直接回答問題,但是您可能需要考慮的另一個方面是500批次LED中可能的亮度差異。如果這些LED彼此靠近安裝(例如矩陣或7段顯示器),則這尤其重要。有關如何解決此問題的更多詳細信息,請參見此答案,尤其是使用點校正來補償LED亮度的變化。

我遇到此問題時200個1mm紅色LED用於我正在建造的一組大型7段顯示器。我為解決該問題而做出的廉價解決方案包括以下內容:

  1. 我在麵包板上建立了一個LED測試儀,以對各種亮度類別的led集進行分類
  2. 我使用同一類別的LED(在我的設計中,每個段由5個串聯安裝的LED組成)
  3. 我使用不同的限流電阻補償了每個段的亮度差異。例如,對於一個具有更亮的LED的段,我將使用100歐姆的電阻,而對於另一個具有較暗的LED的段,我將使用120歐姆的電阻。
  4. ol>
有效點,但不回答問題。
@MattYoung同意。其他所有答案基本上都可以回答這個問題。我只是想補充這些答案,以解決可能影響OP設計的附帶問題。
x4mer
2011-09-17 22:47:29 UTC
view on stackexchange narkive permalink

我建議使用本文所述的二進制角度調製技術 http://www.artisticlicence.com/WebSiteMaster/App%20Notes/appnote011.pdf

或檢查ShiftPWM庫 http://www.elcojacobs.com/shiftpwm/

從理論上講,這可能可以回答問題,但是[更可取的是](http://meta.stackexchange.com/q/8259)在此處包括答案的基本部分,並提供鏈接以供參考。
Leon Heller
2009-12-21 22:36:52 UTC
view on stackexchange narkive permalink

XMOS將Macroblock MBI5026與其LED瓷磚套件一起使用。我認為它們已在大多數其他專業系統中使用。

Leon

XTL
2010-07-28 18:52:59 UTC
view on stackexchange narkive permalink

帶有串行接口的專用驅動器芯片確實可能是最好的選擇。處理單個移位寄存器可能意味著電路非常複雜。至少Maxim和TI有所作為。我不記得任何一個模型是否都特別適合該模型。

它仍然需要大量硬件。

關於電源,編程和總線,數據表每個驅動程序可能會提供您所需的大多數信息。

supercat
2012-08-13 21:19:11 UTC
view on stackexchange narkive permalink

在軟件領域,如果一個人需要的不同亮度設置的數量不是太大,則以“位平面”格式存儲數據可能會有所幫助(如我在其他基於硬件的答案中所述),並且然後讓輸出例程使用布爾運算符一次作用於8個像素。為了獲得最大效率,這將需要具有多個單獨的輸出例程,用於PWM週期的不同部分。例如,如果希望使用4位亮度值,則可以使用以下形式的八個例程:

 movf bit0Comp,w;應為00或FF,具體取決於比較器的bit 0(如果清零,則為FF)iorwf POSTINCF,w;數據的位0;始終使用IORWF和wf POSTINCF,w;數據的第1位;如果比較器的第1位置1,則使用IORFF; ANDWF(如果清除)和wf POSTINCF,w;數據的第2位;如果比較器的第1位被置位,則使用IORWF;否則,請使用IORWF。 ANDWF(如果清除)和wf POSTINCF,w;數據的第2位;如果比較器的第1位被置位,則使用IORWF;否則,使用IORWF。 ANDWF如果清除SPIREG;存儲結果字節(如果> =比較數,則設置位)

根據比較值,可以使用IORWF和ANDWF的不同組合。請注意,使用所示的這種方法,只要將所有四個位都寫入到顯示移位例程的調用之間,或者通過讓像素更新例程確定是否在顯示週期中進行更新,就可以在PWM週期的任意點更新像素亮度值而不會閃爍。下一個移位將為像素輸出“ 1”或“ 0”,然後設置或清除像素的所有位(無論哪種操作,它都會做其將要執行的任何操作),然後寫入其值應為對。還要注意的是,通過改變顯示更新的時間,或者在一個PWM週期內多次使用一些比較值,可以達到任意的非線性亮度等級。非線性亮度標度通常適用於LED,因為1/128佔空比和2/128佔空比之間的亮度差異通常比127/128和128/128(甚至7/8像素之間的差異)更明顯。 8/8)。

Carl
2012-08-15 02:25:06 UTC
view on stackexchange narkive permalink

FPGA或CPLD可以提供很多I / O引腳,因此可以很好地完成這些任務。選擇最簡單,最便宜的。如果還不夠,請使用一對。

您能為我們提供更多有關為什麼這是一個好選擇的詳細信息嗎,現在我知道了,但是我知道有哪些選擇以及您列出的建議技術,Origial Poster(OP)可能沒有這樣的選擇背景。
我不確定這是最好的選擇,但希望它被提及以保持完整性。如果以一種或另一種方式用PWM控制500個LED,最後需要500條可單獨控制的導線。很難找到具有這麼多輸出引腳的微控制器。解決這一問題的方法有很多種,但仍然可以使用微控制器,但是一個或幾個便宜的CPLD / FPGA可以輕鬆提供這些輸出引腳。
Rocketmagnet
2012-08-15 05:35:08 UTC
view on stackexchange narkive permalink

幾乎可以肯定地使用 PSoC3 PSoC5來做到這一點。

PSoC芯片是包含可重新配置的數字硬件的微控制器,有點像FPGA或CPLD。這意味著您可以製作複雜的電路來完成不尋常的事情,例如使用PWM驅動500個LED。此外,您可能可以使用可重新配置的數字模塊來實現整​​個過程,這意味著芯片的CPU部分僅需要將所需的LED亮度寫入陣列中。

504個LED可以容納矩形21 x24。如果您有24個PWM通道和21個GPIO,則可以正常工作。你猜怎麼了? PSoC具有更多功能。

您可以在PSoC上輕鬆設置24個PWM通道,並將其他21個引腳配置為移位寄存器的一部分。接下來,配置一些DMA通道以將字節從內存中泵入PWM輸出,這很可笑。現在,CPU需要做的就是生成圖形。 PSoC3具有8位8051內核,而PSoC5具有32位ARM。隨便你吧。您僅需要一些ULN2803即可為行提供高驅動電流的外部IC。 PWM輸出應具有足夠的電流驅動單個LED。

這是驅動LED的全部殺傷力。有專門的,廉價的,預先設計的LED驅動器,用於像這樣的大量鏈接,這些驅動器一直用於巨大的顯示器。無需重新發​​明所有這些,並且花費更多。
@nemik-實際上,芯片的總成本(來自昂貴的Farnell)僅為6.80英鎊。
nemik
2012-08-14 09:54:08 UTC
view on stackexchange narkive permalink

利用規模經濟。像全球速賣通這樣的中國網站出售基於WS2811的LED線束,每50個LED約15美元。它們分別可尋址,明亮,通常防水,並具有PWM亮度。無需焊接或移位寄存器即可使兩者混淆。我敢打賭,自己做所有這一切將使您付出更多,花費更多時間並且非常沮喪。另外,您在奧茲(Oz),因此從中國發貨不會太貴。

這些產品是用於製造巨型LED顯示屏的,因此它們往往很便宜。只需確保大約每50個LED重新註入電源即可獲得最佳性能。

還有Arduino庫使它們易於使用。

每50個LED 15美元?那麼,對於500個LED而言,這就是150美元?您有神經告訴我我的解決方案很昂貴嗎? -1
另外,請您提供此鏈接。 WS801不太適合Google使用,也不會出現在[Aliexpress]的搜索中(http://www.aliexpress.com/wholesale?SearchText=WS801&catId=0&manual=y)
抱歉,我的意思是WS2811,就像這些http://www.aliexpress.com/store/product/WS2811-LED-pixel-node-DC5V-input-full-color-RGB-string-50pcs-a-string-IP68-這些http://www.aliexpress.com/store/product/DC5V-input-Square-type12mm-led-string-light-RGB-color-50pcs-a-string/701799_605976057額定值/701799_581805567.html或未經PWM調光.html
一個串行信號通過PWM調光驅動50個LED。謝謝,這正是我所追求的。但是,標準的移位寄存器提供了一個“鎖存”引腳,用於在發送完整幀後將緩衝的數據複製到輸出。這裡沒有鎖存器,因此我希望在高刷新率時會有明顯的噪聲。芯片支持每像素15位的400 Kbps數據,因此在幀更新時屏幕將顯示1.9毫秒的廢話。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 2.0許可。
Loading...