SK6812驱动入门

2023-05-16

我看数据手册一般是特性、引脚定义、外围电路、时序图以及驱动代码。 

特性

● Top SMD内部集成高质量外控单线串行级联恒流IC;
● 控制电路与芯片集成在SMD 3528元器件中,构成一个完整的外控像素点,色温效果均匀且一致性高。
● 内置数据整形电路,任何一个像素点收到信号后经过波形整形再输出,保证线路波形畸变不会累加。
● 内置上电复位和掉电复位电路,上电不亮灯;
● 灰度调节电路( 256级灰度可调),
● 红光驱动特殊处理,配色更均衡,
● 单线数据传输,可无限级联。
● 整形转发强化技术,两点间传输距离超过10M.
● 数据传输频率可达800Kbps, 当刷新速率30帧/秒时,级联数不小于1024点。

引脚定义

典型电路

在实际应用电路中,为防止产品在测试时带电插拔产生的瞬间高压损伤IC内部信号输入输出引脚,应在信号输入及输出端串接保护电阻。此外,为了使各IC芯片间更稳定工作,各灯珠间的退偶电容则必不可少;

时序图

看到这里就大致知道器件的功能了,剩下的就是要去关注驱动的注意点。

 由于我采用PWM+DMA的方式去驱动SK6812,所以需要了解器件的数据传输时间和数据传输规则,方便确定我们的周期。

数据传输时间

从数据手册中可以看到厂家规定是码元周期最小为1.2us,所以我们采用PWM驱动时需要周期不大于1.2us。

逻辑“1”代表占空比在64%左右,逻辑“0”代表在33%左右。

24bit数据结构

24bit的数据是按照GRB的顺序发送,所以我们选择HEX转RGB时要注意“R”与"G"的HEX要交换一下位置。

 数据传输方式

灯数据刷新的间隔要大于80us。

代码

初始化定时器3和输出比较器。

  /* Compute the prescaler value */
  PrescalerValue = (uint16_t) (SystemCoreClock / 20000000) - 1;
  /* TMRe base configuration */
  TMR_TimeBaseStructInit(&TMR_TMReBaseStructure);
  TMR_TMReBaseStructure.TMR_Period = 20;
  TMR_TMReBaseStructure.TMR_DIV = PrescalerValue;
  TMR_TMReBaseStructure.TMR_ClockDivision = 0;
  TMR_TMReBaseStructure.TMR_CounterMode = TMR_CounterDIR_Up; 

  TMR_TimeBaseInit(TMR3, &TMR_TMReBaseStructure);

  /* PWM1 Mode configuration: Channel1 */
  TMR_OCStructInit(&TMR_OCInitStructure);
  TMR_OCInitStructure.TMR_OCMode = TMR_OCMode_PWM1;
  TMR_OCInitStructure.TMR_OutputState = TMR_OutputState_Enable;
  TMR_OCInitStructure.TMR_Pulse = CCR1_Val;
  TMR_OCInitStructure.TMR_OCPolarity = TMR_OCPolarity_High;

  TMR_OC1Init(TMR3, &TMR_OCInitStructure);

  TMR_OC1PreloadConfig(TMR3, TMR_OCPreload_Enable);

 初始化DMA。ss

void DMA_Configuration(void)
{
  DMA_InitType DMA_InitStructure = {0};

  /* DMA1 Channel5 Config */
  DMA_Reset(DMA1_Channel6);
  DMA_DefaultInitParaConfig(&DMA_InitStructure);
  DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&TMR3->CC1;
  DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)SRC_Buffer;
  DMA_InitStructure.DMA_Direction = DMA_DIR_PERIPHERALDST;
  DMA_InitStructure.DMA_BufferSize = sizeof(SRC_Buffer);
  DMA_InitStructure.DMA_PeripheralInc = DMA_PERIPHERALINC_DISABLE;
  DMA_InitStructure.DMA_MemoryInc = DMA_MEMORYINC_ENABLE;
  DMA_InitStructure.DMA_PeripheralDataWidth = DMA_PERIPHERALDATAWIDTH_HALFWORD;
  DMA_InitStructure.DMA_MemoryDataWidth = DMA_MEMORYDATAWIDTH_HALFWORD;
  DMA_InitStructure.DMA_Mode = DMA_MODE_NORMAL;
  DMA_InitStructure.DMA_Priority = DMA_PRIORITY_HIGH;
  DMA_InitStructure.DMA_MTOM = DMA_MEMTOMEM_DISABLE;

  DMA_Init(DMA1_Channel6, &DMA_InitStructure);

  /* DMA1 Channel5 enable */
  DMA_ChannelEnable(DMA1_Channel6, ENABLE);
}

使能定时器的预装载器、DMA和使能定时器。

  TMR_ARPreloadConfig(TMR3, ENABLE);

	TMR_DMACmd(TMR3, TMR_DMA_CC1, ENABLE);
  /* TMR3 enable counter */
  TMR_Cmd(TMR3, ENABLE);

根据数据手册可知, 周期我设置为20,所以13代表逻辑“1”,7代表逻辑“0”.

uint16_t SRC_Buffer[]={
	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \
	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \
	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \
	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \
	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \

	//按照GRB的顺序
  //FF0000 green
	13,13,13,13,13,13,13,13,\
	7,7,7,7,7,7,7,7,\
	7,7,7,7,7,7,7,7,\
	
	 //00FF00 red
	7,7,7,7,7,7,7,7,\
	13,13,13,13,13,13,13,13,\
	7,7,7,7,7,7,7,7,\
	
	//0000FF blue
	7,7,7,7,7,7,7,7,\
	7,7,7,7,7,7,7,7,\
	13,13,13,13,13,13,13,13,\
};

上面的数据代码表示先用100us的低电平复位灯,按照GRB的顺序第一个灯显示绿色,第二个灯显示红色,第三个灯显示蓝色。

以上例程是基于雅特力AT32F407平台写的,不过在其他都一样可用。 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SK6812驱动入门 的相关文章

  • MPLAB程序中如何设置配置字

    基于MPLAB X IDE配置位设置讲解 在不同的芯片中其配置字不尽相同 xff0c 但是管家最常用到的有如下几部分 xff1a 1 芯片的振荡模式 xff0c 有内外之分 xff0c 还有三个速度的选择 2 xff0c 片内看门狗的启用
  • 直流电机驱动电路设计

    http bbs ednchina com BLOG ARTICLE 177889 HTM 一 直流电机驱动电路的设计目标 在直流电机驱动电路的设计中 xff0c 主要考虑一下几点 xff1a 功能 xff1a 电机是单向还是双向转动 xf
  • 奇偶校验码

    http blog 163 com ma youzhong blog static 42459154200821785759423 老顽童 xff08 原创 xff09 二进制数据经过传送 存取等环节 xff0c 会发生误码 xff08 1
  • 串口半双工与全双工

    怎么这么多人认为 xff14 xff18 xff15 是半双工 xff1f 大家能不能看一下具体的定义啊 xff1f xff01 不要认为我们经常使用 xff14 xff18 xff15 的半双工方式就认为 xff14 xff18 xff1
  • NPN传感器PNP传感器原理和分类

    PNP与NPN型传感器其实就是利用三极管的饱和和截止 xff0c 输出两种状态 xff0c 属于开关型传感器 但输出信号是截然相反的 xff0c 即高电平和低电平 PNP输出是高电平1 xff0c NPN输出的是低电平0 PNP与NPN型传
  • Windows系统上在vscode连接服务器http-server

    1 打开vscode xff0c 创建一个HTML文件 2 查看 gt 终端 3 Windows10的终端是powershell xff0c 点击 xff0c 在下拉栏找到默认 xff0c 更改成cmd终端 4 输入 npm install
  • 精密单点定位技术(PPP)和RTK技术有什么区别

    首先用通俗的话来说 xff0c RTK是先架设一个基站 xff0c 基站把自己的误差是多少告诉我 xff0c 我再用这个误差项去消除自己移动站的误差 而PPP不用我们自己架设基站 xff0c 已经有一些基础的基站 xff0c 通过卫星发送的
  • ubuntu network manager 网络需要手工重启解决

    乌班图的无线和网络需要手工 sudo service network manager restart才可以搜索到 其实主要是我手工编辑了 etc network interface 修改的方法就是在 etc NetworkManager N
  • C#垃圾回收GC机制

    https www cnblogs com yzl050819 p 6245463 html 可以参考这篇文章的内容 程序员不能控制解构器何时将被执行因为这是由垃圾收集器决定的 垃圾收集器检查不在被应用程序使用的对象 它认为这些条件是符合清
  • 编译xlslib 测试写入中文

    1下载xlslib库 https sourceforge net projects xlslib source 61 directory 我下载的是 xlslib package 2 5 0 zip 解压 在xlslib xlslib bu
  • 电商API:拍立淘图片搜索

    item search img 按图搜索淘宝商品 xff08 拍立淘 xff09 查看演示 onebound taobao item search img 请求参数 xff1a imgid 61 http g search3 alicdn
  • Qt的UI布局以及控件间隔(Spacing)边距(Margins)

    替一个Widget设置布局有两种方法 1layout 构造函数传递QWidget QVBoxLayout MainQVboxLayout 61 new QVBoxLayout MainWidget 2layout构造函数传递NULL xff
  • 让Qt自定义窗口边界可以拉伸

    qt去掉外边框以后 边界不能拉伸 第一 根据mouseevent事件到达边界的时候自己处理 通过resize 来设置 这种需要写的代码较多 windows平台上有更简版的方法 处理winevent里面的 WM NCHITTEST switc
  • 最新uboot的Kbuild系统 3 .config的生成

    前面的工作产生了一个conf 关键点是由conf产生 config的过程 最后是通过执行 scripts kconfig conf defconfig 61 arch configs rpi defconfig Kconfig 生成的 Kc
  • linux下IDA安装使用

    http www hexblog com p 61 958 sudo dpkg add architecture i386 sudo apt get update sudo apt get install libc6 i686 i386 l
  • RK3288的几种USB模式

    RK3288启动后有三种模式 xff0c 可以分别进行操作 一种是normal也就是正常的启动模式 这个模式无法刷固件 一般板子通电就是这个模式 第二种是loader模式 就是刷固件模式 这个模式可以刷各种image 按住recover按键
  • (导数)微分与积分的概念

    1导数定义 2微分 微分可以看作 y在自变量增量x 处在一个极小值deta x下的变化值的线性主部 微分指的是dy dy和deta Y有一个极小的增量也就是图5 9中的Q Q 39 xff0c 这一部分可以忽略不计 所以是微分 dy 是de
  • android sdk license问题

    You have not accepted the license agreements of the following SDK components Checking the license for package CMake 3 6

随机推荐