找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 33301|回復(fù): 13
收起左側(cè)

教你使用一個(gè)單片機(jī)IO口控制RGB彩燈,單總線LED燈使用教程

  [復(fù)制鏈接]
ID:241755 發(fā)表于 2019-5-22 16:57 | 顯示全部樓層 |閱讀模式
相信大家學(xué)習(xí)單片機(jī)的第一課就是點(diǎn)亮第一盞LED燈了吧,初次點(diǎn)亮LED的時(shí)候的心情肯定是很激動(dòng)的,可以操控眼前這個(gè)小小的芯片完成自己編寫的指令,頓時(shí)感覺到很奇妙。初次了解之后便會(huì)激發(fā)我們的探索精神,當(dāng)學(xué)習(xí)了PWM之后,控制RGB彩燈隨意調(diào)出千變?nèi)f化的顏色肯定不再是難事,用在各種項(xiàng)目上,RGB燈會(huì)讓作品更加鮮艷動(dòng)人。在這美麗的背后,其實(shí)隱藏了很多的科學(xué)道理,RGB燈的顏色能千變?nèi)f化的原因是因?yàn)槠鋬?nèi)部集成了3個(gè)獨(dú)立的3原色燈珠,然后使用PWM波控制每個(gè)燈珠處在不同的亮度,便可以得到不同的色彩。但是一個(gè)RGB燈可能會(huì)占用多個(gè)端口,想控制很多個(gè)RGB燈便是有些難度,好在隨著集成工藝的發(fā)展,這一切不再是問題,如今的工藝促使了一種新型燈珠的出現(xiàn),那就是單總線LED。
簡單點(diǎn)來說就是這種類型的燈珠內(nèi)置了一個(gè)驅(qū)動(dòng)電路,它控制著燈珠發(fā)出的顏色,并且有一個(gè)數(shù)據(jù)輸入口,意味著我們可以往在這個(gè)燈珠里面輸入數(shù)據(jù),然后燈珠內(nèi)部的電路就會(huì)驅(qū)動(dòng)的燈珠發(fā)出我們想要的顏色。這個(gè)電路呢還有一個(gè)數(shù)據(jù)的輸出口,也就是說它可以將接受到的數(shù)據(jù)再次發(fā)送出去,送給下一個(gè)燈珠的輸入,所以這使得所有的燈珠都可以連在一起,只需要使用一個(gè)IO口控制,這就相比傳統(tǒng)的RGB燈節(jié)省了很多的端口。
這種類型的燈珠主要的核心就在它里面集成的那樣一個(gè)驅(qū)動(dòng)電路,這種類型的驅(qū)動(dòng)電路有很多種,例如常見的WS2811,2812,SK6812等等,所以用其制作完成的燈珠一般都使用驅(qū)動(dòng)電路的名字來命名。對(duì)于燈珠的大小型號(hào)呢,則有很多種類,例如5050,3535以及2020等封裝,大家搜索的時(shí)候,搜索驅(qū)動(dòng)電路的型號(hào)加上封裝型號(hào)就可以找到想要的單總線LED了。下面是WS2812采用5050封裝的圖片。
2345截圖20190522154003.png
本文會(huì)就WS2812這款最常用的驅(qū)動(dòng)芯片來講解其的控制方法以及在最后我會(huì)寫一些控制這類單總線LED的方法。



由于是單總線通訊,自然沒有時(shí)鐘信號(hào)線,所以通訊的時(shí)序變得非常重要,我找到一份WS2812的數(shù)據(jù)手冊,查看到了其中提到的輸入數(shù)據(jù)時(shí)序圖。
2345截圖20190522154127.png 2345截圖20190522154138.png

可以看到,2812芯片對(duì)著時(shí)序有著較為嚴(yán)格的需要,所以對(duì)于0碼和1碼,我們需要嚴(yán)格控制單片機(jī)延時(shí)的時(shí)間。并且這款芯片的時(shí)序大概都在納秒級(jí)的延時(shí),所以對(duì)于單片機(jī)的要求還是比較高的,我采用的是增強(qiáng)型的51單片機(jī),速度上足夠完成納秒級(jí)的延時(shí)。


下面看到的數(shù)據(jù)的輸入方法,可以看到每個(gè)數(shù)據(jù)包都是24bit長,也就是3個(gè)字節(jié),發(fā)送完第一個(gè)24bit數(shù)據(jù)包之后就是接著發(fā)送第二個(gè),可以看到在D2線上,第一個(gè)24bit數(shù)據(jù)包自動(dòng)被忽略了,這是由于WS2812的轉(zhuǎn)發(fā)機(jī)制,在其接受到第一個(gè)完整的24bit數(shù)據(jù)包之后,再接受到的數(shù)據(jù)包他會(huì)自動(dòng)將其發(fā)送給下一個(gè)燈珠,這就是為什么可以一根線控制所有LED燈的秘密。并且WS2812芯片還有鎖存的功能,也就是說送一次數(shù)據(jù)后,在下一回改變顏色之前都不需要再送數(shù)據(jù)了,內(nèi)部的鎖存電路會(huì)自動(dòng)記住當(dāng)前的顏色值,并控制燈珠一直保持著色彩。
2345截圖20190522154235.png

對(duì)于每一個(gè)24bit數(shù)據(jù)包,其格式如下:每一個(gè)字節(jié)都表示著顏色的亮度,從高位到低位分別是綠色(G),紅色(R),藍(lán)色(B),控制這三個(gè)顏色的亮度,我們就可以得到千變?nèi)f化的色彩。
2345截圖20190522154312.png


了解到了數(shù)據(jù)包的格式,數(shù)據(jù)手冊里面還給了一張應(yīng)用電路的圖片,很好的說明了這種單總線LED的連接方法。
2345截圖20190522154320.png

看完了數(shù)據(jù)手冊,下面就是對(duì)單片機(jī)編程,使其可以輸出對(duì)應(yīng)的波形了!



首先是對(duì)發(fā)送0碼和1碼的程序編寫,由于需要用到納秒級(jí)的延時(shí),我使用空語句來進(jìn)行軟件延時(shí),下面是發(fā)送0碼和1碼的代碼截圖。我這里是使用的STC15系列單片機(jī),使用內(nèi)部時(shí)鐘11.0592MHZ,如果有使用相同單片機(jī)的朋友請(qǐng)直接參考我的代碼,如果你的單片機(jī)類型不一樣或者時(shí)鐘頻率不一樣,最好使用示波器或者邏輯分析儀來得到精確的延時(shí)。
2345截圖20190522154408.png

完成了發(fā)送0碼和1碼之后,接著就是發(fā)送一個(gè)字節(jié)了,核心思路就是每次判斷字節(jié)高位的值來決定發(fā)送0還是1
2345截圖20190522154438.png

經(jīng)過簡單的編程,所有代碼就完成了,簡單的寫了一個(gè)程序,讓前三個(gè)燈亮起,呈紅色:
微信圖片_20190522153450.jpg

其實(shí)WS2812的編程較為容易,下面就來說一些我的改進(jìn)地方。
我編寫了一個(gè)使用串口控制RGB燈的程序,就是我可以在串口上發(fā)送數(shù)據(jù),實(shí)時(shí)的控制每個(gè)LED燈的顏色,這樣會(huì)方便后期一些動(dòng)畫效果的控制。我定義了一個(gè)數(shù)據(jù)格式,一個(gè)數(shù)據(jù)包含有5個(gè)字節(jié),分別是幀頭,LED燈的編號(hào),紅色(R)亮度值,綠色(G)亮度值以及藍(lán)色(B)亮度值。例如我想要控制第五個(gè)燈變成最亮的白色,我就發(fā)送
FFH 05H FFH FFH FFH 就可以了,下面是使用這個(gè)程序調(diào)出來的顏色:
微信圖片_20190522161641.jpg

其思路就是當(dāng)串口收到幀頭之后,就開始讀取燈的編號(hào)以及各個(gè)顏色的亮度值,然后再發(fā)送給LED燈珠即可。

這些就是單總線LED燈珠的使用方法了,其實(shí)編寫程序較為簡單,主要難點(diǎn)就是大家的時(shí)序一定要準(zhǔn)確,這樣才可以確保燈珠正常的點(diǎn)亮。



評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:357396 發(fā)表于 2019-9-15 15:50 | 顯示全部樓層
多謝樓主,學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

ID:470939 發(fā)表于 2019-9-24 20:42 | 顯示全部樓層
很有用
回復(fù)

使用道具 舉報(bào)

ID:385637 發(fā)表于 2019-9-25 09:00 | 顯示全部樓層
非常實(shí)用,請(qǐng)問有后面控制多個(gè)燈的原代碼嗎?
回復(fù)

使用道具 舉報(bào)

ID:190075 發(fā)表于 2019-11-11 19:56 | 顯示全部樓層
樓主,有資料程序可以下載嗎
回復(fù)

使用道具 舉報(bào)

ID:156220 發(fā)表于 2019-11-12 09:19 | 顯示全部樓層
謝謝樓主的講解,學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

ID:243394 發(fā)表于 2019-11-12 18:30 | 顯示全部樓層
謝謝樓主的講解
回復(fù)

使用道具 舉報(bào)

ID:475845 發(fā)表于 2020-4-1 16:40 | 顯示全部樓層
51黑,有你更精彩
回復(fù)

使用道具 舉報(bào)

ID:344220 發(fā)表于 2020-5-12 10:19 來自手機(jī) | 顯示全部樓層
很方便,感謝樓主
回復(fù)

使用道具 舉報(bào)

ID:369321 發(fā)表于 2020-5-12 22:49 | 顯示全部樓層
很有用
回復(fù)

使用道具 舉報(bào)

ID:86450 發(fā)表于 2020-9-22 16:21 | 顯示全部樓層

謝謝樓主的講解,學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

ID:15745 發(fā)表于 2022-12-14 15:46 | 顯示全部樓層
剛好要用到這種單總線的燈,學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

ID:727062 發(fā)表于 2024-2-23 20:10 | 顯示全部樓層
厲害
回復(fù)

使用道具 舉報(bào)

ID:433219 發(fā)表于 2024-3-8 08:42 | 顯示全部樓層
初學(xué)詳解系列   d^_^b
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表