WS2812B RGB彩燈使用說(shuō)明


1、連接方式:

上圖表示的是4個(gè)燈珠串聯(lián),X1的DIN接MCU的一個(gè)IO口(注意,這里的IO口最好是能輸出PWM的定時(shí)器通道口),即D1;然后DO連接下一個(gè)燈珠的輸入,即X2的DIN,以此類(lèi)推,就將4個(gè)燈珠串聯(lián)起來(lái)。具體電路連接如下圖:

這里需要注意,該燈珠工作電壓5V.
2、數(shù)據(jù)傳輸原理:
每次給一個(gè)燈一個(gè)24位的數(shù)據(jù),順序是GRB-green red bule
第1個(gè)WS2812B燈珠接收到了第1個(gè)24bit的數(shù)據(jù),做出響應(yīng)(發(fā)光);
第N個(gè)WS2812B燈珠接收到了第N個(gè)24bit的數(shù)據(jù),
再收到第二個(gè)24bit的數(shù)據(jù)后,直接轉(zhuǎn)發(fā)給第二個(gè)WS2812B燈珠,由第二個(gè)WS2812B燈珠做出響應(yīng);依次類(lèi)推。
直接上圖,如下

3、數(shù)據(jù)時(shí)序:

上圖就是RGB燈識(shí)別0 1碼的具體表現(xiàn)形式。分析一下什么意思,在一個(gè)周期內(nèi),當(dāng)我們接收到的信號(hào)高電平占T0H時(shí)間,低電平占T0L時(shí)間,那么就表示我接收到一個(gè)0數(shù)據(jù)。當(dāng)一個(gè)周期內(nèi)接收到的高電平占T1H時(shí)間,低電平占T1L時(shí)間,就表示我接收到一個(gè)1數(shù)據(jù)。所以說(shuō),我們?cè)诜治鯮GB驅(qū)動(dòng)的時(shí)候,不是說(shuō)我IO口給我一高電平,我就認(rèn)為是1,給我一個(gè)低電平我就認(rèn)為是0.這個(gè)是在理解初期常常會(huì)有誤解的地方。我們使用一個(gè)周期內(nèi)的占空比來(lái)確定接收到的是1值還是0值。
僅供參考,具體型號(hào)得看芯片手冊(cè)


4、定時(shí)器配置:
根據(jù)WS2812的最大傳輸速率800kbps,設(shè)置定時(shí)器不分頻和計(jì)數(shù)周期為89+1,這樣下來(lái)波形的頻率為? 72M /(89+1) = 800K? ,并且一個(gè)波形的周期為? 1 /?800 = 1.25us
5、驅(qū)動(dòng)方案:
主要有以下幾種驅(qū)動(dòng)方式可供參考。
1、直接用 GPIO 反轉(zhuǎn),利用延時(shí)模擬時(shí)序
??????相對(duì)比較簡(jiǎn)單。
? ? ? 由于有延時(shí)函數(shù)存在及其浪費(fèi)MCU運(yùn)行資源。
2、利用 DMA + SPI 模擬時(shí)序
? ? ? 配置好之后驅(qū)動(dòng)基本交給硬件處理了,由DMA進(jìn)行數(shù)據(jù)搬運(yùn)。
? ? ?MCU 只需要進(jìn)行顏色相關(guān)的邏輯處理,可以最大程度節(jié)省 MCU 運(yùn)行資源。
3、利用 DMA + TIM 方式模擬時(shí)序
? ? ?配置相對(duì)比較復(fù)雜,配置好之后驅(qū)動(dòng)基本交給硬件處理,由 DMA 進(jìn)行數(shù)據(jù)搬運(yùn)。
? ? ?MCU 只需要進(jìn)行顏色相關(guān)的邏輯處理,可以最大程度節(jié)省 MCU 運(yùn)行資源。
方案對(duì)比
? ? 顯然第一種方案是不可取的,于是需要在第二和第三種方案進(jìn)行一個(gè)取舍,這個(gè)就主要看各位的 MCU 硬件接口資源了,一般而言 SPI 接口更少( SPI 可以接很多的模塊以及驅(qū)動(dòng)屏幕等等),定時(shí)器 TIM 更多,同時(shí)一個(gè)定時(shí)器 TIM 最多可以控制四條燈帶,因此個(gè)人感覺(jué)使用DMA+TIM 方案會(huì)更加節(jié)省硬件資源。
資料參考:特別感謝以下文章博主的分享,本文章只是學(xué)習(xí)記錄,請(qǐng)尊重原創(chuàng)!
1、http://t.csdn.cn/yi4FG
2、http://t.csdn.cn/s5Uxy
3、http://t.csdn.cn/aKK0Z