这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【原创】尝试用STM32F103点亮SW2812b灯带--from任逸帆

共48条 1/5 1 2 3 4 5 ›| 跳转至

【原创】尝试用STM32F103点亮SW2812b灯带--from任逸帆

工程师
2023-03-20 17:49:47   被打赏 50 分(兑奖)     打赏

前几天在网上买了一条一米的SW2812b的灯带,有三十个灯珠,都是全彩的RGB,问客服要了相关的规格书,来看看是怎么编程的。

首先拿到产品,看见一共有五个线头,除了VCC和GND外,还有两根补压线和一根数据传输线,补压线是为了在灯带过长电压不足的情况下可以另接电源。WS2812灯带采用了串行通信方式,通过单一的数据线就可以实现控制,这样可以方便地和其他模块集成。

14.jpg

接下来看看它的规格书上有几点需要注意。首先就是它独有的波形。

 

15.png

16.png

在传输数据时,发送器会将要传输的数据编码成一系列的脉冲信号,每个脉冲信号的高电平和低电平分别表示了一个二进制位的数据值,同时每个脉冲信号的时序也是有特定要求的。WS2812B在接收到数据后,会自动解码并控制RGB LED的颜色。整个传输过程是由发送器对数据进行编码,通过单线传输到WS2812B,然后WS2812B自动解码并控制LED颜色的过程。由于是单线传输,因此在数据传输过程中需要严格控制时间和电平的要求。

17.png

然后就是要注意对灯珠传输数据时要按照G,R,B的顺序来传输,初次看时我没有注意到这点,导致灯带颜色总和我想要的不一致。

 

18.png

然后要考虑的就是以什么方式来传输数据,由于波形是通过高低电平的不停变换实现的,所以利用GPIO也可以实现,但是我们平常用的系统定时器的最小单位就是1um,达不到等到要求的时序。于是我想先用最简单的硬件延时来实现一下,就是__nop函数。一个nop大概需要14到15ns,0.25us需要16个nop左右。

这样当然是可以的,在一般情况下,使用系统的 NOP 函数也可以实现大部分的延时功能。但是需要注意的是,NOP 函数产生的延时时间是取决于 CPU 的时钟频率的,因此在不同的

硬件环境下,延时时间也可能会有所不同。此外,当延时时间比较长时,使用 NOP 函数会占用 CPU 的大量时间,从而影响系统的响应性和实时性。

 

还一种方案,使用定时器控制 WS2812B 灯带的时序也不会出现问题,因为 WS2812B 灯带的时序比较宽松,具体时间可以在 50us 左右,而 STM32F103 的定时器在默认情况下可以提供大约 72MHz 的时钟频率,精度是足够的。所以,使用 STM32F103 来控制 30 个 WS2812B 灯珠不会出现问题。

 

除了使用定时器来控制 WS2812B 灯带的时序,还有其他的控制方式,比如使用 DMA(直接存储器访问)控制 WS2812B 灯带。DMA 是一种特殊的硬件,可以在不占用 CPU 资源的情况下进行数据传输。在控制 WS2812B 灯带时,可以将灯带的数据存储在一块连续的内存区域中,并使用 DMA 控制器来实现数据的传输,从而控制 WS2812B 灯带的显示效果。

 

 

 

 

使用 DMA来控制PWM或者通过SPI 来实现通讯是个不错的方案,相比使用定时器来控制 WS2812B 灯带,DMA 的优点是可以减少 CPU 的负担,提高系统的响应速度和实时性。但是使用 DMA 控制 WS2812B 灯带需要具备一定的硬件知识和编程经验,我目前还在摸索中。

 

使用SPI 来控制的话,时钟频率需要满足 WS2812B 灯带的时序要求,即 T0H、T1H 和 Treset 的时间必须大于 350 ns,T0L 和 T1L 的时间必须大于 900 ns。

SPI 的数据格式需要满足 WS2812B 灯带的通信协议,即每个灯珠需要发送 24 位二进制数据,其中高位在前,低位在后,每一位都是一个由高电平和低电平组成的时序信号。

在 SPI 数据传输时,需要关闭 SPI 的硬件 CS 信号,以保证 SPI 的数据传输时序和 WS2812B 灯带的时序一致。

 

总之,使用 SPI 控制 WS2812B 灯带需要考虑到时序和数据格式的匹配问题,需要进行一定的时序分析和调试工作。与使用定时器或 DMA 相比,使用 SPI 的优势在于可以实现高速数据传输和较高的帧率,但同时也增加了硬件的成本和软件的复杂度。




助工
2023-03-20 18:10:26     打赏
2楼

感谢楼主的分享,很实用了。


专家
2023-03-20 18:52:31     打赏
3楼

感谢分享


高工
2023-03-20 18:54:08     打赏
4楼

感谢分享


高工
2023-03-20 18:55:50     打赏
5楼

感谢分享


高工
2023-03-20 18:56:49     打赏
6楼

感谢分享


工程师
2023-03-20 19:56:12     打赏
7楼

谢谢分享


工程师
2023-03-20 19:59:44     打赏
8楼

感谢分享


工程师
2023-03-20 20:13:38     打赏
9楼

感谢楼主的分享


工程师
2023-03-20 20:20:48     打赏
10楼

谢谢分享


共48条 1/5 1 2 3 4 5 ›| 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]