【有趣的全彩LED | 编程】用STM32 HAL库让WS2812B为你所动
一、效果展示


观看演示效果:https://www.bilibili.com/video/BV1dv411Y7x3
使用STM32 HAL库编程 PWM+DMA控制输出,CubeMX生成初始工程
实现全彩音乐灯
WS2812B全彩流水灯效果展示及理论详细讲解
WS2812B的主要用途是在路边的氛围灯,我们在一些公园里看到五彩斑斓闪烁的灯基本都是WS2812为基础的灯带
另外我们还可以通过纯软件延时的方式来控制数据发送,这可以方便程序移植
二、 基础认识
(一) 小理论
WS2812B是一种智能控制LED光源,将控制电路和RGB芯片集成在一个5050个组件的封装中。内部包括智能数字端口数据锁存和信号整形放大驱动电路。还包括精密的内部振荡器和电压可编程恒流控制部分,有效保证像素点的光色高度一致。
数据传输协议采用单NZR通信模式。像素上电复位后,DIN端口从控制器接收数据,第一个像素采集初始24位数据,然后发送给内部数据锁存器,其他经过内部信号整形放大电路整形后的数据通过DO端口发送给下一个级联像素。每传输一个像素后,信号减少24位。像素采用自整形传输技术,使得像素级联数不受信号传输的限制,只取决于信号传输的速度。
复位时间>280us,中断时不会误复位,支持低频率,价格低廉的MCU。刷新频率更新至2KHz,无闪烁,提高了出色的显示效果。
特性:
l 控制电路和LED共用唯一的电源。
l 控制电路和RGB芯片集成在一个5050个元件的封装中,形成一个完整的可寻址电路
l 像素内置信号整形电路,波形整形到下一个驱动器后,保证波形失真不累积。
l 内置电子复位电路和失电复位电路。
l 每个像素的三原色都可以实现256亮度的显示,完成16777216色的全彩显示,并且扫描频率为2KHz。
l 级联端口通过单线传输信号。
l 任意两点距离不超过5m传输信号无需任何增加电路。
l 刷新率为30fps时,级联个数不小于1024像素。
l 以800Kbps的速度发送数据。
l 灯的颜色高度一致,性价比高不需要外部电子元件,甚至不需要电容。
(二) 样式汇总
1位

灯板矩阵

灯带

灯板

三、硬件简介
灯带参数:WS2812B灯条:30珠每米9w,60珠每米18w,144珠每米43W,电压:(直流)DC5V
也就是每个灯珠全亮的功耗约为0.3W
l 供电:5V
l 每个灯珠全亮的功率:0.3W
l 每个灯珠全亮的电流:0.6mA
每个芯片有四个引脚

级联接线方式
上一个芯片的DO接到下一个芯片的DI


四、编程思路
SW2812是一个RGB芯片,所以它有红、绿、蓝三种颜色,每个颜色有对应8位,因为我们通常一个像素点就是用RGB三色来表示的,比如经常见到的#FFFFFF,其就是表示R(红色)的值为255,G(绿色)的值为255,B(蓝色)的值为255,#FFFFFFF是白色。所以一个SW2812由3个U8,也就是3*8=24位。要确定一个SW28122芯片的颜色就需要发送24位的数据。
级联数据发送
l 第一屏数据缓存
u 第一个24位有第一个模块接收并缓存
u 第二个24位会被第一个模块转发到第二个模块上,并缓存
u 第三个24位会被第一和第二个转发到低三个模块上,并缓存
u 第四个24位……
u 低N个24位……
l 复位信号,也就是将缓存数据真实的体现到显示上
l 第二屏数据缓存
u 第一个24位有第一个模块接收并缓存
u 第二个24位会被第一个模块转发到第二个模块上,并缓存
u 第三个24位会被第一和第二个转发到低三个模块上,并缓存
u 第四个24位……
u 低N个24位……
l 复位信号,也就是将缓存数据真实的体现到显示上
l ……

每个24位数据表示的意义

数据按GRB顺序传输,先传输高位
数据位


五、 程序设计
手册上介绍数据发送速度是:800Kbps
所以每个数据位的时间是:1/800000=0.00000125s=1.25us
这1.25us可以表示高位或低位,24个1.25us就是一个灯的颜色,发完一个灯的颜色后需要发送大于280us的低电平让数据从锁存器表现在灯上。
数位位0:
周期1/3的高电平,1.25*(1/3)us
周期2/3的低电平,1.25*(2/3)us
数位位1:
周期2/3的高电平,1.25*(2/3)us
周期1/3的低电平,1.25*(1/3)us
六、控制方式1(循环数据发送)
一位一位数据循环发送,因为WS2812对时序要求很高,所以单片机要注意延时时间和IO的电平翻转时间。
在单片机没有高级外设的情况下就得用这个了
编程要点:
l 延时时间要支持最小的1.25*(1/3)us
l IO电平翻转尽可能的快,进入去操作寄存器改变IO电平,减少延时时间,在STM32里要把GPIO的时钟设置高些
l 程序关闭中断,程序的其它中断可能会引起发送数据时序错乱
l 其缺点就是占用主程序,各种延时消耗很大的CPU资源
七、 控制方式2(HAL库 PWM+DMA)
PWM:
PWM即脉冲宽度调制,是一种模拟控制方式,通常用于LED的亮度调节。
详细参考:https://www.cnblogs.com/dongxiaodong/p/14351398.html
DMA:
直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无需CPU干涉,数据可以通过DMA快速移动,这样可以大大节省CPU的资源用来做其它操作。
PWM+DMA
也就是PWM输出的占空比可以由DMA方式来动态调节,而不需要单片机CPU参与进来,我们只需要把DMA要移动的数组定义好,然后启动DMA的循环模式和内存偏移,改变数组的数据就可以改变灯带的显示效果。
手册上介绍数据发送速度是:800Kbps
所以PWM的周期为:800KHZ,也就是1.25us
所以刚好一个周期就是一位数据,所以有:
当PWM设置的有效电平为高时:
1码:占空比为66%,也就是2/3周期
0码:占空比为33%,也就是1/3周期
八、PWM+DMA+ADC灯控与声控编程
(一)资源介绍
l 芯片:STM32F103C8T6
l 灯板:24位WS2812
l 灯板的控制IO:PA8
l ADC声音检测IO:PA0
(二) CubeMX设置
(三) 程序设计
观看演示效果:https://www.bilibili.com/video/BV1dv411Y7x3
原文链接:https://www.cnblogs.com/dongxiaodong/p/14358840.html
九、我的微信

使用STM32 HAL库编程 PWM+DMA控制输出,CubeMX生成初始工程
实现全彩音乐灯
WS2812B全彩流水灯效果展示及理论详细讲解
WS2812B的主要用途是在路边的氛围灯,我们在一些公园里看到五彩斑斓闪烁的灯基本都是WS2812为基础的灯带
另外我们还可以通过纯软件延时的方式来控制数据发送,这可以方便程序移植
【有趣的全彩LED | 编程】用STM32 HAL库让WS2812B为你所动的更多相关文章
- 【情人节选帽子】TCS34725颜色传感器和Python图形界面编程(STM32 HAL库)
截图 描述: l STM32 HAL库编程 l 使用模拟IIC通信,方便程序移植 l Python界面编写,蘑菇头的帽子是什么颜色 l STM32 HAL库串口通信 l Python界面使用 ...
- 【春节歌曲回味 | STM32小音乐盒 】PWM+定时器驱动无源蜂鸣器(STM32 HAL库)
l STM32通过PWM与定时器方式控制无源蜂鸣器鸣响 l STM32小音乐盒,歌曲进度条图形显示与百分比显示,歌曲切换 l 编程使用STM32 HAL库 l IIC OLED界面编程,动画实 ...
- 【雕爷学编程】Arduino动手做(64)---RGB全彩LED模块
37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的.鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为 ...
- 「雕爷学编程」Arduino动手做(28)——RGB全彩LED模块
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...
- 玩转X-CTR100 l STM32F4 l WS2812全彩LED灯
更多塔克创新资讯欢迎登陆[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] WS2812B RGB全彩LED灯珠,只需通过一根信号线控制多个 ...
- 全彩LED灯
1.全彩 LED 灯,实质上是一种把红.绿.蓝单色发光体集成到小面积区域中的 LED 灯,控制时对这三种颜色的灯管输出不同的光照强度,即可混合得到不同的颜色,其混色原理与光的三原色混合原理一致.例如, ...
- 【书籍连载】《STM32 HAL 库开发实战指南—基于F7》-第一章
从今天起,每天开始连载一章<STM32 HAL 库开发实战指南—基于F7>.欢迎各位阅读.点评.学习. 第1章 如何使用本书 1.1 本书的参考资料 本书参考资料为:<STM32 ...
- stm32 HAL库笔记(零)
最近在设计四旋翼飞行器,用stm32f407,有三种开发方式可以选择:一.寄存器开发.二:库函数开发.三:HAL库开发,考虑了一下,选择了HAL库,原因如下: 1. 寄存器开发相对较慢,寄存器很多,配 ...
- STM32 HAL库详解 及 手动移植
源: STM32 HAL库详解 及 手动移植
随机推荐
- 基于Python的接口自动化实战-基础篇之pymysql模块操作数据库
引言 在进行功能或者接口测试时常常需要通过连接数据库,操作和查看相关的数据表数据,用于构建测试数据.核对功能.验证数据一致性,接口的数据库操作是否正确等.因此,在进行接口自动化测试时,我们一样绕不开接 ...
- 上传功能-弹窗实现-vue
-引入弹窗页面 import fileUpload from 'src/page/cuApplyManage/fileUpload.vue'; -页面布局 <div> <fileUp ...
- Flink SQL 核心概念剖析与编程案例实战
本次,我们从 0 开始逐步剖析 Flink SQL 的来龙去脉以及核心概念,并附带完整的示例程序,希望对大家有帮助! 本文大纲 一.快速体验 Flink SQL 为了快速搭建环境体验 Flink SQ ...
- [Abp]Abp 新手入门随记
项目结构说明 *.Application 应用服务实现 *.Application.Contracts 包含DTO及应用服务接口 *.DbMigrator 数据迁移项目 开发和生产环境迁移数据库架构和 ...
- 关于 RNN 循环神经网络的反向传播求导
关于 RNN 循环神经网络的反向传播求导 本文是对 RNN 循环神经网络中的每一个神经元进行反向传播求导的数学推导过程,下面还使用 PyTorch 对导数公式进行编程求证. RNN 神经网络架构 一个 ...
- 7.shell脚本编程
1.shell 脚本语言的基本用法 1.1shell 脚本创建 1.格式要求:首行shebang机制 #!/bin/bash #!/usr/bin/python #!/usr/bin/perl 2.添 ...
- ORA-28001: the password has expired解决方法
Oracle提示错误消息ORA-28001: the password has expired,是由于Oracle11G的新特性所致, Oracle11G创建用户时缺省密码过期限制是180天(即6个月 ...
- [Usaco2010 Hol]cowpol 奶牛政坛
题目描述: 农夫约翰的奶牛住在N (2 <= N <= 200,000)片不同的草地上,标号为1到N.恰好有N-1条单位长度的双向道路,用各种各样的方法连接这些草地.而且从每片草地出发都可 ...
- JS实现计算器,带三角函数,根号
极简主义网页计算器. 实现了按键特效,可响应键盘按键,实时显示计算结果. 可切换模式,拓展高级功能,包括根号.三角函数.括号等. 效果如下: 代码如下: html: <!DOCTYPE html ...
- 邮箱发送API .Net
调用QQ邮箱发送邮件接口,完成QQ邮箱发送邮件.步骤如下: 1.开启POP3/SMTP服务 2.点过之后会让你验证一下密保或者发送一条短信 3.验证过后会弹出一个开启POP3/SMTP服务的授权码,这 ...