littleshrimp 发表于 2018-12-7 23:23

BlueNRG-1驱动WS2812B全采灯条模拟奥迪流水效果转向灯

本帖最后由 littleshrimp 于 2018-12-7 23:23 编辑

觉得“宝马”车的转向效果太LOW,用8颗WS2812B灯珠实现奥迪的转向效果


WS2812B的灯条网上有很多,驱动也随处可见



这种灯条用带DMA的SPI驱动起来很方便
WS2812B一颗灯珠的数据是24位,G、R、B分别占8位
是如果能把SPI的时钟设置成2.5MHz左右,那么发送100三个位可以表示WS2812B的一个0位,110可以表示一个1位
这样一颗灯珠可以使用24*3共9个字节控制
在代码里spi的频率可以像下边这样随便填



不过实际上和STM32类似,它只允许在SPI主时钟的基础上做固定的分频,即2的整数倍



SPI的时钟是16M,如果这样设置SPI_InitStructure.SPI_BaudRate = 2500000;得到的CPSR是2,,SCR是2,
根据公式16MHz / (CPSDVR * (1+SCR))得到2.66MHz,再降一档把把SCR设置成3的SPI频率又变成2M
虽然是2.66MHz对比数据手册也能满足要求找到2个同一家的数据手册,电平时间上居然也会有差别
还好都在范围内

附上WS2812B的驱动代码
#include <stdint.h>

#define WS2812B_BIT0 0x04 /*100*/
#define WS2812B_BIT1 0x06 /*110*/
#define WS2812B_RESET 0x00 /*000*/
#define WS2812B_BIT(b,x) (((b & 1ul<<x) == 1ul<<x)?WS2812B_BIT1:WS2812B_BIT0)
typedef struct
{
uint8_t g;
uint8_t r;
uint8_t b;
}Color_t;

typedef union
{
Color_t color;
uint8_t bytes;
}Color_Bytes_t;

extern void RGBColorsToWS2812BBytes(uint8_t *buf,Color_Bytes_t *colors,uint16_t colorsLength);



#include "ws2812b.h"

//buf的长度=colorsLength*9;
void RGBColorsToWS2812BBytes(uint8_t *buf,Color_Bytes_t *colors,uint16_t colorsLength)
{
   int32_t i;
   uint32_t bytes;
   uint16_t j,k;
   uint16_t buf_index = 0;
   //读取数据超过原数组长度后退出
   for(i=0;i<colorsLength;i++)
   {   
   for(j=0;j<3;j++)
   {
       bytes = 0;
       for(k=0;k<8;k++)
       {
          bytes <<= 3;
          bytes |= WS2812B_BIT(colors.bytes,7-k);
       }
       for(k=0;k<3;k++)
       {
         buf = bytes >> (8 * (3 - k -1));
       }
   }
   }
}

BlueNRG-1使用SPI DMA的方式驱动WS2812B灯条的工程文件
**** Hidden Message *****




此内容由EEWORLD论坛网友littleshrimp原创,如需转载或用于商业用途需征得作者同意并注明出处





star_66666 发表于 2018-12-8 15:09

回复看看了

star_66666 发表于 2018-12-8 15:09

很多好东西啊

周小北 发表于 2018-12-13 10:31

学习学习

ryan_song 发表于 2018-12-17 18:11

看看效果

cdr430 发表于 2018-12-21 16:09

瞻仰瞻仰。

starxit 发表于 2019-3-5 22:12

参考看看

somo1 发表于 2019-5-7 22:22

自己DIY乐趣无限哈哈哈

uniqueyj 发表于 2019-6-18 17:34

<p>好东西</p>

gotop 发表于 2019-6-22 16:17

<p>学习学习&nbsp;DIY乐趣无限</p>

小纸飞机 发表于 2019-6-25 02:12

学习学习

wbhb2011 发表于 2019-7-1 14:20

<p>mark 新的驱动方式学到了 ,我用GPIO模拟的 驱动过</p>

夏天丶 发表于 2019-7-7 23:17

<p>学习学习</p>

七七见奈波 发表于 2019-7-10 19:24

<p>学习学习</p>

zjxieyanjun 发表于 2019-7-17 08:41

<p>学习了,感谢分享</p>

a421129312 发表于 2019-7-24 09:50

<p>学习学习</p>

generalcircuits 发表于 2019-7-24 15:48

<p>学习学习&nbsp;DIY乐趣无限</p>

U哥(优哥) 发表于 2019-11-10 14:40

<p>学习学习</p>

jonwoo1991 发表于 2019-11-14 14:13

谢谢分享

xiaowei2002999 发表于 2023-3-8 13:07

<p>想看看&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</p>
页: [1] 2
查看完整版本: BlueNRG-1驱动WS2812B全采灯条模拟奥迪流水效果转向灯