WS2812B 這顆內建控制的多彩LED晶片,其邏輯控制的 VIH 最小電壓是 VDD x 0.7,使用於5V時也就是 3.5V,而 silicon lab 及其它廠家的單晶片或是FPGA,I/O腳位的輸出很多都是 3.3V的電壓準位,是無法達到WS2812B的輸入要求。
這時侯可以用兩個方法:
1. 降底電源電壓。當VDD降至 4.5V 時,4.5x0.7=3.15V,這樣單晶片的輸出 3.3V 就可被WS2812B接受,甚至可以把VDD電壓降的更底,但不可低於3.5V。
2. 將單晶片的輸出電壓 3.3V 轉換至 5V。
上述的第一個方法若於較小且獨位的電路時較可行,直接把電源電壓調降即可。但若和其它系統共用電源或不能隨意調整電源電壓時,則須獨立再產生(或轉換)一個電源電壓,較不方便且不划算。
第2個方法則較簡單。一開始我直覺的使用電晶體來做這件事,如下圖:
沒想到這個使用了很久的方法這次卻失敗了,期間也嘗試了不同的阻值還是不行,我想原因應該是這次的切換頻率太高了,電晶體的反應速度來不及。但查看電晶體的規格表,卻發現好像不是這樣。WS2812B的傳輸速率是800KHz,就算是以 TH0 的 0.4uS 來計算,也才 2.5MHz,跟C945的規格表還有一段距離,但學藝不精的我也不知道那裡錯了,最後只能另尋他法。
之後我測試了FET,它可以順利的拉高高準位的電壓,但沒辨法將低準位的電壓拉低。也試用了LM358這樣的OPA,還是失敗。
雖然知道有電壓準位轉換的專用IC或模組,但手邊沒有需另外購買,且不知道效果如何。突然想到手邊就有的 74HC14 可以試試:
74HC14 的單價便宜,不用外接一些電阻、電容,使用簡單。另一個好處是它一顆就有6個Channel,直接使用其中的兩個Channel做兩次反轉,就不用特意在單晶片上把輸出反相。
使用這個方法讓我可以順利的將單晶片輸出的 3.3V 轉成 5V,但我購買的WS2812-12這個模組有時侯不太聴話,時動時不動。讓我懷疑是不是我的程式碼有問題,經過一系列的測試驗證,最後確認是第一顆 WS2812 在搞鬼。
不管是這樣排列成圓形的模組或一長條的燈條,WS2812的特色就是只需一個控制I/O,上一個WS2812會將自己的訊號(第一個24bit)接收處理後,將其它的訊號往下一個傳遞。而我使用的這個模組的第一顆WS2812剛好有點故障,它似乎認為我的輸入訊號不正確,所以不僅沒有點亮自己,也不把訊號往下傳,導致整個模組都不動作。遇到這樣的問題時,可以把不亮的第一顆的 DIN(第四腳) 及 DOUT(第2腳) 短路,如果後面的WS2812作動了,應該就可以確定是這一顆WS2812故障。
我回想這個模組的第一顆WS2812故障,是不是因為我之前曾不小心在沒有斷電的情況下,把DIN這條線(還是其它的線,忘記了)拔掉(斷開),才導致它的損壞?
2024/04/01補充:
我將第一顆WS2812更換了一個新的,發現單晶片的3.3V輸出即可驅動這個模組了,或許是在其規格邊緣吧,但能正常操作。
留言列表