一、简介
幻彩灯珠其内置IC,可显示256*256*256种颜色,实现多种多样的效果。其控制仅通过一根信号线即可实现。
本篇文章以幻彩灯珠SK6812为基础进行介绍,与常用的WS2812B原理一致。
二、SK6812特性
SK6812的原理图如下所示
引脚定义
电气特性
信号特性
典型应用电路
三、详细设计
3.1.硬件设计
主控选用兆易创新的GD32F103RBT6,其硬件设计与STM32F103RBT6兼容。
3.2.固件设计
驱动方法——基于STM32 SPI+DMA
3.2.1 时序分析
首先,由SK6812数据传输时间表可知
其次, SPI发送数据8bit数据。我们利用SPI发送的1个8bit数据所形成的波形分别来表示0码和1码;
再看0码的高低电平持续时间为1:3,1码的高低电平持续时间为1:1;那么我们可以先做如下假设:
0码表示方法:前2个比特为高,后6个比特为低;(高低电平持续时间比例为1:3)
1码表示方法:前4个比特为高,后4个比特为低;(高低电平持续时间比例为1:1)
在此假设SPI的频率为f kHz,则有
因此STM32中的SPI的时钟频率的范围应该在5.7Mhz至8Mhz之间。
SPI发送的8bit数据来表示0码和1码,如下:
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0码 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
1码 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
即我们可以通过SPI发送一个数据0xC0来表示0码,发送一个数据0XF0表示1码。
3.2.2 数据结构分析
每个灯珠的颜色是由R、G、B三色合成的,其需要24bit数据来完成具体格式参见24bit数据结构。
这里我们以一颗灯珠为例,假设显示橙色,其RGB值为255, 165, 0, 代码#FFA500。
在这里用Z表示0码,即0xC0,O表示1码,,即0xF0
G:A5 二进制为:1010 0101其对应的比特形式为:OZOZ ZOZO
R:FF 二进制为:1111 1111其对应的比特形式为:OOOO OOOO
B:00 二进制为:0000 0000其对应的比特形式为:ZZZZ ZZZZ
那么需要发送的24bit数据即为
代号形式:OZOZ ZOZO OOOO OOOO ZZZZ ZZZZ
十六进制形式: F0 C0 F0 C0 F0 C0 F0 C0 F0 F0 F0 F0 F0 F0 F0 F0 C0 C0 C0 C0 C0 C0 C0 C0
即我们通过SPI将上述数据发送给幻彩灯珠,即可显示为橙色。
3.2.3 源码
源码下载链接:https://download.csdn.net/download/liji1213/18574884