TA的每日心情 | 奋斗 2023-8-17 15:02 |
---|
签到天数: 1 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 STC新征程1 于 2024-9-18 08:42 编辑
5 `7 @) d0 x# y3 [, z+ ~- Y8 h. Z4 V5 t# q, Q
WS2812三基色彩灯@AI8051U
& A4 V0 c7 a. N7 G' `. B* Z===最多同时驱动2730个三基色彩灯
. N4 ] g* D! B) K6 T===DMA-SPI输出控制@AI8051U,不占CPU时间/ O6 e$ C8 @: X
AI8051U SPI DMA输出控制WS2812三基色彩灯程序,32K SRAM# W) f1 h' V5 J8 Y: i5 d" _1 `
使用 SPI-MOSI 输出经过反相器反相驱动WS2812 三基色彩灯,% R/ F- @9 n5 l1 r2 r
DMA传输,32K SRAM轻松驱动最多2730个灯:
& m4 a Y+ L5 m0 i8 p$ L* P. A由于SPI的一个字节输出完毕后AI8051U的MOSI会恢复高电平,1 C7 n1 T5 E, r& ?8 j
所以输出要反相,8H8K64U/32G12K128系列不需要反向。$ B+ y% `9 i1 Z" T) L7 c+ k
使用AI8051U自带的模拟比较器实现反相。: w' V/ X" x" E) Y: F$ f ^- {3 a
本例使用P1.5/MOSI输出驱动信号(用户可以切换到别的脚),
7 O5 o* x: W0 G; T 接到P4.6/CMP+,CMP-使用内部的 1.19V辅助参考信号源,
! n8 W+ |( V( |/ @4 m9 n3 J; x( I. r通过比较器的反相输出,从P4.5/CMPO输出驱动WS2812。
# h* @) L7 a1 r' w, G4 H* Z只用到MOSI驱动WS2812,但由于SPI的3个信号是捆绑在一起的
4 e. ^ Y' L, b H Z1 R4 f===MISO、SCLK不能做它用。5 @, t' y: F* f8 ^4 |
本例P1.6-MISO、P1.7-SCLK被SPI占用,不能做他用。 & ^2 U0 w; L/ s0 M! P8 e- n5 _- E5 B
这 SPI 留了这么个绝活 支持 WS2812B !!! e& x- ~- Q! d& k) U+ V
& f# _6 D4 z. K( T
9 g" V, k- _4 k! X% m$ `本例驱动60个灯,接成环状。
5 X$ i$ M! H0 V7 K" FSPI发送720字节,DMA启动后自动发送完所有的数据,不占CPU时间。1 v! V* q9 G- ]/ Q! p9 z% c! x
" [: w1 M& ~/ d5 E' T, J% {! }每个灯3个字节,分别对应绿、红、蓝则,MSB先发.
& f. K) K" L6 o8 D800KHz码率,& o/ J! z9 d4 s& ]6 D3 e7 z L
数据0(1/4占空比): H=0.3125us L=0.9375us,2 V# R; z% q# o" K( o8 a4 @! [* w: N
数据1(3/4占空比): H=0.9375us L=0.3125us,
) j. x( @& Z) a; E* vRESET>=50us.
* Z& M6 G8 C4 D6 V高电平时间要精确控制在要求的范围内,$ n$ E: o1 M4 F! l
低电平时间不需要精确控制, 大于要求的最小值并小于RES的50us即可.
1 y, w1 J& O3 T% X$ {
% J3 v- }$ p3 G( yWS2812S的标准时序如下:
" h+ _& R3 `8 E" h$ ]( fTH+TL = 1.25us±150ns, RES>50us1 h& N5 Q) y( s4 m4 y8 u
T0H = 0.25us±150ns = 0.10us - 0.40us. [3 [9 d) z; \0 M
T0L = 1.00us±150ns = 0.85us - 1.15us
5 G: T0 x* {/ @7 g7 W [4 {T1H = 1.00us±150ns = 0.85us - 1.15us
i2 z7 s0 o2 y# G' m' j UT1L = 0.25us±150ns = 0.10us - 0.40us
0 x- \6 [* @0 [8 L7 U: m两个位数据之间的间隔要小于RES的50us.% {0 [4 a0 m3 u, Z; z! h
6 S% Q2 g: @. p$ m0 s, D l- QSPI方案:# c2 Z, x7 e' x0 D# b* w
由于SPI的一个字节输出完毕后P1.5-MOSI会恢复高电平,所以输出要反相。% W' o/ t8 O- S1 U- d
使用mcu自带的模拟比较器实现反相。
6 j. D3 T5 a/ j$ J ]! [# l本例使用P1.5-MOSI输出驱动信号, 接到P4.6-CMP+,CMP-接内部1.19V,9 R7 Q: H) ^9 u0 i! q
通过比较器反相从P4.5-CMPO输出驱动WS2812。
$ a! R# l- Z. R/ R: K由于使用SPI主机模式,则P1.6、P1.7被SPI占用,不能做他用。- u8 }+ H5 l5 o7 ~
+ B) _3 Z9 n0 _用SPI传输, 速度3.0~3.5MHz,以3.2MHz为最佳, MSB先发,
6 Y' _3 |) G& O6 y2 U* ^9 `2 {每个字节高4位和低4位分别对应一个位数据,
" [# v* J% @9 U# S0111(反相后是1000)为数据0, 0001(反相后是1110)为数据1.5 l; m* W8 A1 O7 G W8 v7 C
SPI数据位 D7 D6 D5 D4 D3 D2 D1 D03 W! ]) @1 o: X9 A
SPI数据 0 1 1 1 0 0 0 1: j- x$ P0 C% H+ F+ z0 j1 S
比较器反相输出 1 0 0 0 1 1 1 09 N4 k7 k8 W7 g+ a
WS2812数据0 WS2812数据14 f( w" O D4 }5 z: ?. S
SPI数据高半字节对应的WS2812数据0-->0x70, 数据1-->0x10,5 C* `3 N: L) _. j, ?1 R5 y
SPI数据低半字节对应的WS2812数据0-->0x07, 数据1-->0x01,
& S, s& o8 g9 a7 H5 a/ g; e$ y/ S主频25.6MHz, SPI分频8 = 3.2MHz. 最佳.
: F1 Z6 I6 L; C& g& k c
0 _+ z8 c( o9 a电路预览(附件带PDF电路):
" P; N& i4 v, ?0 a
) p! A4 a6 A& h) O |
|