STM32F10x驱动SKC6812

引言

        在本篇博客中,我将会从SKC6812芯片的工作原理讲起,帮助读者逐步建立并完善SKC6812的驱动程序设计。

        ps:我想比较详细的讲述整个实现框架,因此本篇文章会逐步完善,我会在尽量短的时间里完成对本篇博客的更新。

了解SKC6812芯片的基本数据

        传输方式

           参考SKC6812芯片的产品规格书,可知每个SKC6812芯片会截取32bit数据(为什么要截取32bit在下面会有介绍),一组芯片是串行连接,如下图所示

2ff36ae351ba445caddca1eb0a484ee5.png

        码源定义

         知道信号的传输方式后继续查阅资料可知每个SKC6812芯片所截取的信号的码源定义,如下图,即可以理解为当一组信号被一个芯片截取后,如果高电平持续0.3us(0.2-0.4us),随后有一个下降沿,并在低电平持续至少0.8us,芯片会自动判定这是一个0码,如果高电平持续0.75us(0.65-1.0us),随后有一个下降沿,并在低电平持续至少0.2us,芯片会自动判定这是一个1码,如果一个下降沿后低电平持续超过200us,芯片则复位(在我的个人理解中一组信号结束后低电平持续200us以上为信号结束,最后一个接收到信号的芯片就不再向后传递信号)。

7083840ee7f4452ca0b3dcbe31e60030.png

 

5bd2b064b2b047288c8794cacea3a114.png

         数据传输方式如下图所示,即D1截取先发送来的一组32bit数据,D2截取下一组发送来的32bit数据,依次类推。

2dfbaefc936648c5807619367d8a9052.png

        数据结构 

        我们知道,一个颜色是由三原色组成的,每个颜色都有其对应的RGB的值,R、G、B的值都在0x00到0xff之间,每个值都可以用一个8位二进制表示,那么想完整的表示所有颜色,则需要24位二进制数,SKC612芯片在三原色的基础上增加了白光灯,也是由八位二进制表示,组合在一起就是一个32位的二进制数,这也就是为什么每一个SKC6812芯片需要截取32个码值,如下图所示

660f82ebb49042feb973081473bd02b4.png

 ,依次为GRBW。

小结

        在熟悉了SKC6812的工作状态后我们就可以开始搭建驱动此芯片的思维框架了。

程序框架搭建

        根据上面了解的资料,SKC6812的驱动方式是固定的高低电平,由此联想到定时器的输出比较器输出PWM波来实现驱动,根据参考手册可知STM32F10x系列TIM的时钟频率为72MHz,SKC6812的一个码源周期为1.2us,如果直接由定时器的输出比较器输出PWM输出信号受代码段影响较大,因此考虑使用TIM+DMA的方法。

定时器设置

        TIM的频率为72MHz,在不分频的情况下设置自动重装值为90,则PWM的输出周期为1.2us,符合SKC6812芯片的需求。在此基础上可计算出1码的CCR值应为50,0码的CCR值应为25,具体计算过程不再陈列,感兴趣的读者可以自行动手计算。

数据处理

        写入程序时,我们写入的是灯光颜色的RGB值,在实际程序编写时,我希望直接输入一个GRBW的值,然后直接计算出对应的CCR值。

        一个灯珠的颜色可以由GRBW值来控制,这个值是32位的,也就是我们要不断的写入CCR寄存器相应的CCR值以达到发送SKC6812可以识别的波形的需求,也就是一个灯珠需要32个CCR的值去控制,因此我们直接输入一个GRBW的值,编写函数对这个值操作,取出这个值的二进制下每一位的0或1。如果这一位是0,就写入CCR的值为25,如果是1,就写入CCR得到值为50,由于我们要控制的灯珠不止一颗,就需要对多个GRBW的值进行处理,得到灯珠个数*32个CCR的值,将其存入预设好的数组中,便于DMA搬运。

TIM与DMA传输

        在数据处理函数中对GRBW的值处理完后并存入相应数组后,就把数组交由DMA,由DMA

把数组内容搬运到CCR寄存器中。

        查阅参考手册可知,从DMA1到TIM2的数据转运操作是从通道2触发的,因此数据转运也从

6d89ab3613fc48e690fdb389b6d9903a.png

 通道2进行。

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值