当前位置:首页 > > TsinghuaJoking
[导读]“简介:利用ESP32中的硬件SPI控制WS2812的显示。使用了高频三极管9018作为输出接口反向器,确定合适的电阻参数,验证了驱动方案的硬件和软件的可行性。关键词:WS2812,ESP32,SPI”01WS2812  智能集成LED光源WS2812[1]通过简单的外部接口、特...

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


01 WS2812

能集成LED光源 WS2812[1] 通过简单的外部接口、特有的级联方案便于利用MCU完成多个LED控制,极大简化了LED控制接口。相比于传统的 单片机LED IO口复用控制方案[2] ,使用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,SPI
import time

hspi = 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,SPI
import time

hspi = 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,SPI
import time

hspi = 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))   bstr

def 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[i*8:i*8 8], 2) for i in range(9)]
return bytes(rgbdim)

rgbbyte = rgb2byte(0xff,0x80,0x3f)
print(rgbbyte)

rstbyte = bytes([0xff]*16)
outbyte = rstbyte rgbbyte

while True:
hspi.write(outbyte)
time.sleep_ms(10)

(2)输出波形

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


▲ 图2.3.2 带有一个RST信号的一组RGB波形将RGB对应的输出脉冲展开后的波形,可以检查输出波形是否符合WS2812对应的控制信号协议。


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

四、测试WS2812

1、波形失真

编程输出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,SPI
import time

hspi = 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))   bstr

def 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[i*8:i*8 8], 2) for i in range(9)]
return bytes(rgbdim)

rgbbyte = rgb2byte(0xff,0x0,0x0)
rstbyte = bytes([0xff]*16)
outbyte = rstbyte rgbbyte rstbyte

while 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的硬件电路和软件。






本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

特朗普集团近日取消了其新推出的T1智能手机“将在美国制造”的宣传标语,此举源于外界对这款手机能否以当前定价在美国本土生产的质疑。

关键字: 特朗普 苹果 AI

美国总统特朗普在公开场合表示,他已要求苹果公司CEO蒂姆·库克停止在印度建厂,矛头直指该公司生产多元化的计划。

关键字: 特朗普 苹果 AI

4月10日消息,据媒体报道,美国总统特朗普宣布,美国对部分贸易伙伴暂停90天执行新关税政策,同时对中国的关税提高到125%,该消息公布后苹果股价飙升了15%。这次反弹使苹果市值增加了4000多亿美元,目前苹果市值接近3万...

关键字: 特朗普 AI 人工智能 特斯拉

3月25日消息,据报道,当地时间3月20日,美国总统特朗普在社交媒体平台“真实社交”上发文写道:“那些被抓到破坏特斯拉的人,将有很大可能被判入狱长达20年,这包括资助(破坏特斯拉汽车)者,我们正在寻找你。”

关键字: 特朗普 AI 人工智能 特斯拉

1月22日消息,刚刚,新任美国总统特朗普放出重磅消息,将全力支持美国AI发展。

关键字: 特朗普 AI 人工智能

特朗普先生有两件事一定会载入史册,一个是筑墙,一个是挖坑。在美墨边境筑墙的口号确保边境安全,降低因非法移民引起的犯罪率过高问题;在中美科技产业之间挖坑的口号也是安全,美国企业不得使用对美国国家安全构成威胁的电信设备,总统...

关键字: 特朗普 孤立主义 科技产业

据路透社1月17日消息显示,知情人士透露,特朗普已通知英特尔、铠侠在内的几家华为供应商,将要撤销其对华为的出货的部分许可证,同时将拒绝其他数十个向华为供货的申请。据透露,共有4家公司的8份许可被撤销。另外,相关公司收到撤...

关键字: 华为 芯片 特朗普

曾在2018年时被美国总统特朗普称作“世界第八奇迹”的富士康集团在美国威斯康星州投资建设的LCD显示屏工厂项目,如今却因为富士康将项目大幅缩水并拒绝签订新的合同而陷入了僵局。这也导致富士康无法从当地政府那里获得约40亿美...

关键字: 特朗普 富士康

今年5月,因自己发布的推文被贴上“无确凿依据”标签而与推特发生激烈争执后,美国总统特朗普签署了一项行政令,下令要求重审《通信规范法》第230条。

关键字: 谷歌 facebook 特朗普

众所周知,寄往白宫的所有邮件在到达白宫之前都会在他地进行分类和筛选。9月19日,根据美国相关执法官员的通报,本周早些时候,执法人员截获了一个寄给特朗普总统的包裹,该包裹内包含蓖麻毒蛋白。

关键字: 美国 白宫 特朗普
关闭