作者:Tkwer
公众号:Tkwer望远镜
WS2812B彩灯介绍
WS2812是一个集控制电路和发光电路于一体的智能外控LED光源,其型号与一个5050LED灯珠相同,每个元件为一个像素点,像素点的内部包含了智能数字接口数据锁存信号整形放大驱动电路。为了保证像素点的颜色高度一致,数据协议采用单线归零码的通讯方式,像素点在上电复位以后DIN 接收从控制器传输过来的数据,首先送过来的是24bit数据被第一个像素点提取后,送到像素点的内部数据锁存器,剩余的数据经过内部整形处理电路整形放大后通过DO端口开始转发输出给下一级联的像素点,每经过一个像素点的传输,信号减少24bit。每个像素点的三基色颜色可实现256级亮度显示,完成16777216种颜色的全真色彩显示。串行级联接口,能通过一根信号线完成数据的接收与解码。像素点采用自动整形转发技术,使得该像素点的级联个数不受信号传送的限制,仅仅受限信号传输速度要求。 数据发送速度可达800Kbps。
本次实验使用到的WS2812B模块如上图所示,一共是8盏灯珠级联。首先我们简单来介绍驱动WS2812B的时序波形图:
从图中可以看出,数字“1”使用长脉宽来编码(占空比为64%),“0”使用短脉宽来编码(占空比为32%)。数据线低电平保持时间大于50us时,为复位信号。复位后,每个LED读取“DIN”线上开始的24bit(绿:红:蓝为8:8:8)数据到驱动芯片内部缓存。除了开始的24bit数据,后面的数据都通过“DOUT”脚传递到下一个LED,即每经过一个像素点的传输,信号减少24bit。内部缓存数据在下一个复位脉冲后被写入PWM控制器。一个bit为1.25us,一个LED有3*8bits=24bits,传输完 需要24*1.25us=30us。
本例程将使用PWM+DMA驱动WS2812B。
使用STM32CubeMX生成工程模板
本例程我们需要用到TIM和DMA,所以我们在CuBeMX中添加配置一下。
生成MDK工程
移植WS2812B程序
移植WS2812B和Adafruit_NeoPixel库,在BSP文件夹中,将文件添加到工程中。
在ws2812.c文件中值得关注的关键函数是WS2812_show()
1void WS2812_show(void)
2{
3 int8_t i, j;
4
5 for(i = 0; i < PIXEL_MAX; i++)
6 {
7 for(j = 0; j < 8; j++)
8 {
9 frame.data[24 * i + j] = (rBuffer[i] & (0x80 >> j)) ? BIT_1 : BIT_0;
10 frame.data[24 * i + j + 8] = (gBuffer[i] & (0x80 >> j)) ? BIT_1 : BIT_0;
11 frame.data[24 * i + j + 16] = (bBuffer[i] & (0x80 >> j)) ? BIT_1 : BIT_0;
12 }
13 }
14 HAL_TIM_PWM_Start_DMA(&htim4, TIM_CHANNEL_3, (uint32_t *)&frame, 3 + 24 * PIXEL_MAX + 1);
15}
在main.c中包含ws2812b.h头文件,调用WS2812应用函数
1/* USER CODE BEGIN Includes */
2#include "usart.h"
3#include "sys.h"
4#include "delay.h"
5#include "SSD1306_IIC.h"
6#include "ws2812b.h"
7#include "mpu6050.h"
8/* USER CODE END Includes */
1 /* USER CODE BEGIN WHILE */
2 __HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, 30);
3 HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_3);
4 WS2812B_Init();
5 delay_ms(1000);
6 while (1)
7 {
8 /* USER CODE END WHILE */
9
10 /* USER CODE BEGIN 3 */
11 for(int j = 1; j<12; j++){
12 for(int i = 0; i<800; i++){
13 WS2812_Process(j);
14 }
15 }
16 }
17 /* USER CODE END 3 */
显示效果
参考链接:http://club.gizwits.com/thread-3407-1-1.html
https://blog.csdn.net/ben392797097/article/details/78075699
END
公众号ID:Tkwer望远镜
提供TOLIN核心板软件工程,公众号内回复即可获取:TOLIN_Template2