你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

NUCLEO-F042K6驱动的彩色灯环(WS2812)  

[复制链接]
zoomdy 发布时间:2017-1-21 09:28
本帖最后由 zoomdy 于 2017-1-22 12:24 编辑
$ F7 Q, U2 t1 `9 a
5 X0 p& B* h* \/ }$ {$ J( F

运行效果图

运行效果图
% `+ e' P/ u. D$ J+ z/ D9 \
运行效果图3 ^7 X9 }7 w5 I) b

面包板接线

面包板接线

7 Y$ x5 L- J* B: Y% Q, Q. W面包板接线
# c) I8 ~# r- S

材料清单

材料清单

0 ~! |2 ?" o0 ]$ m6 }材料清单
6 S5 P$ W- _/ ^8 mNUCLEO-F042K6一块,https://detail.tmall.com/item.htm?id=5248971430443 o) d1 _9 v# w) R; f7 U
WS2812灯环一个(24盏灯),https://detail.tmall.com/item.htm?id=525645384067* V: K8 Q( U3 f  h) l) U5 W4 e
面包板一个,https://detail.tmall.com/item.htm?id=16513870165
( @! i; ?  `7 A3 Y+ i* a* t* w# X我用上述链接购买的,供有需要的同学参考,我与卖家仅有买卖关系。6 j( J$ t! |4 ]  ^) a
% T) ]/ K1 Z- t$ p. T
分享一下我采用的方案, V7 {2 a7 U9 N( z, t
WS2812的时序非常特殊,见下图,没有办法使用标准的外设来驱动,得使用模拟实现。我采用的方案是SPI+DMA,用一个字节的SPI数据来表示WS2812的一位数据,SPI时钟频率调整到6.4M(800K * 8,WS2812的速率要求为800K,SPI每8个位长表示1位WS2812数据),SPI数据0x70(3个1,5个0,符合WS2812低电平的时序要求)表示WS2812的0,SPI数据0x7C(5个1,3个0,符合WS2812高电平的时序要求)表示WS2812的1。一个WS2812需要24位数据,首先将这24位RGB数据转换成24字节的SPI数据,然后使用DMA将24字节SPI数据发出去,这样就可以驱动WS2812了。我这个灯环有24盏LED,那么需要24*24=576字节的SPI缓存,用DMA可以一次性操作。这种方法比较耗内存,但是实现起来比较简单,输出时序一致性非常高。源代码已经上传至OSChina:http://git.oschina.net/zoomdy/BlueSoRing
3 @& V/ s3 A- p! X* F: w

WS2812时序

WS2812时序
- v+ H* ]# j: [' O5 ]8 k
* R6 H8 F% Y, s7 G, v

+ _& C/ O( s1 s* I0 n0 y' F

评分

参与人数 1 ST金币 +10 收起 理由
zero99 + 10

查看全部评分

收藏 11 评论26 发布时间:2017-1-21 09:28

举报

26个回答
Yogo 回答时间:2020-8-13 10:11:45
00dd 发表于 2018-8-24 19:00
# n) P  W4 ^; E6 y- I1 t7c 70怎么算的呢,我知道5个1 ,3个1的事情,但是不是连在一起5个搞或者5个低,这是为什么呢? ...

$ M0 y  I6 Z) ]  u' l  Q这也是引起我的好奇,实作将0x7C改成0xF8(0x7C<<1)结果就是不行,可能是STM SPI DMA的特性.
; o( b# z( N1 J9 N( M* K6 M1 e1 @: t3 I' B, U1 K( g9 S2 O
示波器波形如下:  ?7 m' G& v, c! z& T  g% O* r5 y
黄色:SPI MOSI) c* B( v5 L1 X; \; x) ^' _
蓝色(仅参考): SPI SCK
2 q+ F2 `) Y/ J/ J' `5 Q# v3 s( N3 n1 L# Z6 c& v- Y) d# h
0x7C/ m. r! _4 F0 E- E* |3 j$ l
0x7C.jpg
5 k; K! r+ X: q8 G& A$ v7 \" U. Z0 U2 D2 _$ U2 |8 _* B8 W9 g! k9 H
0xF8
7 L# ?5 S2 }, T$ T* R" J5 O 0xF8.jpg
7 T/ [+ c7 L! ]' C2 R. k& a4 d- ]& G' t
zhaicool 回答时间:2018-1-5 15:01:03
不知道怎么来根据时序图计算0、1码。。。+ a: L1 \  m; k: _1 T1 \
比如我的是stm32f401
( r8 y; G9 U4 x1 R8 ]( L6 Q$ mRCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
5 Q; V: @* F7 f6 B6 `0 Jspi频率配制成8分频9 y( {2 P1 Y8 w+ K! G" C
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
- F/ ]! p7 K6 c" x( l
% C, [# a: o  @接下来该怎么计算呢?
zoomdy 回答时间:2017-1-22 12:20:49
路鸣雨 发表于 2017-1-22 08:347 {: r3 p8 B! r4 R: H7 x' H
挺漂亮啊,不过还得琢磨一下实际用到哪。我正想把它或者8X8RGB模块设计个往车里中控台上放的饰品呢,多靓丽 ...
) \9 W3 v) G% f; O, f9 ^! W; d
我有个想法,结合一下磁力传感器做个指南针
yanhaijian 回答时间:2017-1-21 10:16:44
加个电机转动。
zoomdy 回答时间:2017-1-21 10:26:53
yanhaijian 发表于 2017-1-21 10:16
! B. ?  \& _* v; f加个电机转动。
% Q0 Y6 c5 r4 `- W9 l+ d7 S
哈哈,想法不错,不过不用电机的,移动像素位置就旋转了,实际效果就是在旋转的,静态图片看不出来
orima 回答时间:2017-1-21 10:39:51
有点意思。。
leo121_3006061 回答时间:2017-1-21 11:07:40
谢谢分享
平淡是真 回答时间:2017-1-21 11:53:44
板猪做的不错
jackten 回答时间:2017-1-21 12:04:53
厉害厉害                                
草民星空 回答时间:2017-1-21 13:50:46
有圆形灯的原理图吗
zoomdy 回答时间:2017-1-21 19:46:20
草民星空 发表于 2017-1-21 13:50
0 Z. }0 ]( ~; C6 j$ c/ L有圆形灯的原理图吗

$ u& ~2 m6 ^" t/ }! J- r你是说PCB原理图吗?没有啊,不过很简单的,就是把多颗WS2812串联起来,参考WS2812数据手册就可以了。
wu1169668869 回答时间:2017-1-21 22:11:45
既然写了,传个代码呗
路鸣雨 回答时间:2017-1-22 08:34:56
挺漂亮啊,不过还得琢磨一下实际用到哪。我正想把它或者8X8RGB模块设计个往车里中控台上放的饰品呢,多靓丽~
小小超 回答时间:2017-1-22 08:42:27
挺好的。。。。。
草民星空 回答时间:2017-1-22 10:06:04
zoomdy 发表于 2017-1-21 19:46
, {- k+ ?4 j+ }* H$ s0 t4 _" a你是说PCB原理图吗?没有啊,不过很简单的,就是把多颗WS2812串联起来,参考WS2812数据手册就可以了。 ...

& @$ L/ p9 q0 h  G好吧  谢谢了
zoomdy 回答时间:2017-1-22 12:21:46
wu1169668869 发表于 2017-1-21 22:11& C+ e1 `/ m& d! P8 ]4 Y8 U
既然写了,传个代码呗
+ c! n: e; V2 v
http://git.oschina.net/zoomdy/BlueSoRing 已经上传到这里了。
12下一页

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版