找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

请问PWM要如何驱动WS2811

查看数: 1970 | 评论数: 14 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2025-3-5 17:51

正文摘要:

使用的是2T51单片机PWM的时钟源为48MHz,请教各位大佬如何通过PWM写时序去驱动?

回复

ID:111490 发表于 2025-5-5 10:10
coody_sz 发表于 2025-4-29 17:47
我用STC的AI8051U驱动WS2812,用PWM或SPI都可以,DMA传输,不耗CPU时间,一次传输最多2700个灯。

能发程序上来学习一下吗?
ID:1034262 发表于 2025-4-29 17:47
我用STC的AI8051U驱动WS2812,用PWM或SPI都可以,DMA传输,不耗CPU时间,一次传输最多2700个灯。
ID:879348 发表于 2025-4-29 15:08
要控制每一个脉冲的时间,这并不省事,如果本身程序有很多事情做,可以考虑再挂一块单片机专门做这个事
ID:108361 发表于 2025-4-29 13:02
用SPI模拟,不要用PWM
ID:607312 发表于 2025-4-29 10:49
World-semi 发表于 2025-4-3 17:04
你好,我这边是WS2811的原厂家,有关时序控制的问题,可以联系我们,我们可以提供技术支持和源代码,教你控 ...

你好,我也想要资料,谢谢!
ID:1110477 发表于 2025-4-4 04:40
World-semi 发表于 2025-4-3 17:04
你好,我这边是WS2811的原厂家,有关时序控制的问题,可以联系我们,我们可以提供技术支持和源代码,教你控 ...

我也想要资料,文档即可,谢谢
ID:1113066 发表于 2025-4-3 17:04
你好,我这边是WS2811的原厂家,有关时序控制的问题,可以联系我们,我们可以提供技术支持和源代码,教你控制WS2811
ID:1145034 发表于 2025-3-7 22:40
一个周期造一个bit,可以先送几个周期,确保数据是你想要的,再进行下一步,一般要配合dma
ID:401564 发表于 2025-3-7 09:28
Jasminedebug 发表于 2025-3-6 13:02
void WS_Set1(unsigned long dat)
{
    unsigned char i;    for(i = 0; i < 24; i++)

STC的PWMM频率是不能设置的!它只能是时钟的多少分之一的分频
就算是有能设置的型号,320nS就是0.32uS,那就是说,最坏的情况就是,每0.32uS的时间就进入中断一次,用来处理下一个字节
系统几乎没有时间去做其它的事了,没有人这么干的
ID:1144894 发表于 2025-3-6 13:02
lkc8210 发表于 2025-3-6 10:26
用PWM驱动WS2811需要用PWM溢出中断
在中断内更新下一个PWM的占空比

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;  
    }
}
请问这样写切换0、1码和用PWM溢出中断切换0、1码有什么区别?
是因为这样写导致0、1码切换过慢是吗?
ID:1144894 发表于 2025-3-6 11:26
lkc8210 发表于 2025-3-6 10:26
用PWM驱动WS2811需要用PWM溢出中断
在中断内更新下一个PWM的占空比

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;  
    }
}
我想了解一下我这样写有什么问题,是因为这样写PWM的0、1码切换过于慢,所以要用PWM溢出中断来切换0、1码是吗?
ID:161164 发表于 2025-3-6 10:26
用PWM驱动WS2811需要用PWM溢出中断
在中断内更新下一个PWM的占空比
ID:401564 发表于 2025-3-6 09:16
这个芯片跟PWM是没什么关系的,亮度是由写入的数据决定的

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表