打印
[开发工具]

新定义MCU开发板测评 WS281X幻彩灯和PWM勾搭在一起才最配

[复制链接]
1552|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 6552918 于 2022-11-29 21:04 编辑

#申请原创# #技术资源#
常用的幻彩LED灯有WS2812B和WS2811等,下面我介绍一下使用RD8T36P驱动WS2812B
先来看一下WS2812B的技术介绍




看以看出,码元周期是1.25us(800K)

WS2812B只需要一个管脚即可进行数据传输。
常见的驱动方式如下

 ----
优点
缺点
驱动方式
IO驱动方式
控制简单,控制灵活
驱动周期容易被打断,容易显示出错
  SPI查询方式
控制较简单
占用管脚多,受SPI时钟限制,有时无法达到最大速度
  SPI中断方式
控制较简单,可以尽量不受中断干扰(需配置为最高优先级)
占用管脚多,受SPI时钟限制,有时无法达到最大速度
  SPI+DMA方式
不受中断干扰,可以减轻CPU负担
控制复杂,占用管脚多,受SPI时钟限制,有时无法达到最大速度
  PWM查询方式
可以灵活配置驱动频率,可以最大速度驱动
控制较复杂,容易被中断干扰,容易显示出错
  PWM中断方式
可以灵活配置驱动频率,可以最大速度驱动,可以尽量不受中断干扰(需配置为最高优先级)
控制较复杂
  PWM+DMA方式
不受中断干扰,可以最大速度驱动,,可以减轻CPU负担
控制复杂
由于RD8T36P是8051内核,没有DMA,所以我采用了IO和PWM方式
相关初始化如下:


在PWM初始化中发现一处库函数错误
PWM_PolarityConfig(PWM30,PWM_POLARITY_INVERT);

另外,还有个编程上的问题需要注意一下。

void WS281x_Show(void)实现了各种控制方式的输出啊,相关说明如下

由于PWM3输出和TIM3共用中断,所以在TM3中断中添加先关PWM处理函数


使用GPIO方式驱动,需要将WS281X.h内的PWM_IRQ宏和WS2812_GPIO_Mode宏关闭

使用GPIO驱动WS2812B波形如下

IO控制0码周期

代码和波形对应关系

IO控制1码周期

代码和波形对应关系
低电平维持时间是由代码执行时间决定的,所以低电平后没有加延时

准备使用PWM驱动时,发现如下问题
最高速度800K(周期1.25us)时PWM输出和进入中断处理时间关系

PWM周期为1.25,占空比为50%是PWM管脚输出

周期为1.25时,进中断周期为3us左右

从上述波形来看,在PWM周期为1.25us情况下,进中断的时间需要1.5us多,无法实现在一个PWM周内处理完前一个PWM的中断。也就是无法实现中断方式让PWM在800K频率下驱动WS2812(800K是WS2812的最大速度)
为了实现使用PWM驱动WS2812B,我牺牲驱动速度,将速度降到位200K(5us)
PWM模式1码和0码的占空比对应的时间


PWM中断方式选择

PWM中断方式0码,高电平320ns,高电平4.7us和程序设定基本一致

PWM中断方式1码,高电平620ns,高电平4.4us和程序设定基本一致

PWM查询方式选择

PWM查询模式下0码,高电平320ns,高电平4.7us和程序设定基本一致(与PWM中断方式一致)

PWM查询方式1码,高电平620ns,高电平4.4us和程序设定基本一致与PWM中断方式一致)
至此,实现了GPIO、PWM查询方式和PWM中断这3种方式的WS2182B的驱动,代码理论还支持WS2811,但没有测试。
源码如下: NBK-RD8x3x Demo Code(PWM).zip (8.01 MB)
视频如下:https://www.bilibili.com/video/BV1CD4y1e7uL/?vd_source=379505f5c723a533bd2f5f97bf385084

使用特权

评论回复
沙发
pmp| | 2022-12-4 21:14 | 只看该作者
这个比较酷了,炫彩的。              

使用特权

评论回复
板凳
claretttt| | 2022-12-4 21:24 | 只看该作者
之前在32上都是用的spi+dma实现的。

使用特权

评论回复
地板
6552918|  楼主 | 2022-12-5 09:31 | 只看该作者
claretttt 发表于 2022-12-4 21:24
之前在32上都是用的spi+dma实现的。

占用管脚多,速度有时跑不满

使用特权

评论回复
5
51xlf| | 2022-12-6 13:59 | 只看该作者
怎么快速修改周期数据呢?              

使用特权

评论回复
6
6552918|  楼主 | 2022-12-6 14:10 | 只看该作者
51xlf 发表于 2022-12-6 13:59
怎么快速修改周期数据呢?

有个改周期的API,你自己看一下函数库

使用特权

评论回复
7
ulystronglll| | 2022-12-6 15:11 | 只看该作者
pwm+dma的效果怎么样              

使用特权

评论回复
8
6552918|  楼主 | 2022-12-6 15:18 | 只看该作者
ulystronglll 发表于 2022-12-6 15:11
pwm+dma的效果怎么样

pwm+dma可以跑满速,但新定义的51不带DMA
https://bbs.21ic.com/icview-3247228-1-1.html,可以看一下这个帖子

使用特权

评论回复
9
wilhelmina2| | 2023-2-4 21:23 | 只看该作者
WS281X的效果可以。              

使用特权

评论回复
10
6552918|  楼主 | 2023-2-4 22:17 | 只看该作者
wilhelmina2 发表于 2023-2-4 21:23
WS281X的效果可以。

必须的

使用特权

评论回复
11
minzisc| | 2023-2-6 16:14 | 只看该作者
原来51单片机也可以实现的吗?              

使用特权

评论回复
12
6552918|  楼主 | 2023-2-6 16:27 | 只看该作者
minzisc 发表于 2023-2-6 16:14
原来51单片机也可以实现的吗?

就是用8051的PWM中断实现的

使用特权

评论回复
13
febgxu| | 2023-3-11 20:47 | 只看该作者
为什么不通过延时实现WS281X程序

使用特权

评论回复
14
maudlu| | 2023-3-11 20:54 | 只看该作者
pwm是怎么驱动WS281X呢?

使用特权

评论回复
15
wangdezhi| | 2023-3-11 21:09 | 只看该作者
用WS2812制作的灯带控制程序非常实用

使用特权

评论回复
16
albertaabbot| | 2023-3-11 21:33 | 只看该作者
Ws2812 时序有要求吗               

使用特权

评论回复
17
pentruman| | 2023-3-11 21:39 | 只看该作者
WS2812用什么芯片做音频灯

使用特权

评论回复
18
janewood| | 2023-3-11 21:45 | 只看该作者
可以驱动WS281X点阵吗?              

使用特权

评论回复
19
houjiakai| | 2023-3-11 22:01 | 只看该作者
WS281X的效果怎么样?              

使用特权

评论回复
20
updownq| | 2023-3-11 22:13 | 只看该作者
这个pwm的周期是怎么固定改变的?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:北京汇冠触摸技术有限公司/电子工程师
简介:电子工程师,嵌入式应用爱好者。

102

主题

1235

帖子

6

粉丝