【有趣的全綵LED | 程式設計】用STM32 HAL庫讓WS2812B為你所動

東小東發表於2021-02-02

一、效果展示

 

 

 

 

觀看演示效果:https://www.bilibili.com/video/BV1dv411Y7x3

 

使用STM32 HAL庫程式設計 PWM+DMA控制輸出,CubeMX生成初始工程

實現全綵音樂燈

WS2812B全綵流水燈效果展示及理論詳細講解

WS2812B的主要用途是在路邊的氛圍燈,我們在一些公園裡看到五彩斑斕閃爍的燈基本都是WS2812為基礎的燈帶

 

另外我們還可以通過純軟體延時的方式來控制資料傳送,這可以方便程式移植

 

二、 基礎認識

(一)  小理論

WS2812B是一種智慧控制LED光源,將控制電路和RGB晶片整合在一個5050個元件的封裝中。內部包括智慧數字埠資料鎖存和訊號整形放大驅動電路。還包括精密的內部振盪器和電壓可程式設計恆流控制部分,有效保證畫素點的光色高度一致。

資料傳輸協議採用單NZR通訊模式。畫素上電覆位後,DIN埠從控制器接收資料,第一個畫素採集初始24位資料,然後傳送給內部資料鎖存器,其他經過內部訊號整形放大電路整形後的資料通過DO埠傳送給下一個級聯畫素。每傳輸一個畫素後,訊號減少24位。畫素採用自整形傳輸技術,使得畫素級聯數不受訊號傳輸的限制,只取決於訊號傳輸的速度。

復位時間>280us,中斷時不會誤復位,支援低頻率,價格低廉的MCU。重新整理頻率更新至2KHz,無閃爍,提高了出色的顯示效果。

特性:

l  控制電路和LED共用唯一的電源。

l  控制電路和RGB晶片整合在一個5050個元件的封裝中,形成一個完整的可定址電路

l  畫素內建訊號整形電路,波形整形到下一個驅動器後,保證波形失真不累積。

l  內建電子復位電路和失電覆位電路。

l  每個畫素的三原色都可以實現256亮度的顯示,完成16777216色的全綵顯示,並且掃描頻率為2KHz。

l  級聯埠通過單線傳輸訊號。

l  任意兩點距離不超過5m傳輸訊號無需任何增加電路。

l  重新整理率為30fps時,級聯個數不小於1024畫素。

l  以800Kbps的速度傳送資料。

l  燈的顏色高度一致,價效比高不需要外部電子元件,甚至不需要電容。

(二)   樣式彙總

1

燈板矩陣

燈帶

燈板

三、硬體簡介

燈帶引數:WS2812B燈條:30珠每米9w,60珠每米18w,144珠每米43W,電壓:(直流)DC5V

也就是每個燈珠全亮的功耗約為0.3W

 

l  供電:5V

l  每個燈珠全亮的功率:0.3W

l  每個燈珠全亮的電流:0.6mA

 

每個晶片有四個引腳

 

級聯接線方式

上一個晶片的DO接到下一個晶片的DI

 

 

四、程式設計思路

SW2812是一個RGB晶片,所以它有紅、綠、藍三種顏色,每個顏色有對應8位,因為我們通常一個畫素點就是用RGB三色來表示的,比如經常見到的#FFFFFF,其就是表示R(紅色)的值為255,G(綠色)的值為255,B(藍色)的值為255,#FFFFFFF是白色。所以一個SW2812由3個U8,也就是3*8=24位。要確定一個SW28122晶片的顏色就需要傳送24位的資料。

 

級聯資料傳送

l  第一屏資料快取

u  第一個24位有第一個模組接收並快取

u  第二個24位會被第一個模組轉發到第二個模組上,並快取

u  第三個24位會被第一和第二個轉發到低三個模組上,並快取

u  第四個24位……

u  低N個24位……

l  復位訊號,也就是將快取資料真實的體現到顯示上

l  第二屏資料快取

u  第一個24位有第一個模組接收並快取

u  第二個24位會被第一個模組轉發到第二個模組上,並快取

u  第三個24位會被第一和第二個轉發到低三個模組上,並快取

u  第四個24位……

u  低N個24位……

l  復位訊號,也就是將快取資料真實的體現到顯示上

l  ……

每個24位資料表示的意義

資料按GRB順序傳輸,先傳輸高位

資料位

 

 

五、 程式設計

手冊上介紹資料傳送速度是:800Kbps

所以每個資料位的時間是:1/800000=0.00000125s=1.25us

 

這1.25us可以表示高位或低位,24個1.25us就是一個燈的顏色,發完一個燈的顏色後需要傳送大於280us的低電平讓資料從鎖存器表現在燈上。

 

數位位0:

週期1/3的高電平,1.25*(1/3)us

週期2/3的低電平,1.25*(2/3)us

 

數位位1:

週期2/3的高電平,1.25*(2/3)us

週期1/3的低電平,1.25*(1/3)us

六、控制方式1(迴圈資料傳送)

一位一位資料迴圈傳送,因為WS2812對時序要求很高,所以微控制器要注意延時時間和IO的電平翻轉時間。

 

在微控制器沒有高階外設的情況下就得用這個了

 

程式設計要點:

l  延時時間要支援最小的1.25*(1/3)us

l  IO電平翻轉儘可能的快,進入去操作暫存器改變IO電平,減少延時時間,在STM32裡要把GPIO的時鐘設定高些

l  程式關閉中斷,程式的其它中斷可能會引起傳送資料時序錯亂

l  其缺點就是佔用主程式,各種延時消耗很大的CPU資源

七、 控制方式2(HAL庫 PWM+DMA)

PWM

PWM即脈衝寬度調製,是一種模擬控制方式,通常用於LED的亮度調節。

詳細參考:https://www.cnblogs.com/dongxiaodong/p/14351398.html

 

DMA

直接儲存器存取(DMA)用來提供在外設和儲存器之間或者儲存器和儲存器之間的高速資料傳輸。無需CPU干涉,資料可以通過DMA快速移動,這樣可以大大節省CPU的資源用來做其它操作。

 

PWM+DMA

也就是PWM輸出的佔空比可以由DMA方式來動態調節,而不需要微控制器CPU參與進來,我們只需要把DMA要移動的陣列定義好,然後啟動DMA的迴圈模式和記憶體偏移,改變陣列的資料就可以改變燈帶的顯示效果。

 

手冊上介紹資料傳送速度是:800Kbps

所以PWM的週期為:800KHZ,也就是1.25us

 

所以剛好一個週期就是一位資料,所以有:

當PWM設定的有效電平為高時:

1碼:佔空比為66%,也就是2/3週期

0碼:佔空比為33%,也就是1/3週期

八、PWM+DMA+ADC燈控與聲控程式設計

(一)資源介紹

l  晶片:STM32F103C8T6

l  燈板:24位WS2812

l  燈板的控制IO:PA8

l  ADC聲音檢測IO:PA0

(二)  CubeMX設定

(三)  程式設計


 

觀看演示效果:https://www.bilibili.com/video/BV1dv411Y7x3

 

原文連結:https://www.cnblogs.com/dongxiaodong/p/14358840.html

 

九、我的微信

 

使用STM32 HAL庫程式設計 PWM+DMA控制輸出,CubeMX生成初始工程

實現全綵音樂燈

WS2812B全綵流水燈效果展示及理論詳細講解

WS2812B的主要用途是在路邊的氛圍燈,我們在一些公園裡看到五彩斑斕閃爍的燈基本都是WS2812為基礎的燈帶

另外我們還可以通過純軟體延時的方式來控制資料傳送,這可以方便程式移植

 

相關文章