完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
STM32驱动WS2812B-2020RGB彩灯(一)
最近搞飞控,看到有些飞控上都使用的RGB彩灯,够酷炫,所以尝试着自己搞一个。 手上的硬件有一块自制的STM32F103最小系统板,一个同事焊好的WS2812B-2020灯板,正好。 首先需要搞清楚,RGB灯不是给电就能亮的,而是需要特定的高低电平时序,以下贴出具体参数: 首先,给我们看的是,RGB传输颜色信息,到底传的是什么? 上图表示的是4个灯珠串联,X1的DIN接MCU的一个IO口(注意,这里的IO口最好是能输出PWM的定时器通道口,具体原因后面解释),即D1,然后DO连接下一个灯珠的输入,即X2的DIN,以此类推,就将4个灯珠串联起来。具体电路连接如下图: 这里需要注意,该灯珠工作电压5V. 好了,基本连接我们搞清楚了,然后来看看具体数据怎么传输的。直接上图,如下: 数据自然是从我们连接的MCU的那个IO口出来的,如果我只连接了一个RGB灯,那么我需要从这个IO口输出一个24位的数据,即一个3字节的数据,这个24位的数据就是用来表示一个灯需要显示的颜色。因为光的三原色就是RGB(RED GREEN BLUE),有了三原色就可以组合成各种各样的颜色。每个颜色占8个位,需要注意的是,通常我们都是直接说RGB色,但是这里灯珠传输的颜色数值,顺序是GRB.当我需要让灯亮绿色,我就要发送0xff0000,当需要亮红色,就发送0x00ff00,蓝色0x0000ff.如果你想要其他颜色,就改变这里的值自己尝试。 好,上面我们说了亮一个灯,如果我需要亮两个,怎么搞?就是让我们的IO口输出两个24bit数据就可以了。当IO口输出了两个24bit数据后,第一个24bit数被第一个灯留下了,这个灯会自动的将剩下的24bit的数转发到后面去,当然,这里只剩下一个24bit了,就只有后面的第二个灯可以接收到了,如果你有第三个灯,没办法,没有数据了,就亮不了了。 同理,如果有4个灯,我就要发送4个24bit数据,这个应该可以理解了。有几个灯,就发送几个24bit数据。 ok!接下来要做的就是,怎么让每个灯珠识别我发送的24bit数据,所谓的数据,无非就是“0”和“1”的组合嘛!正常我发送一个数据,mcu内部会通过一系列的逻辑电路来识别是发送的是0还是1。但是灯珠没有那么多的电路,它是怎么识别的呢?我们来看下图: 上图就是RGB灯识别0 1码的具体表现形式。分析一下什么意思,在一个周期内,当我们接收到的信号高电平占T0H时间,低电平占T0L时间,那么就表示我接收到一个0数据。当一个周期内接收到的高电平占T1H时间,低电平占T1L时间,就表示我接收到一个1数据。所以说,我们在分析RGB驱动的时候,不是说我IO口给我一高电平,我就认为是1,给我一个低电平我就认为是0.这个是在理解初期常常会有误解的地方。我们使用一个周期内的占空比来确定接收到的是1值还是0值。 具体的周期和占空比,参数手册也有给到,参考如下: 好,这里就可以看到具体的时间了。比如,我要传输0值,高电平持续时间在220ns-380ns之间,低电平持续时间在580ns-1us之间,这个时间还是比较短的,在数据手册中有一句 800k的传输速率,我们计算一下1.25us,这个大约就是传输一个1值或者0值的周期。可见,需要MCU的主频足够高这个传输才比较靠谱。之前我用了一款合泰的单片机,最高主频12M,执行一条指令的周期就已经来不及灯的电平翻转了。这里使用32的主频72MHz,足够了。 好,到这里就可以解释前面为什么要用带PWM的IO口了,就是为了这里的周期和占空比考虑的,如果我用简单的IO翻转,要能精确控制这个时间,是很难的。PWM输出能够比较精确的输出我们想要的波形,从而方便驱动灯珠。 最后还有个RESET要说一下,这个RESET是非常重要的,当我们将24bit数据发送出去后,此时灯是不会亮的,它需要有一个大于280us的低电平过来,然后才会将刚刚发送过来的24bit数据应用到灯上,而这个低电平就是我们这里需要的RESET信号,这个问题我也遇到过,在下一篇分析代码部分我会贴出。 |
|
|
|
只有小组成员才能发言,加入小组>>
imx6ull 和 lan8742 工作起来不正常, ping 老是丢包
2893 浏览 0 评论
3354 浏览 9 评论
3034 浏览 16 评论
3528 浏览 1 评论
9139 浏览 16 评论
1261浏览 3评论
651浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
642浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2389浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1955浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-5 04:06 , Processed in 1.211601 second(s), Total 79, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号