本帖最后由 Lily李 于 2025-9-29 21:08 编辑
申请原创
@21小跑堂
WS2812是一种将控制电路和RGB发光器件集成在一起的组件,其主要特点是采用单总线控制结构,仅需一根信号线就可将多个器件串联起来加以控制,其电路形式如图1所示。 图1 电路形式
WS2812的工作电压为3.5-5.3V ,其功耗约为0.3W。 在每个WS2812中,内置了信号整形电路,因而其信号质量不会因传输距离的增加而出现衰减。
每个WS2812是独立编程的,可实现全彩显示。
由于其采用单总线工作方式,其采用的数据协议为单线归零码通讯,数据传输速率为800Kbps。 其数据输入电压为:高电平≥0.7VDD,低电平≤0.3VDD,刷新频率≥400Hz。
WS2812B采用特殊的时序协议控制:
每个WS2812具有24位数据,即8位绿色,8位红色,8位蓝色,数据采用NRZ编码(非归零编码),其各位数据的排列顺序见图2所示。 图2 数据排列顺序
0码:高电平0.4µs + 低电平0.85µs 1码:高电平0.8µs + 低电平0.45µs
图3 编码与信号时长占比
复位信号为低电平持续50µs以上 ,见图4所示。
图4 信号波形关系
图5 器件间信号传递关系
每个WS2812在全亮时,约消耗60mA电流,当使用多个WS2812时,需要足够功率的电源, 建议每30个LED增加一个1000µF电容滤波。数据线较长时,建议增加100Ω电阻。 在大电流工作时,会产生热量,由此在高密度、长时间工作时,需要考虑散热措施。
在使用python进行编程的情况下,通过调用相应的库函数即可便捷地实现控制目标。 实现7个彩色灯位WS2812B控制的程序为: 经程序的上传,其彩色效果如图6至图11所示。 图6 红色效果
图7 绿色效果
图8 蓝色效果
图9 黄色效果
图10 粉色效果
图11青色效果
除实现静态的灯光效果外,还可实现动态的效果设计。这里提供3种动态效果的实现方法,即单个彩灯向前跳跃效果、彩灯渐进效果及组合产生各色灯光的效果。 单个彩灯向前跳跃的函数为: - def light_1():
- j=0
- while j<7:
- for i in range(0,_n):
- n[i]=(0,0,0)
- if i==j:
- n[i]=(100,0,0)
- n.write()
- time.sleep(0.1)
- j=j+1
彩灯渐进效果的函数为: - def light_2():
- j=0
- while j<7:
- for i in range(0,_n):
- n[i]=(0,0,0)
- if i<=j:
- n[i]=(0,100,0)
- n.write()
- time.sleep(0.1)
- j=j+1
色彩组合效果的函数为: - def light_3():
- j=0
- k=0
- p=0
- while j<7:
- for i in range(0,_n):
- n[i]=(0,0,0)
- k=random.randint(1, 50)
- p=random.randint(1, 50)
- if i<=j:
- n[i]=(k,p,0)
- n.write()
- time.sleep(0.1)
- j=j+1
效果测试的主程序为: - def main():
- #红色
- Light_clear()
- Light_it(100,0,0)
- #延时(秒)
- time.sleep(2)
- #绿色
- Light_clear()
- Light_it(0,100,0)
- #延时
- time.sleep(2)
- #蓝色
- Light_clear()
- Light_it(0,0,100)
- #延时
- time.sleep(2)
- #黄色
- Light_clear()
- Light_it(100,100,0)
- #延时
- time.sleep(2)
- #紫色
- Light_clear()
- Light_it(100,0,100)
- #延时
- time.sleep(2)
- #青色
- Light_clear()
- Light_it(0,100,100)
- #延时
- time.sleep(2)
- Light_clear()
- light_1()
- time.sleep(2)
- Light_clear()
- light_2()
- time.sleep(2)
- Light_clear()
- light_3()
- time.sleep(2)
- if(__name__=='__main__'):
- while 1:
- main()
经程序上传,所实现的效果如图12至图14所示。 图12跳跃效果
图13 渐进效果
图14 变色效果
此外,如果继续增加WS2812的数量,则会更加增强显示的效果。
|