玩轉彩燈開發之WS2812B彩燈詳細講解篇(STM32 PWM+DMA控制 STM32 HAL庫編程 循環延時控制多種控制方式)

1、效果展現

 

 

 

 

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

 

2、 基礎認識

(一)  小理論

WS2812B是一種智能控制LED光源,將控制電路和RGB芯片集成在一個5050個組件的封裝中。內部包括智能數字端口數據鎖存和信號整形放大驅動電路。還包括精密的內部振盪器和電壓可編程恆流控制部分,有效保證像素點的光色高度一致。編程

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

復位時間>280us,中斷時不會誤復位,支持低頻率,價格低廉的MCU。刷新頻率更新至2KHz,無閃爍,提升了出色的顯示效果。緩存

特性:微信

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

l  控制電路和RGB芯片集成在一個5050個元件的封裝中,造成一個完整的可尋址電路spa

l  像素內置信號整形電路,波形整形到下一個驅動器後,保證波形失真不累積。設計

l  內置電子復位電路和失電覆位電路。3d

l  每一個像素的三原色均可以實現256亮度的顯示,完成16777216色的全綵顯示,而且掃描頻率爲2KHz。htm

l  級聯端口經過單線傳輸信號。

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

l  刷新率爲30fps時,級聯個數不小於1024像素。

l  以800Kbps的速度發送數據。

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

(二)   樣式彙總

1

燈板矩陣

燈帶

燈板

3、硬件簡介

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

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

 

l  供電:5V

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

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

 

每一個芯片有四個引腳

 

級聯接線方式

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

 

 

4、編程思路

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順序傳輸,先傳輸高位

數據位

 

 

5、 程序設計

手冊上介紹數據發送速度是: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*(1/3)us

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

6、控制方式1(循環數據發送)

一位一位數據循環發送,由於WS2812對時序要求很高,因此單片機要注意延時時間和IO的電平翻轉時間。

 

在單片機沒有高級外設的狀況下就得用這個了

 

編程要點:

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

l  IO電平翻轉儘量的快,進入去操做寄存器改變IO電平,減小延時時間,在STM32裏要把GPIO的時鐘設置高些

l  程序關閉中斷,程序的其它中斷可能會引發發送數據時序錯亂

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

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

PWM

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

詳細參考:http://www.javashuo.com/article/p-phkcexud-vc.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週期

8、PWM+DMA+ADC燈控與聲控編程

(一)資源介紹

l  芯片:STM32F103C8T6

l  燈板:24位WS2812

l  燈板的控制IO:PA8

l  ADC聲音檢測IO:PA0

(二)  CubeMX設置

(三)  程序設計


 

 

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

 

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

 

9、個人微信

相關文章
相關標籤/搜索