
对电路板上WS2812串行彩色LED灯珠的控制过程进行了深入研究和调试。电路板上集成了两颗WS2812灯珠,用于直观展示其工作状态。在前期,我们采用了STC单片机来测试WS2812灯珠的控制脉冲参数范围,发现其控制信号的要求其实相当宽松。为了确保正常控制,我们确定了脉冲高电平和低电平的宽度不应超过50微秒,否则会被识别为RESET信号。具体来说,以470纳秒为界限,低于此时间的脉冲被认定为0,而高于此时间的脉冲为1。
一、调试成果
控制WS2812的核心在于生成对应的0和1脉冲。对于0脉冲,我们追求无延迟状态,且其高电平应小于470纳秒。而对于1脉冲,我们特意设置了延迟以保证其高电平大于470纳秒,并在每个输出后维持一段时间的低电平状态。通过观察IO波形,我们发现0脉冲的高电平大约350纳秒,而1脉冲则约为1100纳秒。
我们还调试了一个延迟75微秒的子程序,这是产生RESET信号所需的最小时间延迟。通过IO脉冲的测量,我们发现由于系统存在中断,实际延迟会出现一定程度的抖动。在大多数情况下,RESET时间并不需要这么长。在两次输出RGB信号之间,我们确保时间都是低电平状态,足以触发RESET状态。
我们编写了驱动两个WS2812的子程序,依次送出对应的6个字节数据,并在最后通过RESET低电平激活所有LED的更新状态。目前,两个WS2812灯珠已经成功点亮,证明程序运行正常。值得注意的是,WS2812的控制信号要求其实非常宽松,关键在于确保0脉冲的宽度小于470纳秒,这对MCU的速度有一定要求。
在编写改变WS2812设置的子程序时,我们能够明显看到灯光随设置而变化。从WS2812的运行状态来看,子程序对其更新非常稳定,内部中断对控制信号的影响较小。
本文详细记录了WS2812串行LED控制的软件开发过程。WS2812的控制信号规格要求其实并不严格,使用单片机通过IO口就能轻松进行控制。我们曾看到有人使用SPI端口控制WS2812,效果同样出色。对于不需要频繁刷新的场景,使用IO控制已经足够。
参考资料:
[此处留空]
