【有趣的全彩LED | 編程】用STM32 HAL庫讓WS2812B為你所動
一、效果展示
觀看演示效果://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的亮度調節。
詳細參考://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設置
(三) 程式設計
觀看演示效果://www.bilibili.com/video/BV1dv411Y7x3
原文鏈接://www.cnblogs.com/dongxiaodong/p/14358840.html
九、我的微信
使用STM32 HAL庫編程 PWM+DMA控制輸出,CubeMX生成初始工程
實現全彩音樂燈
WS2812B全彩流水燈效果展示及理論詳細講解
WS2812B的主要用途是在路邊的氛圍燈,我們在一些公園裡看到五彩斑斕閃爍的燈基本都是WS2812為基礎的燈帶
另外我們還可以通過純軟體延時的方式來控制數據發送,這可以方便程式移植