oneos组件系列02:ws2812全彩LED

oneos组件系列02:ws2812全彩LED驱动

本组件仓库:
https://gitee.com/dreamfly233/OneOS/tree/projects_OneOS-v2.3.0/components/ws2812

参考链接:

ws2812简介:

  • WS2812 内部集成了处理芯片和3颗不同颜色的led灯(红,绿,蓝),通过单总线协议分别控制三个灯的亮度强弱,达到全彩的效果,每一个灯需要 8 bits(1 byte) 的数据,所以一颗 ws2812 共需要24 bits(3 bytes) 的数据。
  • 支持信号级联


级联数据格式:

每个reset期间发送n个24bit数据,发送第二组24bit数据时,由灯珠D1自动整形向D2发送第一组的24bit数据;发送第三组24bit数据时,第一组的24bit数据由D2整形发向D3,以此类推

最先发送的24bit数据控制级联最远端的灯Dn,最后发送的24bit数据控制灯珠D1

发送的24bit数据结构:

按每种颜色的亮度值组合为共计24bit数据,通过0 码和1 码发送

0 码: 约0.35us的高电平(T0H)+0.8us的低电平

1 码:0.7us的高电平+0.6us的低电平

  • 关于时序,网上可以找到很多版本的时序表格,上图仅供参考,ws2818的时序要求相对宽松,但根据时序图有一个结论是0 码的高电平不能过长,1 码的高电平不能过短

设计思路:

对于spi方式操作ws2812,spi的时钟频率决定了操作的时序,这里对不同spi的时钟频率分别处理

例如在spi频率为6M时,可通过spi发送0xf8(1字节)得到高电平0.83us + 低电平0.5us的时序,符合1 码

当spi频率为9M时,可通过发送0xff00(2字节)将得到高电平0.88us + 低电平0.88us的时序,同样符合1 码

spi通过对接oneos的spi框架实现,DMA可直接在驱动中配置

实战测试:

准备项:

配置说明:

以战舰V3开发板为例,

进入stm32f103zet6-atk-warship_v3-ws2812 文件夹,打开board/CubeMX_Config/CubeMX_Config.ioc 即cubemx工程,配置spi,这里使用板载nrf接口的spi,即spi2,MOSI引脚PB15

打开oneos-cube,进入menuconfig,定位到Components→ ws2812,勾选ws2812

ws2812 example勾选上

Spi BUS Name这里填spi2

ws2812 node length即级联的灯珠数量,根据实际灯带长度决定

Select SPI clock source freq选择与自己spi时钟频率符合的项,这里spi2的时钟源36Mhz,4分频为9Mhz,选择Select 9M 18M 36M 72M…项

保存并退出,使用scons --ide=mdk5生成mdk工程,然后打开project.uvprojx工程,编译下载

使用 ws2812_blink 或 ws2812_breath 命令测试ws2812

ws2812_blink效果:

ws2812_breath效果:

  • tips:ws2812无片选功能,因此不能与其他spi设备同时使用(其他设备正常工作时将发送给ws2812错误的数据),建议独占一条spi总线
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值