熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2025-3-5 17:51
正文摘要:使用的是2T51單片機(jī)PWM的時(shí)鐘源為48MHz,請(qǐng)教各位大佬如何通過PWM寫時(shí)序去驅(qū)動(dòng)? |
coody_sz 發(fā)表于 2025-4-29 17:47 能發(fā)程序上來學(xué)習(xí)一下嗎? |
我用STC的AI8051U驅(qū)動(dòng)WS2812,用PWM或SPI都可以,DMA傳輸,不耗CPU時(shí)間,一次傳輸最多2700個(gè)燈。 |
要控制每一個(gè)脈沖的時(shí)間,這并不省事,如果本身程序有很多事情做,可以考慮再掛一塊單片機(jī)專門做這個(gè)事 |
用SPI模擬,不要用PWM |
World-semi 發(fā)表于 2025-4-3 17:04 你好,我也想要資料,謝謝! |
World-semi 發(fā)表于 2025-4-3 17:04 我也想要資料,文檔即可,謝謝 |
你好,我這邊是WS2811的原廠家,有關(guān)時(shí)序控制的問題,可以聯(lián)系我們,我們可以提供技術(shù)支持和源代碼,教你控制WS2811 |
一個(gè)周期造一個(gè)bit,可以先送幾個(gè)周期,確保數(shù)據(jù)是你想要的,再進(jìn)行下一步,一般要配合dma |
Jasminedebug 發(fā)表于 2025-3-6 13:02 STC的PWMM頻率是不能設(shè)置的!它只能是時(shí)鐘的多少分之一的分頻 就算是有能設(shè)置的型號(hào),320nS就是0.32uS,那就是說,最壞的情況就是,每0.32uS的時(shí)間就進(jìn)入中斷一次,用來處理下一個(gè)字節(jié) 系統(tǒng)幾乎沒有時(shí)間去做其它的事了,沒有人這么干的 |
lkc8210 發(fā)表于 2025-3-6 10:26 void WS_Set1(unsigned long dat) { unsigned char i; for(i = 0; i < 24; i++) { if(0x800000 == (dat & 0x800000) ) { WPWM_OUT_SET(42);//48MHz:1碼,高電平920ns,低電平320ns } else { WPWM_OUT_SET(12);//48MHz:0碼,高電平320ns,低電平920ns } dat <<= 1; } } 請(qǐng)問這樣寫切換0、1碼和用PWM溢出中斷切換0、1碼有什么區(qū)別? 是因?yàn)檫@樣寫導(dǎo)致0、1碼切換過慢是嗎? |
lkc8210 發(fā)表于 2025-3-6 10:26 void WS_Set1(unsigned long dat) { unsigned char i; //EA = 1; for(i = 0; i < 24; i++) { if(0x800000 == (dat & 0x800000) ) WPWM_OUT_SET(42);//48MHz:1碼,高電平920ns,低電平320ns else WPWM_OUT_SET(12);//48MHz:0碼,高電平320ns,低電平920ns dat <<= 1; } } 我想了解一下我這樣寫有什么問題,是因?yàn)檫@樣寫PWM的0、1碼切換過于慢,所以要用PWM溢出中斷來切換0、1碼是嗎? |
用PWM驅(qū)動(dòng)WS2811需要用PWM溢出中斷 在中斷內(nèi)更新下一個(gè)PWM的占空比 |
這個(gè)芯片跟PWM是沒什么關(guān)系的,亮度是由寫入的數(shù)據(jù)決定的 |
Powered by 單片機(jī)教程網(wǎng)