观看演示效果:https://www.bilibili.com/video/BV1JT4y1P72Qhtml
WS2812B是一种智能控制LED光源,将控制电路和RGB芯片集成在一个5050个组件的封装中。内部包括智能数字端口数据锁存和信号整形放大驱动电路。还包括精密的内部振荡器和电压可编程恒流控制部分,有效保证像素点的光色高度一致。编程
数据传输协议采用单NZR通讯模式。像素上电复位后,DIN端口从控制器接收数据,第一个像素采集初始24位数据,而后发送给内部数据锁存器,其余通过内部信号整形放大电路整形后的数据经过DO端口发送给下一个级联像素。每传输一个像素后,信号减小24位。像素采用自整形传输技术,使得像素级联数不受信号传输的限制,只取决于信号传输的速度。数组
复位时间>280us,中断时不会误复位,支持低频率,价格低廉的MCU。刷新频率更新至2KHz,无闪烁,提升了出色的显示效果。缓存
特性:微信
l 控制电路和LED共用惟一的电源。ide
l 控制电路和RGB芯片集成在一个5050个元件的封装中,造成一个完整的可寻址电路spa
l 像素内置信号整形电路,波形整形到下一个驱动器后,保证波形失真不累积。设计
l 内置电子复位电路和失电复位电路。3d
l 每一个像素的三原色均可以实现256亮度的显示,完成16777216色的全彩显示,而且扫描频率为2KHz。htm
l 级联端口经过单线传输信号。
l 任意两点距离不超过5m传输信号无需任何增长电路。
l 刷新率为30fps时,级联个数不小于1024像素。
l 以800Kbps的速度发送数据。
l 灯的颜色高度一致,性价比高不须要外部电子元件,甚至不须要电容。
1位
灯板矩阵
灯带
灯板
灯带参数:WS2812B灯条:30珠每米9w,60珠每米18w,144珠每米43W,电压:(直流)DC5V
也就是每一个灯珠全亮的功耗约为0.3W
l 供电:5V
l 每一个灯珠全亮的功率:0.3W
l 每一个灯珠全亮的电流:0.6mA
每一个芯片有四个引脚
级联接线方式
上一个芯片的DO接到下一个芯片的DI
SW2812是一个RGB芯片,因此它有红、绿、蓝三种颜色,每一个颜色有对应8位,由于咱们一般一个像素点就是用RGB三色来表示的,好比常常见到的#FFFFFF,其就是表示R(红色)的值为255,G(绿色)的值为255,B(蓝色)的值为255,#FFFFFFF是白色。因此一个SW2812由3个U8,也就是3*8=24位。要肯定一个SW28122芯片的颜色就须要发送24位的数据。
级联数据发送
l 第一屏数据缓存
u 第一个24位有第一个模块接收并缓存
u 第二个24位会被第一个模块转发到第二个模块上,并缓存
u 第三个24位会被第一和第二个转发到低三个模块上,并缓存
u 第四个24位……
u 低N个24位……
l 复位信号,也就是将缓存数据真实的体现到显示上
l 第二屏数据缓存
u 第一个24位有第一个模块接收并缓存
u 第二个24位会被第一个模块转发到第二个模块上,并缓存
u 第三个24位会被第一和第二个转发到低三个模块上,并缓存
u 第四个24位……
u 低N个24位……
l 复位信号,也就是将缓存数据真实的体现到显示上
l ……
每一个24位数据表示的意义
数据按GRB顺序传输,先传输高位
数据位
手册上介绍数据发送速度是:800Kbps
因此每一个数据位的时间是:1/800000=0.00000125s=1.25us
这1.25us能够表示高位或低位,24个1.25us就是一个灯的颜色,发完一个灯的颜色后须要发送大于280us的低电平让数据从锁存器表如今灯上。
数位位0:
周期1/3的高电平,1.25*(1/3)us
周期2/3的低电平,1.25*(2/3)us
数位位1:
周期2/3的高电平,1.25*(1/3)us
周期1/3的低电平,1.25*(1/3)us
一位一位数据循环发送,由于WS2812对时序要求很高,因此单片机要注意延时时间和IO的电平翻转时间。
在单片机没有高级外设的状况下就得用这个了
编程要点:
l 延时时间要支持最小的1.25*(1/3)us
l IO电平翻转尽量的快,进入去操做寄存器改变IO电平,减小延时时间,在STM32里要把GPIO的时钟设置高些
l 程序关闭中断,程序的其它中断可能会引发发送数据时序错乱
l 其缺点就是占用主程序,各类延时消耗很大的CPU资源
PWM:
PWM即脉冲宽度调制,是一种模拟控制方式,一般用于LED的亮度调节。
详细参考:http://www.javashuo.com/article/p-phkcexud-vc.html
DMA:
直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无需CPU干涉,数据能够经过DMA快速移动,这样能够大大节省CPU的资源用来作其它操做。
PWM+DMA
也就是PWM输出的占空比能够由DMA方式来动态调节,而不须要单片机CPU参与进来,咱们只须要把DMA要移动的数组定义好,而后启动DMA的循环模式和内存偏移,改变数组的数据就能够改变灯带的显示效果。
手册上介绍数据发送速度是:800Kbps
因此PWM的周期为:800KHZ,也就是1.25us
因此恰好一个周期就是一位数据,因此有:
当PWM设置的有效电平为高时:
1码:占空比为66%,也就是2/3周期
0码:占空比为33%,也就是1/3周期
l 芯片:STM32F103C8T6
l 灯板:24位WS2812
l 灯板的控制IO:PA8
l ADC声音检测IO:PA0
观看演示效果::https://www.bilibili.com/video/BV1JT4y1P72Q
原文连接:https://www.cnblogs.com/dongxiaodong/p/14358840.html