收藏官网首页
查看: 319310|回复: 588

首发,分享一个STM32使用HAL库驱动WS2812B RGB5050方案

 

5

主题

29

帖子

98

积分

社区运营

Rank: 8Rank: 8

积分
98
QQ
跳转到指定楼层
楼主
发表于 2016-8-31 16:18:01 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
教您5分钟接入机智云,实现傻瓜式开发
本帖最后由 bigfanofloT 于 2016-11-28 15:25 编辑

一:WS2812B简介



  新一代的RGB5050将控制电路与RGB芯片集成在一个5050封装的元器件中,构成一个完整的外控像素点。
● 内置信号整形电路,任何一个像素点收到信号后经过波形整形再输出,保证线路波形畸变不会累加。
● 内置上电复位和掉电复位电路。
● 每个像素点的三基色颜色可实现256级亮度显示,完成16777216种颜色的全真色彩显示,扫描频率不低于400Hz/s。
● 串行级联接口,能通过一根信号线完成数据的接收与解码。
● 任意两点传传输距离在不超过5米时无需增加任何电路。
● 当刷新速率30帧/秒时,低速模式级联数不小于512点,高速模式不小于1024点。
● 数据发送速度可达800Kbps。
● 光的颜色高度一致,性价比高。

应用:
● LED全彩发光字灯串,LED全彩模组, LED全彩软灯条硬灯条,LED护栏管。
● LED点光源,LED像素屏,LED异形屏,各种电子产品,电器设备跑马灯。

以下是时序图,




WS2812Bdatasheet: WS2812B规格书.zip (103.33 KB, 下载次数: 323)
从图中可以看出,数字“1”使用长脉宽来编码(占空比为64%),“0”使用短脉宽来编码(占空比为32%)。数据线低电平保持时间大于50us时,为复位信号。复位后,每个LED读取“Din”线上开始的24bit(绿:红:蓝为8:8:8)数据到驱动芯片内部缓存。除了开始的24bit数据,后面的数据都通过“Dout”脚传递到下一个LED,即每经过一个像素点的传输,信号减少24bit。内部缓存数据在下一个复位脉冲后被写入PWM控制器。一个bit为1.25us,一个LED有3*8bits=24bits,传输完  需要24*1.25us=30us。
bit周期需要稍微大于1.25us为佳!
二.使用cubemx配置方法
首先根据选择的芯片(我这里是STM32L011D4P6),配置好外设时钟(我这里是32MHz),确定定时器参数(我这里是1分频,脉冲计数频率为32MHz,理论上计数到1.25us,需要的重载寄存器数值为1.25/1/32=40,这里写41(这里应根据实际调整),则bit周期为1/32us*42=1.3125us,因从0计数,故乘以41+1=42)。
1.外设分配


2.时钟配置



3.定时器PWM输出配置
定时器2配置为:
向上计数模式,重载值为41(实际周期为1/T2CLK*(41+1)),不分频,pulse值决定脉宽,比如我现在ARR值为41,则脉宽=Pulse值/(41+1)


三、STM32L011XX驱动WS2812B参考设计
详情参考PCB工程:http://pan.baidu.com/s/1qXBkzyk,使用Altium Designer14及以上版本打开;
工程采用CubeMX生成,使用的是ST最新的HAL库,需要使用keil5及以上版本打开,CubeMX版本需要16.0及以上,下载地址http://www.st.com/content/st_com ... -long-promo_feb2014程序移植了Adafruit NeoPixel库函数,可实现多种绚丽效果,例如流水灯、呼吸灯、彩虹等。



两点说明:WS2812B为5V供电,5V逻辑器件,因此需要电平转换IC;RGB5050 最大60mA电流,单色时为20mA.因此应根据灯珠的多少设计合适的电源,本设计采用TI开关电源芯片TPS563200,最大3A电流输出能力。
1.电路图

2.PCB

3.实物



4.测试效果






5.视频:http://player.youku.com/player.php/sid/XMTc0ODA0NDYwMA==/v.swf

9颗LED的:http://v.youku.com/v_show/id_XMTcwNzM2MDQ1Mg==.html?beta&

36颗LED的:http://v.youku.com/v_show/id_XMTcwNzM2MzI4OA==.html?beta&

附程序源码:
游客,如果您要查看本帖隐藏内容请回复

四.参考资源(英文的)
https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-installation
http://www.lxway.com/442451961.htm
http://www.pjrc.com/teensy/td_libs_OctoWS2811.html
https://github.com/PaulStoffregen/OctoWS2811/blob/master/OctoWS2811.h
https://github.com/g4lvanix/0xWS2812
https://cpldcpu.wordpress.com/2014/01/19/light_ws2812-library-v2-0/
https://github.com/cpldcpu/light_ws2812/
https://cpldcpu.wordpress.com/2014/01/14/light_ws2812-library-v2-0-part-i-understanding-the-ws2812/
https://www.embeddedrelated.com/showarticle/528.php

PS:由于时间有限,未做深入研究,有兴趣的可以加上DMA,或者采用SPI+DMA的方式。
补充:有的网友遇到STM32L011系列,首次无法烧录程序的问题,这里给出ST的官方解决方案: STM32L011x和STM32L021x启动模式注意事项.pdf (708.08 KB, 下载次数: 118)














0

主题

3

帖子

23

积分

新手上路

Rank: 1

积分
23
推荐
发表于 2016-11-22 15:48:48 | 只看该作者
您好我下载了您的程序测试,、不过灯带显示的很乱,没有调出您测试的效果。您这边有没有示波器读取的时序图呢,我这边示波器读到的要不都是0码,要不都是1码,读不到reset码。
推荐
发表于 2016-9-1 13:20:33 | 只看该作者
DengQilong 发表于 2016-9-1 07:03
可以,每个灯有红绿蓝0-255级颜色混合,可以调出255*255*255种颜色。

但是每个灯都不一样那就要很多数据线控制了
我就是我,不一样的烟火;努力努力,永不放弃。

321

主题

1054

帖子

4502

积分

论坛元老

Rank: 8Rank: 8

积分
4502
QQ
推荐
发表于 2017-2-20 10:47:58 | 只看该作者
heyongbo236 发表于 2016-11-23 14:10
初次使用stm的L系列,值得好好学习学习!打算用L2的应该跟L1很相近吧!!?
...

是的,用STM32CubeMX的话,API都差不多
1、机智云QQ群:G1群:104975951 G2群:491509598 G3群:287087942
机智云爱好者-APP开发群: 599735135
QQ群目前非常活跃,欢迎大家参与进来,交流,讨论,答疑,解惑~~
2、机智云微信公众号: 机智云 gizwits、 机智云智能宠物屋go-iot
关注机智云Gizwits官方公众号随时掌握最新资讯和活动信息
5#
发表于 2016-9-1 00:55:19 | 只看该作者
校园创客福利
可以每个灯都显示不同颜色吗
我就是我,不一样的烟火;努力努力,永不放弃。

5

主题

29

帖子

98

积分

社区运营

Rank: 8Rank: 8

积分
98
QQ
6#
 楼主| 发表于 2016-9-1 07:03:21 来自手机 | 只看该作者
林光光1号 发表于 2016-9-1 00:55
可以每个灯都显示不同颜色吗

可以,每个灯有红绿蓝0-255级颜色混合,可以调出255*255*255种颜色。

0

主题

1

帖子

3

积分

新手上路

Rank: 1

积分
3
7#
发表于 2016-9-1 08:41:22 | 只看该作者
学习学习,赞一个先

0

主题

1

帖子

13

积分

新手上路

Rank: 1

积分
13
8#
发表于 2016-9-1 10:49:32 | 只看该作者
我也来看一下

5

主题

29

帖子

98

积分

社区运营

Rank: 8Rank: 8

积分
98
QQ
9#
 楼主| 发表于 2016-9-1 14:25:58 | 只看该作者
林光光1号 发表于 2016-9-1 13:20
但是每个灯都不一样那就要很多数据线控制了

串行连接,建议你先了解下WS2812B型LED原理,只需一根信号线
10#
发表于 2016-9-1 16:45:41 | 只看该作者
校园创客福利
DengQilong 发表于 2016-9-1 14:25
串行连接,建议你先了解下WS2812B型LED原理,只需一根信号线

哦哦好的,谢谢
我就是我,不一样的烟火;努力努力,永不放弃。

0

主题

3

帖子

23

积分

新手上路

Rank: 1

积分
23
15#
发表于 2016-11-22 15:49:45 | 只看该作者
免费使用STM32、APP自动代码生成工具
我的qq是3313548247 ,欢迎同样调试ws2812B的朋友交流讨论

0

主题

29

帖子

132

积分

注册会员

Rank: 2

积分
132
16#
发表于 2016-11-23 10:19:12 | 只看该作者
我来凑凑热闹~

0

主题

1

帖子

9

积分

新手上路

Rank: 1

积分
9
17#
发表于 2016-11-23 14:10:21 | 只看该作者
初次使用stm的L系列,值得好好学习学习!打算用L2的应该跟L1很相近吧!!?

点评

是的,用STM32CubeMX的话,API都差不多  详情 回复 发表于 2017-2-20 10:47

0

主题

1

帖子

13

积分

新手上路

Rank: 1

积分
13
18#
发表于 2016-11-28 20:44:09 | 只看该作者
楼主你做的太棒了!!!!赞赞赞

0

主题

1

帖子

9

积分

新手上路

Rank: 1

积分
9
21#
发表于 2016-12-3 21:02:56 | 只看该作者
参考参考,谢谢
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表