网络上有太多的WS2812B的驱动原理,这里就不再赘述,请自行搜索相关资料。
一、开发环境
MCU: GD32F105RBT6
IDE: Keil5
WS2812: 8x8灯板
二、PWM高低电平占空比计算
由于是用PWM方式来传输数据的,所以需要计算一下传输高低电平所需要的占空比。
灯珠的脉冲周期:
从数据手册可以知道灯珠的传输速率是800Kb,即每秒可以传输800000个bit,每个bit需要的时间是1/800Kb = 1.25us
MCU的时钟周期:
GD32F105RBT6主频108MHz, 单个时钟周期就是1/108MHz = 9.2ns
根据灯珠的脉冲周期和MCU的时钟周期,我们可以知道传输一个脉冲需要多少个时钟周期:
1.25 * 1000 / 9.2 ≈ 136个
好了,下面我们来分析占空比:
这是灯珠的相关高低电平资料:
T0H | 0码 | 高电平时间 220ns~380ns |
T1H | 1码 | 高电平时间 580ns~1us |
T0L | 0码 | 低电平时间 580ns~1us |
T1L | 1码 | 低电平时间 580ns~1us |
RES | 复位 | 低电平时间 280us以上 |
先计算0码的高低电平占空比, 由上表可知,0码的高电平时间需要220ns~380ns,我们取一个中间值300ns。 一个脉冲周期是1.25us = 1250ns, 高电平占了300ns,那么低电平就是1250-300 = 950ns,上表中0码的低电平时间是580ns~1us之间,可见950ns也是满足要求的。
那么0码的占空比就是:30