
RGB耳环 V1.0
简介
前些日子突然刷到一个视频,国外大佬纯手工打造了一个戴在耳朵上的RGB耳环,看起来非常漂亮,我自己就想着也来打造一块,采用了ws2812的灯珠,于是有了这款基于立创EDA设计的RGB耳环的样品。
简介:前些日子突然刷到一个视频,国外大佬纯手工打造了一个戴在耳朵上的RGB耳环,看起来非常漂亮,我自己就想着也来打造一块,采用了ws2812的灯珠,于是有了这款基于立创EDA设计的RGB耳环的样品。开源协议
:GPL 3.0
描述
一、WS2812概述:
WS2812 内部集成了处理芯片和3颗不同颜色的led灯(红,绿,蓝),通过单总线协议分别控制三个灯的亮度强弱,达到全彩的效果。
1、数据传输时间:
2、时序波形图:
3、24 bit数据结构:
每一个灯需要 8 bits(1 byte) 的数据 (8个1时最亮、8个0时不亮),所以一颗 ws2812 共需要24 bits(3 bytes) **(24个1时最亮、24个0时不亮)**的数据。
注:高位先发,按照 GRB 的顺序发送数据
二、WS2812驱动的几种方式
1、使用 延时函数
直接翻转IO口产生时序,这种方式最为简单易用,只需要控制延时的时间,就可以从产生0和1码,它需要占用系统资源。
2、通过SPI控制
使用 SPI 数据传输产生时序,只需要控制在合适的波特率,在传输不同数据的时候,可以产生符合要求的0和1码,这种方式需要等同于使用了一个SPI设备。
3、使用 DMA+Timer 产生时序
这种方式需要使用一个定时器,其中一个通道固定产生一个周期1.25us的PWM,占空比2/3,接着需要另一个通道,在周期的1/3处搬运数据到IO口,若为1,PWM不变,若为0,PWM则为0码,这种方式有更大的局限性,由于DMA只能搬运至少一个字节,所以每次会同时改变8个IO口的高低电平,或许使用位带操作可以解决这问题
4、使用 Timer+PWM+DMA 产生时序
本文讨论的实现方案,这种方案有2种驱动的方式,一种是直接建立一个大的数组,存放所有灯珠的数据,然后启动DMA传输,第二种是建立2个灯组数据大小的数组,当DMA传输一个灯珠数据时,改变另一个灯组数据,通过不断改变数组的方式,节约内存,相比较而言,第一种方式较为直观,第二种方式则可以解决灯珠较多的情况,本文讨论第一种的原理和程序的实现。
三、TIM+PWM+DMA驱动WS2812
定时器 TIM 用以产生一个固定周期的PWM,DMA用以改变PWM 的占空比:
如图,DMA通过不断的搬运数据到定时器调节占空比的CCR寄存器,实现ws2812时序的产生,在STM32中,通过配置外设可实现:定时器每产生一次溢出事件(即计数完成),就请求一次DMA搬运一个数据(长度:字节/半字/字可选),所以用户只需要将数据排列在数组里,就可以产生所需要的时序。
四、原理图介绍
1、主控电路:
采用STM32F103C8T6这款单片机,加入必要的滤波电容,使其防止波形不稳。
2、晶振电路:
采用贴片的8MHz晶振使其节约空间。
3、复位电路:
4、电源电路:
采用AMS117-3.3对宽电压输入非常友好。加入滤波电容使其波形更加平顺,提供一个3.3V的稳压电源,为单片机供电。
5、指示灯电路:
加入指示灯是指示PCB板有没有电源输入,为了更好地看清PCB板是否在工作状态。
6、下载电路:
此接口是为方便调试才引入,调试完成后次针脚可撤除,影响成品美观性。
7、电源接口:
此接口为PCB板提供一个电池电源,为整个PCB板供电。
8、RGB灯电路:
相较于直驱RGB灯,此内置芯片集成的WS2812灯占用针脚少,方便在拥挤的PCB板上布线,可增加其拓展性。
五、PCB介绍
1、顶层:
2、底层:
3、整体:
6、3D仿真图
设计图

BOM


评论