首页 » 通讯 » 运用SPI控制WS2812的显示_波形_暗记

运用SPI控制WS2812的显示_波形_暗记

神尊大人 2024-12-03 07:58:37 0

扫一扫用手机浏览

文章目录 [+]

简 介: 利用ESP32中的硬件SPI掌握WS2812的显示。
利用了高频三极管9018 作为输出接口反向器,确定得当的电阻参数,验证了驱动方案的硬件和软件的可行性。
关键词: WS2812,ESP32,SPI

运用SPI控制WS2812的显示_波形_暗记 运用SPI控制WS2812的显示_波形_暗记 通讯

01 WS2812

  智能集成LED光源 WS2812[1] 通过大略的外部接口、特有的级联方案便于利用MCU完成多个LED掌握,极大简化了LED掌握接口。
比较于传统的 单片机LED IO口复用掌握方案[2] ,利用WS2812则更加的简介。

运用SPI控制WS2812的显示_波形_暗记 运用SPI控制WS2812的显示_波形_暗记 通讯
(图片来自网络侵删)

▲ 图1.1 灯珠掌握闪烁

一、芯片简介1、特点与上风在5050封装内集成有掌握电路和RGB芯片,形成完全像素点掌握;内置扫实行好整形电路,通报到级联下一节点时,不会产生旗子暗记失落真累积效应;内置复位电路与掉电复位电路;每个RGB灯都有256亮度级别,可以形成中颜色,刷新频率不低于400Hz;通过旗子暗记线完成端口级联;传输间隔在5米之内,无需增加额外电路;在刷新频率30帧/秒中,低速模式下可以掌握不少于512颗灯,高速模式下则超过1024颗灯;数据传输速率为800kbps;颜色同等性强,价格低;

▲ 图1.1.1 灯带点亮后的效果

2、运用全色彩模块;全色彩柔光灯带;LED装饰灯带;室内、室外LED不规则显示屏;3、管脚封装

▲ 图1.1.2 WS2812封装与管脚功能定义

二、事情事理1、事情电压

  根据 WS2812[3] 数据手册,它的事情电压范围在,输入旗子暗记电压在事情电压VDD±0.5V范围内。
三路LED的参数:

【表2-1-1 RGB 参数】

Emitting color Wavelength(nm) Luminous intensity(mcd) Current(mA) Voltage(V) Red 620-630 550-700 16 1.8-2.2 Green 515-530 1100-1400 16 2.8~3.1 Blue 465-475 200-400 16 3.0-3.4

2、掌握协议

  WS2812的级联掌握协议非常大略。
通过一根旗子暗记线就可以进行串行异步旗子暗记发送。

  下面显示了四个WS2812通过数据性级联的办法。
在串行通讯中利用不同高低电平脉冲表示数据0,1编码。

▲ 图1.2.1 级联方法与编码波形

【221. 脉冲编码参数】

脉冲 定义 韶光 偏差 T0H 0 code ,high voltage time 0.4us ±150ns T1H 1 code ,high voltage time 0.85us ±150ns T0L 0 code , low voltage time 0.85us ±150ns T1L 1 code ,low voltage time 0.4us ±150ns RES low voltage time Above 50μs

  下面是三个WS2812级联发送过程对应的波形。
可以看到通过发送三组24bit的编码,可以掌握三个级联的WS2812灯的颜色。
数据D1是直接由MCU数据端口掌握,D2,D3,D4则是WS8212内部整形放大后再进行传输。

  利用RESET编码,也便是超过50us的低电平形成WS2812输出锁定。

▲ 图1.2.2 三个WS2812级联发送过程对应的波形

  每组24bit对应的的GRB编码如下所示。
发送颜色顺序为GRB,字节的高位在前。

▲ 图1.2.3 每组24bit对应的的GRB编码

▲ 图1.1.3 灯带点亮后的效果

02 ESP32-SPI

  由于掌握WS2812的脉冲高低电平在0.85us,0.4us,韶光间隔,为了产生这样的脉冲,利用普通的软件掌握IO口是无法完成的,下面测试利用个中的 硬件SPI[4] 产生掌握脉冲旗子暗记。

一、ESP32中的硬件SPI

  在ESP32中具有两路硬件SPI端口,可以最快达到始终速率80MHz,这可以知足对WS2812的掌握脉冲的速率。

1、SPI缺省管脚

  如果利用SPI缺省配置管脚,输出速率可以达到80MHz,如果利用其它GPIO,则输出的速率则须要限定在40MHz以下。

【表2-1-1 ESP32 硬件SPI缺省端口】

管脚 HSPI(id=1) HSPI(id=2) SCK 14 18 MOSI 13 23 MISO 12 19

2、ESP32实验转接板

  利用 ESP32实验转接板[5] ,测试硬件SPI端口。

▲ 图2.1.1 ESP32实验转接板

  利用SPI id=1,对应的SPI,MOSI,MISO的对口为,14,13,12,对应的实验转接板上的输出管脚如下图所示,从右往左分别是:

  ● ESP32转接板SPI管脚定义:    SCK:PIN9   MISO:PIN8   MOSI:PIN7

▲ 图2.1.2 ESP32中对应的SPI,MOSI,MISO的管脚

3、测试SPI输出波形

  初始化SPI端口,使得输出速率为10MHz,输出数据0x55,0xaa,利用示波器不雅观察MOSI,SPI波形。

(1)测试缺省SPI模式

from machine import Pin,Timer,SPIimport timehspi = SPI(1, 10000000, sck=Pin(14), mosi=Pin(13), miso=Pin(12))buf = bytes((0x55,0xaa))print(buf)while True: hspi.write(buf) time.sleep_ms(10)

  通过测试波形可以看到输出SPI的频率为5MHz。
SPI正常的电平为低电平。

▲ 图2.1.3 丈量SPI,MOSI的输出波形

  设置输出的波特率为2.5MHz,此时便可以输出 0.4us 的低脉冲。

  设置输出波特率为2.5MHz,可以产生所须要的0.4us的电平输出。
波形如下图所示:

▲ 图2.1.4 设置输出波特率为2.5MHz,可以产生所须要的0.4us的电平输出

二、利用晶体管反向MOSI

  利用晶体管将MOSI波形进行反向,这可以:

能够知足WS2812掌握脉冲电平极性哀求。
它哀求掌握旗子暗记在平时为高电平,通过低电平脉冲得到复位旗子暗记、0/1数据位旗子暗记。
提高带载能力。
1、旗子暗记反向电路

▲ 图2.2.1 MOSI旗子暗记反向电路

2、电路测试(1)晶体管BC547

  由于BC547B的截止频率只有300MHz,旗子暗记通过BC547之后,引起了很大的失落真。
下图显示了旗子暗记波形。

▲ 图2.2.2 MOSI 输入输出旗子暗记

(2)晶体管9018

  为了提高相应速率,对电路进行如下的调度:

  ● 电路元器件参数:    Q1:9018   R1:10k   R2:200

▲ 图2.2.3 电路参数修正之后输入输出波形

三、产生掌握波形1、产生RESET旗子暗记

  根据WS2812掌握旗子暗记协议,RESET是时长超过50us的低电平,因此,在2.5MHz的波特率下,连续输出125bit的高电平,也便是16个byte的0xff,则可以产生:个1输出,便可以产生的低电平。

from machine import Pin,Timer,SPIimport timehspi = SPI(1, 2500000, sck=Pin(14), mosi=Pin(13), miso=Pin(12), polarity=0)buf = bytes([0xff]16)print(buf)while True: hspi.write(buf) time.sleep_ms(10)

▲ 图2.3.1 连续输出16个0xff所产生的RESET旗子暗记

2、产生RGB数据

  根据WS2812协议,每一组RGB须要24个bit,每个bit可以有SPI输出的3个bit来表示,因此输出一组RGB数据,则须要SPI输出。

  由于存在MOSI输出反向,以是对应的RGB输出的高低电平须要进行反相。

  ● RGB的0,1bit对应SPI:    RGB-0:SPI-011   RGB-1:SPI-001

(1)转换代码

from machine import Pin,Timer,SPIimport timehspi = SPI(1, 2500000, sck=Pin(14), mosi=Pin(13), miso=Pin(12), polarity=0)def byte2bin(b): bstr = bin(b)[2:] return '0'(8-len(bstr)) + bstrdef rgb2byte(r,g,b): str = byte2bin(g) + byte2bin(r) + byte2bin(b) spistr = ''.join([(lambda s: '011' if s'0' else '001')(x) for x in str]) rgbdim = [int(spistr[i8:i8+8], 2) for i in range(9)] return bytes(rgbdim)rgbbyte = rgb2byte(0xff,0x80,0x3f)print(rgbbyte)rstbyte = bytes([0xff]16)outbyte = rstbyte+rgbbytewhile True: hspi.write(outbyte) time.sleep_ms(10)(2)输出波形

  输出RGB分别为:0xff, 0x80, 0x3f,对应的数据波形为:

▲ 图2.3.2 带有一个RST旗子暗记的一组RGB波形

  将RGB对应的输出脉冲展开后的波形,可以检讨输出波形是否符合WS2812对应的掌握旗子暗记协议。

▲ 图2.3.3 将RGB对应的输出脉冲展开后的波形

四、测试WS28121、波形失落真

  编程输出RGB为(0xff,0x0,0x0),对应WS2812该当是输出赤色,但直接接入之后,WS2812输出为白色。

  通过不雅观察DI的波形,可以看到它处于高电平的韶光超过400us,并且低电平大约为1.5V。
这解释Q1的驱动不敷。

▲ 图2.4.1 DI波形以及对应的WS2812颜色

2、降落R1的阻值

  降落R1阻值,提高Q1相应韶光,以及输出低电平降落。
末了将R1的阻值改换成3.3k欧姆之后,D1波形有了改进,此时WS2812的颜色与设置的参数符合了。

▲ 图2.4.2 DI波形以及对应的WS2812颜色

▲ 图2.4.3 终极对应的电路图中的参数

3、RGB转换颜色

  编程依次输出RGB颜色。

3、RGB转换颜色

from machine import Pin,Timer,SPIimport timehspi = SPI(1, 2500000, sck=Pin(14), mosi=Pin(13), miso=Pin(12), polarity=0)def byte2bin(b): bstr = bin(b)[2:] return '0'(8-len(bstr)) + bstrdef rgb2byte(r,g,b): str = byte2bin(g) + byte2bin(r) + byte2bin(b) spistr = ''.join([(lambda s: '011' if s'0' else '001')(x) for x in str]) rgbdim = [int(spistr[i8:i8+8], 2) for i in range(9)] return bytes(rgbdim)rgbbyte = rgb2byte(0xff,0x0,0x0)rstbyte = bytes([0xff]16)outbyte = rstbyte+rgbbyte+rstbytewhile True: rgbbyte = rgb2byte(0xff,0x0,0x0) outbyte = rstbyte+rgbbyte+rstbyte hspi.write(outbyte) time.sleep_ms(500) rgbbyte = rgb2byte(0x0,0xff,0x0) outbyte = rstbyte+rgbbyte+rstbyte hspi.write(outbyte) time.sleep_ms(500) rgbbyte = rgb2byte(0x0,0x0,0xff) outbyte = rstbyte+rgbbyte+rstbyte hspi.write(outbyte) time.sleep_ms(500)

  下面显示了WS2812在SPI输出波形掌握下完成颜色的转换。

▲ 图2.4.4 RGB转换颜色

※ 实验总结 ※

  利用ESP32中的硬件SPI输出脉冲波形,掌握WS2812相应。

  通过电路调度,选择了高频晶体管9018 作为输出反向晶体管,确定了放大电路参数,测试验证了利用高速SPI掌握WS2812的硬件电路和软件。

参考资料

[1]

WS2812: https://wenku.baidu.com/view/c8b79d88fad6195f312ba6d3.html

[2]

单片机LED IO口复用掌握方案: https://zhuoqing.blog.csdn.net/article/details/116725947

[3]

WS2812: https://d2j2m4p6r3pg95.cloudfront.net/module_files/led-cube/assets/datasheets/WS2812B.pdf

[4]

硬件SPI: https://docs.micropython.org/en/latest/esp32/quickref.html#hardware-spi-bus

[5]

ESP32实验转接板: https://zhuoqing.blog.csdn.net/article/details/115563474

标签:

相关文章

IT检查报告提示企业信息安全现状与对策

随着信息技术的飞速发展,企业信息化程度不断提高,信息安全已成为企业发展的关键因素。近日,我国某知名IT公司发布了一份针对企业信息安...

通讯 2024-12-27 阅读0 评论0

IT民工,介绍互联网时代的“幕后英雄”

随着互联网的飞速发展,我国IT行业呈现出一片繁荣景象。在这个充满机遇与挑战的领域,有一群人默默付出,他们就是被称为“IT民工”的程...

通讯 2024-12-27 阅读0 评论0

关于樊篱罩怎么拆?_屏障_卷曲

首先,须要理解主板上的屏蔽罩分为两种类型:带孔和整体焊接无孔。接下来,我会为您先容两种方法,您可以根据自己的情形选择适宜自己的方法...

通讯 2024-12-27 阅读0 评论0