6552918 发表于 2022-8-19 22:34

【AT-START-WB415测评】PWM+DMA驱动WS2812B

WS2812B是市面上非常常用的RGB幻彩LED,WS2812B特性如下:       驱动WS2812B常用的方式有SPI、PWM、GPIO模拟PWM等方式。由于WS2812B对时序要求比较严格且时间精度较高(纳秒级),这3种方式各有各的缺点,SPI占用管脚多,PWM每个周期的控制比较困难,GPIO模拟PWM时序容易被干扰。因此,需要使用响应快,效率高的方式解决上述问题。然而,DMA就是解决上述问题的很好办法,DMA不需要CU干预即可执行指定的操作。所以,我在WB415上使用的是PWM+DMA实现了对WS2812B的精准控制,高效的实现了WS2812B各种显示效果。       接下来我们看看具体的实现方法因为tmr5的时钟为144M,所以800K对应的周期值为180,而WS2812B对应的0和1码对应占空比的值分别为如下输出频率为800K时,对应0码的高电平为350ns,0码的低电平为900ns接下来我们看一下灯珠初始化函数,理解一下WS2812B的数据格式每个灯珠的数据由24bit组成,分为8bitG; 8bit R; 8bit B.所以函数内有2个循环,一个循环为灯珠数,一个循环为bit数。在初始化时为熄灭状态,所以,所有的bit均需要复值为0码。这样操作完,显示状态的数组就配置完了。接下来我们再来看一下PWM输出控制的函数在中断模式下会涉及到DMA传输完中断和定时器溢出中断,相关说明如下:至此,使用PWM+DMA控制WS2812B的基本操作就完成了,至于显示效果的函数,请到源码文件内查看,在此就不再多说了,我会附上源码,有需要的可以自己看一下。@21ic大掌柜   @21ic小管家

earlmax 发表于 2022-8-20 14:04

spi可以直接操作。   

6552918 发表于 2022-8-20 14:12

earlmax 发表于 2022-8-20 14:04
spi可以直接操作。

管脚占用的多

juliestephen 发表于 2022-8-20 19:29

PWM+DMA怎么实现的?

6552918 发表于 2022-8-20 20:22

juliestephen 发表于 2022-8-20 19:29
PWM+DMA怎么实现的?

仔细看一下帖子,里面有源码

wangdezhi 发表于 2022-8-20 20:29

需要建立数组吗

6552918 发表于 2022-8-20 20:35

wangdezhi 发表于 2022-8-20 20:29
需要建立数组吗

看怎么点灯,如果不要幻彩显示,可以不用建立数组,要幻彩效果就要建立数组了,不然没法出效果

quickman 发表于 2022-8-20 20:55

WS2812B的性能还可以吗

6552918 发表于 2022-8-20 21:01

quickman 发表于 2022-8-20 20:55
WS2812B的性能还可以吗

当然可以,效果非常好

cooldog123pp 发表于 2022-8-21 10:22

写的很详细,标准文档,下载途径都做好,大家用的时候去找即可,还是感谢楼主。

tpgf 发表于 2022-9-8 11:46

这种控制方式极为灵活

晓伍 发表于 2022-9-8 11:52

WS2812B的性能还是很不错的

八层楼 发表于 2022-9-8 12:01

就是使用的引脚多了点

观海 发表于 2022-9-8 12:15

到底是io控制还是通讯控制啊

guanjiaer 发表于 2022-9-8 12:52

能发一下硬件连接图吗

6552918 发表于 2022-9-8 13:16

guanjiaer 发表于 2022-9-8 12:52
能发一下硬件连接图吗

WS2812B就一个VCC GND 和DIN,没啥复杂的

heimaojingzhang 发表于 2022-9-8 13:18

引脚数目和需要控制的led数目有关是吧

6552918 发表于 2022-9-8 13:32

heimaojingzhang 发表于 2022-9-8 13:18
引脚数目和需要控制的led数目有关是吧

基本没关系,灯珠都是串行级联的,若果灯珠实在太多,再多用几个PWM就行了

joyall 发表于 2022-9-9 08:54

不错,灯珠数量不多时用起来挺好,灯珠数量多了就太占内存了。

6552918 发表于 2022-9-9 09:15

joyall 发表于 2022-9-9 08:54
不错,灯珠数量不多时用起来挺好,灯珠数量多了就太占内存了。

是的,是一种空间换时间的方式
页: [1] 2
查看完整版本: 【AT-START-WB415测评】PWM+DMA驱动WS2812B