30725|23

1274

帖子

2

TA的资源

版主

楼主
 

WS2812灯珠的STM32驱动方式(一)——了解对手 [复制链接]

 
本帖最后由 通宵敲代码 于 2018-5-6 22:19 编辑


在这之前用5050的灯珠都是三色自己控制的,
还从未用过这种内部集成驱动芯片的灯珠,尽管知道。
这次手上来了case,恰巧方案中提出了这种灯珠,
就决定尝试一下。

深入了解自己的对手,才能有把握打胜仗,
先让我们看一下WS2812灯珠的相关资料吧。


以上照片来自某厂家官网的截图,可以看到同系列的LED型号还是不少的。尽管都是常见的5050封装,却由四脚与六脚之分,设计的时候一定要注意,
我们这次使用的是WS2812B,下面是有关这可灯珠的介绍。



这张图是对这狂灯珠的一些基本介绍,例如电源可以串联共用,
每个灯珠都自带信号整形电路,上电掉电复位电路,
每颗灯珠都可以实现RGB256级控制,扫描频率400KHz,
任意两点间通信距离不低于3米,至少可以级联1024颗,
看起来这款灯珠就是专为LED灯带设计的。



上面是关于这款灯带的一下电气参数,
供电电压可以使最常用的5V电源,限号传输延迟很小,
不错参数里有一点没提及,这款芯片内置了恒流驱动电路,
不但能保证灯珠颜色的良好一致,而且连限流电阻都可以省了。


这是关于W2812B单总线驱动的内容,
控制器可以连续发送24位GRB控制信号,
第一个灯珠截取前24位后,会显示到自己的LED上,
并会将其余的数据进行整形后发送给第二颗灯珠,
第二颗灯珠会截取第二组24位数据进行显示,
并继续转发剩下的,知道最后一组数据被显示为止。


这是对魅族24位GRB数据中信号0与信号1的介绍,
可以看到信号的周期为1.25us,
与前面的800kbps的通信频率正好对应。
信号0与1通过不同的占空比拉进行区分。

然而此处也报漏了一个问题,
我们都知道,常用的STM32F1系列单片机,内核速率只有72MHz,
对于主打高性能的STMF4系列也不过200MHz左右,
也就是说,STM32F1的一个指令周期需要大约14ns,
而正常情况下用HAL库控制单片机I/O翻转,
至少需要30个指令周期,将近500ns才能实现一次高低电平变化,
这就不用说还要形成严格的驱动信号,来控制LED显示颜色了,

其实不光HAL库不行,用最新的LL库也一样,最大也不超过5MHz,
即使是直接用寄存器驱动I/O,也不过只能达到12MHz的翻转速度,
就是F4系列直接用寄存器驱动,虽然可以超频到240MHz,
让I/O翻转速率达到80MHz,然而并没有什么卵用,
先不说稳定性咋样,就但是30多块钱一片的F4就吃消不起。

所以这里希望的大家如果用到WS2812系列的LED灯珠的话,
希望大家能记住这条结论,免得在原理问题上浪费时间,
STM32以及所有比他性能还低的单片机,用I/O翻转的方式,
是很难驱动WS2812系列灯珠的,除非你是土豪直接上400M的F7,
或者你的片子啥事都不干就驱动一串LED。

那难道STM32就没法驱动WS2812这种灯珠了吗,答案当然是能了。
具体怎们驱动我留到下节再说,这里就不啰嗦了。

下面是WS2812的串联驱动电路,
到了WS2813系列,连那颗电容都可以省掉不焊,
是不是很简单呢




最新回复

支持~~~   详情 回复 发表于 2022-8-8 12:18
点赞 关注(7)
 

回复
举报

1274

帖子

2

TA的资源

版主

沙发
 
本帖最后由 通宵敲代码 于 2018-5-6 22:23 编辑


WS2812B规格书.pdf (433.51 KB, 下载次数: 392)
WS2813_ABC规格书-201705_17101023100425.pdf (691.75 KB, 下载次数: 203)
WS2813E规格书(修改)-201705_17101023122789.pdf (675.22 KB, 下载次数: 184)
WS2813-Mini规格书-201705_17101023111383.pdf (631.04 KB, 下载次数: 167)
WS2815规格书201705_17101023135673.pdf (706.2 KB, 下载次数: 207)

附上WS2812,WS2813,WS2815系列灯珠的手册








 
 

回复

360

帖子

0

TA的资源

纯净的硅(初级)

板凳
 
謝謝分享。
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(初级)

4
 
 
 

回复

190

帖子

1

TA的资源

一粒金砂(中级)

5
 
72m怎么不行啊,不是太懂

点评

什么72m??  详情 回复 发表于 2018-8-20 17:37
 
 
 

回复

1274

帖子

2

TA的资源

版主

6
 
huihuihaha 发表于 2018-8-20 17:31
72m怎么不行啊,不是太懂

什么72m??
 
 
 

回复

190

帖子

1

TA的资源

一粒金砂(中级)

7
 
103的主频72M啊,驱动这个速率不行吗,看的不是太懂
 
 
 

回复

34

帖子

1

TA的资源

一粒金砂(中级)

8
 

就是72Mhz的主频嘛

点评

对啊,F103不都是72M主频吗。 没事干嘛降频使用呢。  详情 回复 发表于 2018-8-21 08:57
 
 
 

回复

34

帖子

1

TA的资源

一粒金砂(中级)

9
 
楼主是不是理解错了啊,51单片机大把够用啊。1位==1.25us,一帧才:24*1.25us==30us.   20ms==20000us,约等于666帧,即600多的LED灯啦。

点评

1位是1.25us,但一位数据要通过占空比来表示0或1, 也就是说这1.25us的时间还要细分数份。 再者现在的1T增强型51单片机时钟频率确实够用, PWM控制也完全没问题,但没有DMA通道, 数据通信会占用太多的系统时  详情 回复 发表于 2018-8-21 08:56
 
 
 

回复

1274

帖子

2

TA的资源

版主

10
 
天地摩登恒 发表于 2018-8-20 21:25
楼主是不是理解错了啊,51单片机大把够用啊。1位==1.25us,一帧才:24*1.25us==30us.   20ms==20000us,约等 ...

1位是1.25us,但一位数据要通过占空比来表示0或1,
也就是说这1.25us的时间还要细分数份。

再者现在的1T增强型51单片机时钟频率确实够用,
PWM控制也完全没问题,但没有DMA通道,
数据通信会占用太多的系统时间,不划算。

这颗灯有用Arduino实现控制的方案,
具体效果未做测试,不做评价,但方案可用
 
 
 

回复

1274

帖子

2

TA的资源

版主

11
 

对啊,F103不都是72M主频吗。
没事干嘛降频使用呢。
 
 
 

回复

190

帖子

1

TA的资源

一粒金砂(中级)

12
 
我们都知道,常用的STM32F1系列单片机,内核速率只有72MHz,
对于主打高性能的STMF4系列也不过200MHz左右,
也就是说,STM32F1的一个指令周期需要大约14ns,
而正常情况下用HAL库控制单片机I/O翻转,
至少需要30个指令周期,将近500ns才能实现一次高低电平变化,
这就不用说还要形成严格的驱动信号,来控制LED显示颜色了,

我的疑问就在这,这也是个问题,103驱动这个绰绰有余,但是楼主说的主频好像不够,甚至F4的主频还不够,

点评

注意理解,我说的是用I/O翻转方式驱动频率不够, 整篇文章(见二、三系列)都是用STM32F1实现的驱动, 怎么会是STM32的主频频率不够呢。  详情 回复 发表于 2018-8-22 16:56
 
 
 

回复

1274

帖子

2

TA的资源

版主

13
 
huihuihaha 发表于 2018-8-22 16:51
我们都知道,常用的STM32F1系列单片机,内核速率只有72MHz,
对于主打高性能的STMF4系列也不过200MHz左右 ...

注意理解,我说的是用I/O翻转方式驱动频率不够,
整篇文章(见二、三系列)都是用STM32F1实现的驱动,
怎么会是STM32的主频频率不够呢。

点评

使用IO翻转方式  详情 回复 发表于 2018-9-7 16:44
 
 
 

回复

1632

帖子

4

TA的资源

纯净的硅(高级)

14
 
很不错的文章,我有段时间玩了很久,用STM8怎么也模拟不出这个时序,速度跟不上。

点评

芯片速度是硬伤啊  详情 回复 发表于 2018-8-27 11:26
个人签名科技改变生活
 
 
 

回复

1274

帖子

2

TA的资源

版主

15
 
眼大5子 发表于 2018-8-24 13:10
很不错的文章,我有段时间玩了很久,用STM8怎么也模拟不出这个时序,速度跟不上。

芯片速度是硬伤啊
 
 
 

回复

190

帖子

1

TA的资源

一粒金砂(中级)

16
 
通宵敲代码 发表于 2018-8-22 16:56
注意理解,我说的是用I/O翻转方式驱动频率不够,
整篇文章(见二、三系列)都是用STM32F1实现的驱动,
怎 ...

使用IO翻转方式
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

17
 
这里应该有两个坑,一个,时比特速率高,另一个,就是内存容量的问题,如果你只是跑马灯那样按照固定样式跑,就没关系,如果要根据图案来的话,就有存储问题了。存储容量限制了最大灯串数。
比特速率高,有两个方案可以解决,PWM+DMA  或 SPI+DMA都行。

点评

嗯,数据量大,需要外挂存储才行, F103那点容量,存不了几个数组。  详情 回复 发表于 2018-9-14 09:18
 
 
 

回复

307

帖子

4

TA的资源

一粒金砂(高级)

18
 
之前一直都不知道,还可以利用定时器控制DMA的单个数据传输,看了版主的代码,瞬间茅塞顿开醍醐灌顶啊
 
 
 

回复

1274

帖子

2

TA的资源

版主

19
 
spritez 发表于 2018-9-12 18:23
这里应该有两个坑,一个,时比特速率高,另一个,就是内存容量的问题,如果你只是跑马灯那样按照固定样式跑 ...

嗯,数据量大,需要外挂存储才行,
F103那点容量,存不了几个数组。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

20
 

如何使某几个灯珠是熄灭状态呢,应该发送什么颜色的数据???黑颜色吗?

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表