杰理蓝牙耳机开发 -- 单线级联RGB幻彩灯控制

杰理蓝牙耳机开发 -- 单线级联RGB幻彩灯控制

蓝牙耳机或音箱中使用到的幻彩灯珠,本质上是一种集成了RGB (Red/Green/Blue)三色LED灯珠与内置控制IC的微型照明元件,能通过编程控制实现灯珠颜色动态色彩变化,覆盖从单色指示到七彩流动的多种灯光效果,显著提升产品视觉体验和交互性。在蓝牙耳机和音箱产品中,在蓝牙耳机和音箱产品中,幻彩灯常用的控制数据协议为单线归零码通讯方式,本文将演示如何通过杰理蓝牙耳机SDK控制单线级联RGB幻彩灯珠。

RGB幻彩灯基础资料

目前主流的 RGB 幻彩灯芯片型号包括 WS2812、WS2812B、APA102、SK6812 等,下文将以最常用的 WS2812 为例展开说明。

灯珠级联方法

芯片采用单线通信的方式,采用归零码的方式发送信号,芯片上电复位以后,接收DIN端从控制器打来的数据,接收够24bit数据后,送到芯片内部的数据锁存器,剩余的数据经过内部整形处理电路整形放大后通过DO端口开始转发输出给下一个级联的芯片,每经过一个芯片的传输,信号减少24bit。芯片采用自动整形转发技术,使得该芯片的级联个数不受信号传送的限制,仅仅受限刷屏速度要求,芯片级联方法如下图。

数据传输结构

RGB幻彩灯数据传输结构如下图

其中D1为芯片端对RGB幻彩灯发送的数据,D2、D3、D4为RGB级联电路自动整形转发的数据。

数据码逻辑实现

RGB幻彩灯输入码型和码型时间定义如下图(不同的RGB幻彩灯芯片会有些差别)

由以上可知RGB灯主要根据高电平时间判断"0"码和"1"码。高电平时间介于 250ns ~ 450ns,之间IC判断为"0"码,高电平时间介于 600ns ~ 1000ns,判断为"1"码。 "0"码和"1"码的低电平代表此码结束,准备接收下一数据码。

低电平复位时间最小为60us,为了留有余量一帧数据传输过程中(包括 24bit和24bit之间、bit和bit之间)不要中断超过50us,否则可能会被IC认为是RESET信号。中断时间在 50us之内,控制器都可以进行正常数据传输等其他操作。

单线RGB幻彩灯的控制

思路

控制RGB信号当然可以直接使用GPIO去模拟控制,但是这方法控制精度低,而且信号还容易受到系统中断、任务调度等因素的干扰;且需要CPU持续不断地翻转GPIO电平,这会占用大量的CPU资源,影响程序的其他功能运行。

除了使用GPIO去模拟RGB控制之外,我们想到还可以使用SPI模拟RGB控制逻辑进行控制,因为SPI波特率分档位可调,可以用来发送字节数据,没有起始位和停止位,空闲时也可以设置成高电平(避免发送了RST码),使用SPI发送数据模拟RGB控制信号的方式可以几乎完美契合RGB控制器控制时序的要求。

因此总体思路是将颜色数据(R G B)转换成SPI的数据,通过SPI输出数据到灯珠芯片DO(数据)引脚模拟灯珠的通信协议。

设计要点

  • 通过使用SPI发送数据的byte字节去模拟RGB控制器一个bit码的时序波形;
  • 使用SDK的SPI发送数据0x55,使用逻辑分析仪观察SPI数据一个bit高低电平翻转时间T;
  • 一个bit中连续的1/0控制0码/1码时序波形的高和低电平持续时间;
  • 码元周期(T0H+T0L或者T1H+T1L)=T*8;
  • SPI发送数据时高低电平翻转的时间T,需要满足:T0H=Tn1,T0L=T (8-n1); T1H=Tn2,T1L=T(8-n2)
  • 以上n1和n2取值1 ~ 7;
  • 发送数据时,用最后一个字节的第7位来控制发送完数据之后DO引脚的高低电平

杰理SDK幻彩灯控制实现步骤

以下以杰理JL708N-SDK为例,演示如何使用SDK中的SPI控制单线RGB幻彩灯

SPI初始化

这里主要配置SPI的模式、数据输出引脚、波特率等配置,MOSI引脚接RGB灯芯片的数据DI引脚。

SPI数据位翻转时间

首先可以使用SPI接口发送一个0x55的数据

由以上spi配置8Mbps时钟速度计算可以得出,每个bit翻转时间大概为125ns,

使用示波器或逻辑分析仪抓出每个bit翻转的时间是否和理论值没有太大误差,如下图。

码型实现

根据RGB芯片规格书由于"0码" T0H高电平时间需要250ns ~ 550ns,T0L低电平时间700ns ~ 1000ns,因此"0码"只需要2个bit高电平,6个bit低电平即可满足时序的需求;同理对于"1码",则需要6个bit高电平,2个bit低电平即可满足,所以"0码"SPI发送字节0xC0,SPI发送字节0xF8代表一个"1码"。

RGB码转成SPI数据

码型实现后就可以发送RGB数据了,由于一个灯需要的数据为24bit,所以需要每个灯需要SPI发送24字节的数据,RGB数据结构如下

需要将24个颜色数据转换成SPI数据发送给幻彩灯芯片,比如纯红色数据为{0,255,0},需要发送24bit码为000000001111111100000000,转换成SPI需要发送的24字节数据为

0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0。

RGB24bit数据转换成SPI24字节代码示例如下图

相关推荐
三佛科技-134163842121 小时前
KP3111LGA/KP3111LPA/ KP3111SPA高精度5V220MA离线式PWM功率开关 典型电路,三者对比
单片机·物联网·智能家居·pcb工艺
@游子1 小时前
Python学习笔记-Day4
笔记·python·学习
摇滚侠1 小时前
零基础小白自学 Git_Github 教程,IDEA 中使用 Git 基础,rebase 和 merge 的区别,笔记16
笔记·git·github
KWTXX1 小时前
用逻辑分析仪验证 ,关闭端口时钟则单片机无法正常工作
单片机·嵌入式硬件
豌豆抛1 小时前
案例应用 | 精准定位重塑博物馆观展体验
网络·科技·物联网
.小小陈.1 小时前
C++初阶4:STL简介
开发语言·c++·学习
FFF团团员9091 小时前
树莓派学习笔记5:安装yagmail,启用SMTP,发送邮件
笔记·学习
liugang_lawyer1 小时前
防范新型金融诈骗
笔记·百度·微信·金融·微信公众平台·新浪微博
遇到困难睡大觉哈哈1 小时前
Harmony os——ArkTS 语言笔记(七):注解(Annotation)实战理解
java·笔记·ubuntu·harmonyos·鸿蒙