国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

基于STM32F103C8T6驅(qū)動WS2812彩燈模塊點亮RGB燈

jf_88434166 ? 來源:jf_88434166 ? 作者:jf_88434166 ? 2025-12-04 11:29 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、WS2812模塊簡介

WS2812是一個集控制電路與發(fā)光電路于一體的智能外控LED光源。其外型與一個5050LED燈珠相同,每個元件即為一個像素點。像素點內(nèi)部包含了智能數(shù)字接口數(shù)據(jù)鎖存信號整形放大驅(qū)動電路,還包含有高精度的內(nèi)部振蕩器和12V高壓編程電流控制部分,有效保證了像素點光的顏色高度一致。
數(shù)據(jù)協(xié)議采用單線歸零碼的通訊方式,像素點在上電復位以后,DIN端接受從控制器傳輸過來的數(shù)據(jù),首先送過來的24bit數(shù)據(jù)被第一個像素點提取后,送到像素點內(nèi)部的數(shù)據(jù)鎖存器,剩余的數(shù)據(jù)經(jīng)過內(nèi)部整形處理電路整形放大后通過DO端口開始轉(zhuǎn)發(fā)輸出給下一個級聯(lián)的像素點,每經(jīng)過一個像素點的傳輸,信號減少24bit。像素點采用自動整形轉(zhuǎn)發(fā)技術,使得該像素點的級聯(lián)個數(shù)不受信號傳送的限制,僅僅受限信號傳輸速度要求。
LED具有低電壓驅(qū)動,環(huán)保節(jié)能,亮度高,散射角度大,一致性好,超低功率,超長壽命等優(yōu)點。將控制電路集成于LED上面,電路變得更加簡單,體積小,安裝更加簡便。

二、主要特點與LED特性參數(shù)

  1. 特點
    ● 控制電路與RGB芯片集成在一個5050封裝的元器件中,構成一個完整的外控像素點。
    ● 內(nèi)置信號整形電路,任何一個像素點收到信號后經(jīng)過波形整形再輸出,保證線路波形畸變不會累加。
    ● 內(nèi)置上電復位和掉電復位電路。
    ● 每個像素點的三基色顏色可實現(xiàn)256級亮度顯示,完成16777216種顏色的全真色彩顯示,掃描頻率不低于400Hz/s。
    ● 串行級聯(lián)接口,能通過一根信號線完成數(shù)據(jù)的接收與解碼。
    ● 任意兩點傳傳輸距離在不超過5米時無需增加任何電路。
    ● 當刷新速率30幀/秒時,低速模式級聯(lián)數(shù)不小于512點,高速模式不小于1024點。
    ● 數(shù)據(jù)發(fā)送速度可達800Kbps。
    ● 光的顏色高度一致,性價比高。
  2. LED參數(shù)

三、模塊引腳定義

VCC輸入電壓正極
GND輸入電壓負極
DI數(shù)據(jù)輸入
DO數(shù)據(jù)輸出,與下一聯(lián)級的DI連接

四、工作原理與數(shù)據(jù)協(xié)議

工作原理

  1. 高度集成的像素級控制
    WS2812 本質(zhì)上是將一個小型控制器和 3 顆小功率 LED 集成在一起的智能光源?。其封裝內(nèi)包含:
  • 精密振蕩器:提供約 800 kHz 的時鐘參考,確保協(xié)議時序穩(wěn)定;?
  • 數(shù)字移位寄存器:按順序接收并鎖存 24 bit 的顏色數(shù)據(jù);?
  • 信號重塑單元:對接收到的微弱信號進行再生放大,保證后級級聯(lián)時信號不失真;?
  • 恒流驅(qū)動模塊:為 R、G、B 三色 LED 提供精確的驅(qū)動電流,保證色彩一致性;?
  1. 信號重塑與級聯(lián)能力
    當?shù)谝活w WS2812 接收到完整的 24 bit 數(shù)據(jù)并將其鎖存后,余下的數(shù)據(jù)(即除自身所用的 24 bit 外)會被 信號重塑電路 放大并輸出到 DOUT,引入下一級的 DIN 端?。這一機制使得即使在長鏈(理論上可達數(shù)千點)中,每一級仍能收到清晰、符合時序的波形,無需額外的中繼或放大器

數(shù)據(jù)協(xié)議

  1. 單線編碼
    WS2812 只需一根數(shù)據(jù)線即可傳輸所有信息,協(xié)議利用“高電平時長”區(qū)分 0/1:
    ‘0’ 碼:高電平約 0.35 μs(±150 ns),低電平約 0.8 μs,總周期 ≈ 1.25 μs;?
    ‘1’ 碼:高電平約 0.7 μs,低電平約 0.6 μs,總周期 ≈ 1.25 μs;?
    這種編碼在高電平和低電平上都不歸零于同一電平,不僅簡化了硬件設計,還提升了抗抖動能力。

  2. 24 Bit 數(shù)據(jù)格式
    每個像素點需要 24 bit,按 G7…G0 → R7…R0 → B7…B0 的順序依次發(fā)送?。例如,要顯示純綠(255,0,0),主控會發(fā)送:11111111 00000000 00000000;其中 11111111 對應十進制 255 的綠色通道,高位先發(fā)。
  3. 復位與數(shù)據(jù)鎖存
    在一連串 24 bit 數(shù)據(jù)發(fā)送完畢后,必須將數(shù)據(jù)線拉低 > 50 μs,WS2812 內(nèi)部的移位寄存器才會被復位并將新接收的數(shù)據(jù)輸出到 LED 驅(qū)動單元,否則會出現(xiàn)刷新失敗?。
  4. 總線級聯(lián)
    WS2812 擁有內(nèi)置信號整形功能,能將余下的數(shù)據(jù)完整透傳至下一級,無需中斷或額外控制。這使得在同一根數(shù)據(jù)線下,可以串聯(lián)數(shù)十、乃至上千顆 WS2812,主控只需一次完整的數(shù)據(jù)發(fā)送即可更新整條鏈?。

通過上述工作原理與協(xié)議解讀,在有多個led級聯(lián)的情況下,先發(fā)送第一個led的數(shù)據(jù),后第二個、第三個、以此類推。

五、STM32F103C8T6驅(qū)動示例

1.引腳接線

STM32F103C8T6WS2812
5V5V,注意:如果多個級聯(lián)要外接電源,不要用單片機的5V
GNDGND
PA0DI
2. 代碼示例
WS2812.c
#include "ws2812.h"

void WS2812_Init(void) {
	GPIO_InitTypeDef GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	TIM_OCInitTypeDef TIM_OCInitStructure;
	DMA_InitTypeDef DMA_InitStructure;
	
    //使能 TIM2、DMA1 和 GPIOA 時鐘
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);   // TIM2 定時器時鐘
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);     // DMA1 總線時鐘
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  // GPIOA 時鐘
	
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;		
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);

    TIM_InternalClockConfig(TIM2);
	
	TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseInitStructure.TIM_Period = 90 - 1;		//ARR
	TIM_TimeBaseInitStructure.TIM_Prescaler = 1 - 1;		//PSC
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
	
	TIM_OCStructInit(&TIM_OCInitStructure);
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
	TIM_OCInitStructure.TIM_Pulse = 0;		//CCR
	TIM_OC1Init(TIM2, &TIM_OCInitStructure);
	
	DMA_DeInit(DMA1_Channel2);
	DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&TIM2- >CCR1;
	DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
	DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
	DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)My_ws_buf;
	DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
	DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
	DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
	DMA_InitStructure.DMA_BufferSize = 0;
	DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
	DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
	DMA_InitStructure.DMA_Priority = DMA_Priority_High;
	DMA_Init(DMA1_Channel2, &DMA_InitStructure);
	
	TIM_DMACmd(TIM2, TIM_DMA_Update, ENABLE);
}

/**
 * @brief  設置單顆 WS2812B 燈的 RGB 顏色(十進制 0–255)
 * @param  r 紅色分量,0 表示關閉,255 表示最大亮度
 * @param  g 綠色分量,0 表示關閉,255 表示最大亮度
 * @param  b 藍色分量,0 表示關閉,255 表示最大亮度
 */
void WS2812B_SetColor(uint32_t r, uint32_t g, uint32_t b)
{
    uint16_t *p = My_ws_buf;         
    uint32_t mask, rep, bit;          
    uint32_t GRB_Data;
    
    GRB_Data = ((g & 0xFFU) < < 16)
             | ((r & 0xFFU) < < 8)
             |  (b & 0xFFU);         
 
    for (rep = 0; rep < LED_REPEAT; rep++) {
        mask = 1UL < < (BITS_PER_LED - 1);
        for (bit = 0; bit < BITS_PER_LED; bit++, mask > >= 1) {
            *p++ = (GRB_Data & mask) ? WS2812_HIGH : WS2812_LOW;
        }
    }
}

//發(fā)送信號
void WS2812B_Send(void)
{
    //清除 DMA 標志、重載傳輸長度
    DMA_ClearFlag(DMA1_FLAG_TC2);
    DMA_SetCurrDataCounter(DMA1_Channel2, LED_REPEAT * BITS_PER_LED);

    //啟動 DMA & 定時器
    DMA_Cmd(DMA1_Channel2, ENABLE);
    TIM_Cmd(TIM2, ENABLE);

    //等待傳輸完成
    while (!DMA_GetFlagStatus(DMA1_FLAG_TC2));

    //關閉 TIM & DMA 并清標志,產(chǎn)生 >50μs 復位低電平
    TIM_Cmd(TIM2, DISABLE);
    DMA_Cmd(DMA1_Channel2, DISABLE);
    DMA_ClearFlag(DMA1_FLAG_TC2);
}

void ws2812_OFF(void)
{
	WS2812B_SetColor(0, 0, 0);
	WS2812B_Send();
}

main.c

#include "stm32f10x.h"                  // Device header
#include "ws2812.h"
#include "delay.h"

static const uint8_t color_list[][3] = {
    {255,    0,   0},  // 紅
    {255,  125,   0},  // 橙
    {255,  255,   0},  // 黃
    {  0,  255,   0},  // 綠
    {  0,  255, 255},  // 青
    {  0,    0, 255},  // 藍
    {255,    0, 255},  // 紫
    {  0,    0,   0}   // 關燈
};

uint16_t NUM_COLORS = sizeof(color_list) / sizeof(color_list[0]);
uint32_t idx = 0;

int main(void)
{
    WS2812_Init(); 
//	ws2812_OFF();
	
	while(1){
		uint8_t r = color_list[idx][0];
        uint8_t g = color_list[idx][1];
        uint8_t b = color_list[idx][2];
        
        WS2812B_SetColor(r, g, b);
        WS2812B_Send();
		
		Delay_ms(1000);
		idx = (idx + 1) % NUM_COLORS;
	}
}
  1. 效果展示

總結

WS2812 是一款將控制電路、信號整形放大和恒流驅(qū)動與 RGB 發(fā)光單元集成于 5050 封裝中的智能化全彩 LED 模塊,僅需一根數(shù)據(jù)線即可以 800 kbps 單線協(xié)議傳輸精確的色彩控制信號,從而實現(xiàn)鏈式級聯(lián)上千點的獨立尋址與顯示?。內(nèi)部集成的數(shù)字移位寄存器與精密振蕩器可按 GRB 順序(G7…G0→R7…R0→B7…B0)接收并鎖存 24 bit 顏色數(shù)據(jù),隨后通過恒流驅(qū)動電路根據(jù)不同位的高低電平寬度產(chǎn)生對應亮度,并將余下數(shù)據(jù)重塑后輸出到下一顆,實現(xiàn)信號級聯(lián)?。可廣泛應用于燈帶、燈環(huán)、可穿戴燈效、舞臺裝飾等場景?。
注意事項:

  • 嚴格時序控制:軟件模擬易受中斷或系統(tǒng)抖動影響,易導致亮度不穩(wěn)定或色偏,推薦使用定時器+DMA、SPI 或 RMT(ESP32)等硬件外設生成 PWM 波形,以確保 T0H/T1H 與 T0L/T1L 寬度的高精度?。
  • 復位低電平:發(fā)送完 24 bit 數(shù)據(jù)后,必須將數(shù)據(jù)線保持低電平 > 50 μs,WS2812 內(nèi)部才會將新數(shù)據(jù)鎖存并更新輸出;低于此時長可能導致刷新失敗或出現(xiàn)殘影?。
  • 鏈式級聯(lián)能力:得益于內(nèi)部信號整形,單線級聯(lián)可支持 ≥ 1 024 個像素刷新(30 fps 條件下);在更高刷新率或更長鏈長場景下,建議分段布線并選用多路輸出或并行總線以降低時延和信號累積失真?。

以上僅為個人觀點供參考,如有問題歡迎大家留言討論,如需源碼可點贊收藏加關注,在評論留下郵箱獲取!!!

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • STM32單片機
    +關注

    關注

    59

    文章

    553

    瀏覽量

    60366
  • WS2812
    +關注

    關注

    0

    文章

    34

    瀏覽量

    7074
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    【瑞薩RA6E2】點亮 WS2812 全彩點陣屏

    通過單總線方式控制,只需一個 IO 口,就可以點亮數(shù)千個珠。 這里使用 RA6E2 點亮 WS2812
    發(fā)表于 11-05 08:36

    STM32控制WS2812 RGB帶的代碼分享

    STM32控制WS2812 RGB帶的代碼分享
    發(fā)表于 12-15 07:09

    WS2812硬件電路設計資料分享

    效及亮度;硬件設計:原理圖思路:1.MCU選用STM32F103C8T6(用的時候嘉立創(chuàng)48一片,現(xiàn)在125一片,吃相難看),剛好之前項目有用剩的103C8T6,本著時間就是金錢的想法,就選了這款芯片;兩個按鍵一個用于復位,
    發(fā)表于 02-11 08:00

    STM32F103C8T6+PWM+DMA驅(qū)動WS2812帶的方法

    #STM32+PWM+DMA驅(qū)動 WS2812帶#文章目錄1.理論:2代碼:理論:使用STM32F103C8T6
    發(fā)表于 02-22 06:59

    怎樣使用STM32F103C8T6微控制器去點亮LED

    STM32F103C8T6是什么呢?怎樣使用STM32F103C8T6微控制器去點亮LED呢?點亮LED
    發(fā)表于 02-24 07:23

    STM32F103C8T6核心板的資料合集免費下載

    本文檔的主要內(nèi)容詳細介紹的是STM32F103C8T6核心板的資料合集免費下載包括了:STM32F103C8T6核心板測試程序(PC13閃爍),STM32F103C8T6核心板測試程序(RTC
    發(fā)表于 06-04 08:00 ?799次下載
    <b class='flag-5'>STM32F103C8T6</b>核心板的資料合集免費下載

    STM32F103C8T6原理圖

    STM32F103C8T6原理圖免費下載。
    發(fā)表于 06-02 10:01 ?216次下載

    利用STM32F103C8T6最小系統(tǒng)板點亮流水燈

    利用STM32F103C8T6最小系統(tǒng)板點亮流水燈STM32F103C8T6芯片簡介核心板原理圖搭建流水燈電路修改工程模板代碼實現(xiàn)STM32F103C8T6芯片簡介根據(jù)
    發(fā)表于 11-17 17:06 ?60次下載
    利用<b class='flag-5'>STM32F103C8T6</b>最小系統(tǒng)板<b class='flag-5'>點亮</b>流水燈

    利用STM32F103C8T6最小系統(tǒng)板點亮流水燈

    利用STM32F103C8T6最小系統(tǒng)板點亮流水燈STM32F103C8T6芯片簡介核心板原理圖搭建流水燈電路修改工程模板代碼實現(xiàn)STM32F103C8T6芯片簡介根據(jù)
    發(fā)表于 11-17 18:06 ?97次下載
    利用<b class='flag-5'>STM32F103C8T6</b>最小系統(tǒng)板<b class='flag-5'>點亮</b>流水燈

    STM32F103C8t6程序下載

    STM32F103C8t6程序下載
    發(fā)表于 11-24 18:21 ?245次下載
    <b class='flag-5'>STM32F103C8t6</b>程序下載

    WS2812硬件電路設計

    效及亮度;硬件設計:原理圖思路:1.MCU選用STM32F103C8T6(用的時候嘉立創(chuàng)48一片,現(xiàn)在125一片,吃相難看),剛好之前項目有用剩的103C8T6,本著時間就是金錢的想法,就選了這款
    發(fā)表于 12-07 16:36 ?36次下載
    <b class='flag-5'>WS2812</b>硬件電路設計

    STM32F103C8T6+PWM+DMA驅(qū)動 WS2812

    #STM32+PWM+DMA驅(qū)動 WS2812帶#文章目錄1.理論:2代碼:理論:使用STM32F103C8T6
    發(fā)表于 12-27 19:29 ?225次下載
    <b class='flag-5'>STM32F103C8T6</b>+PWM+DMA<b class='flag-5'>驅(qū)動</b> <b class='flag-5'>WS2812</b><b class='flag-5'>燈</b>帶

    使用ESP8266驅(qū)動WS2812彩燈

    本篇介紹ESP8266使用NeoPixel庫來驅(qū)動IOT Kit板載WS2812彩燈
    的頭像 發(fā)表于 05-19 14:31 ?4872次閱讀
    使用ESP8266<b class='flag-5'>驅(qū)動</b><b class='flag-5'>WS2812</b><b class='flag-5'>彩燈</b>

    最簡WS2812類似RGB驅(qū)動方法

    最簡WS2812類似RGB驅(qū)動方法
    的頭像 發(fā)表于 06-19 17:51 ?4826次閱讀
    最簡<b class='flag-5'>WS2812</b>類似<b class='flag-5'>RGB</b><b class='flag-5'>燈</b>條<b class='flag-5'>驅(qū)動</b>方法

    分享STM32F103C8T6原理圖

    STM32F103C8T6最小系統(tǒng)原理圖
    發(fā)表于 08-29 15:52 ?156次下載