WS2812B彩灯详细讲解篇(STM32 PWM+DMA控制 STM32 HAL库编程 循环延时控制多种控制方式)
一、效果展示


观看演示效果:https://www.bilibili.com/video/BV1JT4y1P72Q
二、 基础认识
(一) 小理论
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*(1/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/BV1JT4y1P72Q
原文链接:https://www.cnblogs.com/dongxiaodong/p/14358840.html
九、我的微信

WS2812B彩灯详细讲解篇(STM32 PWM+DMA控制 STM32 HAL库编程 循环延时控制多种控制方式)的更多相关文章
- 第九节:详细讲解Java中的泛型,多线程,网络编程
前言 大家好,给大家带来详细讲解Java中的泛型,多线程,网络编程的概述,希望你们喜欢 泛型 泛型格式:ArrayList list= new ArrayList(); ArrayList list= ...
- STM32标准外设库、 HAL库、LL库
工作以来一直使用ST的STM32系列芯片,ST为开发者提供了非常方便的开发库.到目前为止,有标准外设库(STD库).HAL库.LL库 三种.前两者都是常用的库,后面的LL库是ST最近才添加,目前支持的 ...
- 【无线通信篇01 | Zstack协议栈】CC2530 Zigbee Zstack协议栈组网项目及详细讲解篇
演示视频:https://www.bilibili.com/video/BV1Ew411o7Fp 物联网无线通信技术,ZigBee无线传感网络 CC2530最大的特点就是一个拥有无线收发器(RF)的单 ...
- STM32 GPIO输入输出(基于HAL库)
一.基础认识 GPIO全名为General Purpose Input Output,即通用输入输出.有时候简称为"IO口".通用,说明它是常见的.输入输出,就是说既能当输入口使用 ...
- stm32 HAL库编程驱动控制文件<stm32f1xx_hal_conf.h>的使能方法
@2019-01-25 [小记] 工具化.易控制.易配置.效率高: 驱动控制文件<stm32f1xx_hal_conf.h>中驱动模块使能由STM32CubeMX工具配置使能
- STM32使用HAL库,使用延时卡死的问题。
之前一直使用标准库的,现在转到HAL库来后,编写了第一个程序就遇到了问题.发现我使用库里的延时程序HAL_Delay()时,会卡死在里面. 根据程序,进入到这个延时程序后 ,发现HAL_GetTick ...
- STM32之HAL库、标准外设库、LL库(STM32 Embedded Software)-(转载)
STM32 Embedded Software 工作以来一直使用ST的STM32系列芯片,ST为开发者提供了非常方便的开发库.到目前为止,有标准外设库(STD库).HAL库.LL库 三种.前两者都是 ...
- 【有趣的全彩LED | 编程】用STM32 HAL库让WS2812B为你所动
一.效果展示 观看演示效果:https://www.bilibili.com/video/BV1dv411Y7x3 使用STM32 HAL库编程 PWM+DMA控制输出,CubeMX生成初始工程 实现 ...
- 【情人节选帽子】TCS34725颜色传感器和Python图形界面编程(STM32 HAL库)
截图 描述: l STM32 HAL库编程 l 使用模拟IIC通信,方便程序移植 l Python界面编写,蘑菇头的帽子是什么颜色 l STM32 HAL库串口通信 l Python界面使用 ...
随机推荐
- Mapreduce实例--求平均值
求平均数是MapReduce比较常见的算法,求平均数的算法也比较简单,一种思路是Map端读取数据,在数据输入到Reduce之前先经过shuffle,将map函数输出的key值相同的所有的value值形 ...
- JAVA编程能力提升学习图
阿里大神毕玄整理的关于进阶JAVA的学习体系,知道下...
- Turtlebot3入门教程-系统-SBC软件设置(ubuntu20.04)
本文针对如何在树莓派3上安装ubuntu20.04系统和软件进行讲解 树莓派3接上显示屏和鼠标后,开机后继续安装软件包 详细步骤如下: (1)系统安装 (2)ROS安装 (3)TurboBot3依赖的 ...
- 再看C语言-算法
通常一个程序包括算法.数据结构.程序设计方法及语言工具和环境这四个方面.其中算法是核心,算法就是解决"做什么"和"如何做"的问题.算法是程序的灵魂,项目中如果接 ...
- JS中的多层次排序算法
引子 排序在编程中随处可见,从开始学习变成,到项目开发,基本上或多或少会遇到一些排序问题,接下来我要写的是我在实际开发终于到的一个排序问题,一开始卡了我很久,后面随着知识积累,实践变多才解决掉了,不知 ...
- Python requirements.txt 语法
前言 之前一直苦于一个问题,比如一些包在Win上安装不了,比如 uvloop 但是为了提高效率,代码中必须有这个模块 在运行中可以通过 os 模块判断是否使用, 那依赖文件呢? requirement ...
- 美业黑科技 ▏肌肤管家SkinRun V3S智能肌肤测试仪,实现“护肤”私人定制
肌肤如同身体,也需要定时的"健康检查",但仅凭肉眼难以窥见深层的肌肤问题.而现在,肌肤管家SkinRun前沿黑科技护肤测试仪--SkinRun V3S便能帮助用户对症下药.肌肤管家 ...
- 有关Servlet的面试题
CGI(Common Gateway Interface),通用网管接口 通用网管接口,简称CGI,是一种根据请求信息动态产生回应内容的技术.通过CGI,web服务器可以根据请求的不同,启动不同的外部 ...
- 深入理解nodejs中的异步编程
目录 简介 同步异步和阻塞非阻塞 javascript中的回调 回调函数的错误处理 回调地狱 ES6中的Promise 什么是Promise Promise的特点 Promise的优点 Promise ...
- Linux 安装JDK配置环境(rpm安装和压缩版安装)
jdk安装 (rpm安装) jdk下载地址: https://www.oracle.com/cn/java/technologies/javase/javase-jdk8-downloads.html ...