找回密码
 注册
查看: 432|回复: 4
打印 上一主题 下一主题

WS2812三基色彩灯@AI8051U,最多同时驱动2730个,DMA-SPI输出控制,不占CPU时间

[复制链接]
  • TA的每日心情
    奋斗
    2023-8-17 15:02
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
     楼主| 发表于 2024-9-14 10:36 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

    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

    该用户从未签到

    3#
    发表于 2024-9-28 10:15 | 只看该作者
    WS2812三基色彩灯

    该用户从未签到

    5#
    发表于 2024-10-9 11:26 | 只看该作者
    WS2812三基色彩灯
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-5-26 02:02 , Processed in 0.078125 second(s), 27 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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