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

[复制链接]
 楼主| 6552918 发表于 2022-11-27 16:26 | 显示全部楼层 |阅读模式
<
本帖最后由 6552918 于 2022-11-29 21:04 编辑

#申请原创# #技术资源#
常用的幻彩LED灯有WS2812B和WS2811等,下面我介绍一下使用RD8T36P驱动WS2812B
先来看一下WS2812B的技术介绍
f6fa903b30638203ee374deb1d5acedd
f435b6533f57d7602eba588e5c25caac
a6eee1201309a7236aa27dc25f138e74
495d6878c65c371cb513d70f612970ac
看以看出,码元周期是1.25us(800K)
57d1ede40aeff903560496a8c7f2f370
WS2812B只需要一个管脚即可进行数据传输。
常见的驱动方式如下

 ----
优点
缺点
驱动方式
IO驱动方式
控制简单,控制灵活
驱动周期容易被打断,容易显示出错
  SPI查询方式
控制较简单
占用管脚多,受SPI时钟限制,有时无法达到最大速度
  SPI中断方式
控制较简单,可以尽量不受中断干扰(需配置为最高优先级)
占用管脚多,受SPI时钟限制,有时无法达到最大速度
  SPI+DMA方式
不受中断干扰,可以减轻CPU负担
控制复杂,占用管脚多,受SPI时钟限制,有时无法达到最大速度
  PWM查询方式
可以灵活配置驱动频率,可以最大速度驱动
控制较复杂,容易被中断干扰,容易显示出错
  PWM中断方式
可以灵活配置驱动频率,可以最大速度驱动,可以尽量不受中断干扰(需配置为最高优先级)
控制较复杂
  PWM+DMA方式
不受中断干扰,可以最大速度驱动,,可以减轻CPU负担
控制复杂
由于RD8T36P是8051内核,没有DMA,所以我采用了IO和PWM方式
相关初始化如下:
5ccb27e14303ad5450f6c28ce159bfee
20dea6bdfa7493894edb7dcd9bb8b4d3
在PWM初始化中发现一处库函数错误
PWM_PolarityConfig(PWM30,PWM_POLARITY_INVERT);
4b78d74acedba183ed971344a3c60dee
另外,还有个编程上的问题需要注意一下。
4f61f1000776c4cec551a77a3f59d2f6
void WS281x_Show(void)实现了各种控制方式的输出啊,相关说明如下
4c822ab58306a96d9a4fb168c981816c
由于PWM3输出和TIM3共用中断,所以在TM3中断中添加先关PWM处理函数
d04fd6e72be34b3fa0a2c586e2ef2c0a
835e50d4d0813d051690125c88dce11a
使用GPIO方式驱动,需要将WS281X.h内的PWM_IRQ宏和WS2812_GPIO_Mode宏关闭
9e6c938041164794557b64083b1e7ff5
使用GPIO驱动WS2812B波形如下
04fb64b900326549cf653e6c15b4d4b7
IO控制0码周期
3907b7c8204f6dde3bacf3890edf962a
代码和波形对应关系
4f53f435ba0f7b3242a5e9278f3bc340
IO控制1码周期
db29eb2381eb3574c50b1b905c25c62f
代码和波形对应关系
低电平维持时间是由代码执行时间决定的,所以低电平后没有加延时
e04bc13891a629608221513bf159e5b5
准备使用PWM驱动时,发现如下问题
最高速度800K(周期1.25us)时PWM输出和进入中断处理时间关系
d7c317800a17a892c68c51f5c81c4a5b
PWM周期为1.25,占空比为50%是PWM管脚输出
0c786ce63422345239a6e14140c87b6f
周期为1.25时,进中断周期为3us左右
5e054a14bcec444a4ceba552878a9437
从上述波形来看,在PWM周期为1.25us情况下,进中断的时间需要1.5us多,无法实现在一个PWM周内处理完前一个PWM的中断。也就是无法实现中断方式让PWM在800K频率下驱动WS2812(800K是WS2812的最大速度)
为了实现使用PWM驱动WS2812B,我牺牲驱动速度,将速度降到位200K(5us)
PWM模式1码和0码的占空比对应的时间
64fc023466004265c78a8a102c33acf3
e7361d9fe1437e0d1ff847d603cbf477
PWM中断方式选择
62aded177a7ec49320bd1d5fc401915e
PWM中断方式0码,高电平320ns,高电平4.7us和程序设定基本一致
61276818b86512cd94334f03d4f1c843
PWM中断方式1码,高电平620ns,高电平4.4us和程序设定基本一致
ba9fdccfd66ea4957f644c7c84184958
PWM查询方式选择
1d705b57a7b19bc341438c813e571d89
PWM查询模式下0码,高电平320ns,高电平4.7us和程序设定基本一致(与PWM中断方式一致)
17cbb86fcbfab9b714aa25c9a716e27b
PWM查询方式1码,高电平620ns,高电平4.4us和程序设定基本一致与PWM中断方式一致)
至此,实现了GPIO、PWM查询方式和PWM中断这3种方式的WS2182B的驱动,代码理论还支持WS2811,但没有测试。
源码如下: NBK-RD8x3x Demo Code(PWM).zip (8.01 MB, 下载次数: 32)
视频如下: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实现的。

占用管脚多,速度有时跑不满
51xlf 发表于 2022-12-6 13:59 | 显示全部楼层
怎么快速修改周期数据呢?              
 楼主| 6552918 发表于 2022-12-6 14:10 | 显示全部楼层
51xlf 发表于 2022-12-6 13:59
怎么快速修改周期数据呢?

有个改周期的API,你自己看一下函数库
ulystronglll 发表于 2022-12-6 15:11 | 显示全部楼层
pwm+dma的效果怎么样              
 楼主| 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,可以看一下这个帖子
wilhelmina2 发表于 2023-2-4 21:23 | 显示全部楼层
WS281X的效果可以。              
 楼主| 6552918 发表于 2023-2-4 22:17 | 显示全部楼层
wilhelmina2 发表于 2023-2-4 21:23
WS281X的效果可以。

必须的
minzisc 发表于 2023-2-6 16:14 | 显示全部楼层
原来51单片机也可以实现的吗?              
 楼主| 6552918 发表于 2023-2-6 16:27 | 显示全部楼层
minzisc 发表于 2023-2-6 16:14
原来51单片机也可以实现的吗?

就是用8051的PWM中断实现的
febgxu 发表于 2023-3-11 20:47 | 显示全部楼层
为什么不通过延时实现WS281X程序
maudlu 发表于 2023-3-11 20:54 | 显示全部楼层
pwm是怎么驱动WS281X呢?
wangdezhi 发表于 2023-3-11 21:09 | 显示全部楼层
用WS2812制作的灯带控制程序非常实用
albertaabbot 发表于 2023-3-11 21:33 | 显示全部楼层
Ws2812 时序有要求吗               
pentruman 发表于 2023-3-11 21:39 | 显示全部楼层
WS2812用什么芯片做音频灯
janewood 发表于 2023-3-11 21:45 | 显示全部楼层
可以驱动WS281X点阵吗?              
houjiakai 发表于 2023-3-11 22:01 | 显示全部楼层
WS281X的效果怎么样?              
updownq 发表于 2023-3-11 22:13 | 显示全部楼层
这个pwm的周期是怎么固定改变的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

102

主题

1290

帖子

10

粉丝
快速回复 在线客服 返回列表 返回顶部
认证:北京汇冠触摸技术有限公司/电子工程师
简介:电子工程师,嵌入式应用爱好者。

102

主题

1290

帖子

10

粉丝
快速回复 在线客服 返回列表 返回顶部