杰理蓝牙耳机开发 -- 单线级联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字节代码示例如下图

相关推荐
学烹饪的小胡桃11 分钟前
【运维学习】实时性能监控工具 WGCLOUD v3.6.2 更新介绍
linux·运维·服务器·学习·工单系统
nnsix15 分钟前
QFramework学习笔记
笔记·学习
XFF不秃头16 分钟前
力扣刷题笔记-全排列
c++·笔记·算法·leetcode
我想我不够好。17 分钟前
电工实操 电路的接线和理解以及练习 12.21
学习
ys~~21 分钟前
git学习
git·vscode·python·深度学习·学习·nlp·github
知识分享小能手21 分钟前
Ubuntu入门学习教程,从入门到精通,Ubuntu 22.04的桌面环境 (4)
linux·学习·ubuntu
05大叔1 小时前
多线程的学习
java·开发语言·学习
就是蠢啊1 小时前
51单片机——DAC数模转换实验(一)
单片机·嵌入式硬件·51单片机
لا معنى له1 小时前
目标分割介绍及最新模型----学习笔记
人工智能·笔记·深度学习·学习·机器学习·计算机视觉
月光在发光2 小时前
多态(虚函数核心作用原理)--C++学习(0)
c++·学习