打印
[MCU]

CH32幻彩灯控 - WS2812及同等类型灯珠的四种驱动方式

[复制链接]
1470|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 我芯永恒 于 2024-8-30 10:40 编辑

CH32幻彩灯控 - WS2812及同等类型灯珠的四种驱动方式

目录
  • WS2812时序
  • 方式一,IO翻转驱动
  • 方式二,定时器PWM+DMA驱动
  • 方式三,SPI驱动
  • 方式四,PIOC驱动
  • 总结



  当下ARGB(Addressable RGB)盛行,用CH32也可轻松施展灯光魔法;以CH32X035为例分析驱动WS2812幻彩LED灯珠的四种方式。
WS2812时序
  WS2812是集控制电路与发光电路于一体的LED,采用单线数据协议,每24bit数据控制总线上的一颗LED。但此处的bit不等同于二进制中的位,它由自己的一段时序代表最小的信息量单位,分别为0码和1码,还有Reset码,典型时序如下图:


  24bit 的数据结构为每 8bit 控制一种颜色, bit[23:16] 代表 Green 绿色,灰度为0~255, bit[15:8] 代表 Red 红色, bit[7:0] 代表 Blue 蓝色,同理灰度都为0~255;在发送数据时按照GRB的顺序高位先发。
方式一,IO翻转驱动
1、IO初始化,配置GPIO为推挽输出,初始化为低电平;
2、IO翻转的时间,通过写寄存器的方式来翻转IO电平,逻辑分析仪测量CH32X035在48M主频下的IO翻转的时间如下,高电平执行时间45ns,低电平执行时间40ns;
3、控制输出时序;



4、调用以上函数组成IO输出的时序,控制RGB色彩;
方式二,定时器PWM+DMA驱动
1、定时器初始化,重装载值(10-1);预分频值(6-1);可得PWM频率 800K Hz,PWM选择模式1,输出极性配置为高,即低于比较值时输出有效电平,且有效电平为高;

2、DMA初始化,DMA方向为内存到外设,即将比较值从内存搬运至定时器的比较寄存器;DMA传输数据宽度为半字,且不开启循环模式,
3、使能PWM输出;
4、使能DMA传输修改定时器比较值来控制PWM占空比,PWM周期为1250ns,根据每bit数据决定PWM输出的占空比,来控制输出0码(高电平30%,低电平70%)或1码(高电平50%,低电平50%);
方式三,SPI驱动
1、SPI初始化,主机模式,数据宽度8位,每字节控制WS2812的一个bit(最小时序码),即24字节控制一颗LED;
2、设置RGB的缓存,每24字节控制一颗灯珠,以输出三颗灯珠依此为为绿红蓝为例:
3、SPI发送,输出RGB
方式四,PIOC驱动
CH32X035内嵌了一个可编程协议IO微控制器,可实现单线输出;
1、设置RGB缓存,以三颗灯珠为例;
2、输出通道初始化,若选择PC18或PC19为输出通道,则须先关闭PC18和PC19默认的 SWD 功能;
3、根据缓存输出RGB

总结
四种方式均可驱动WS2812及其同等类型的LED灯珠,可根据引脚资源和具体应用环境自由选择,以CH32X035为例参考程序如下:
CH32X035G8U6_WS2812.zip (542.43 KB)


使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

59

帖子

1

粉丝