这次送上进阶版的LED灯控制教程。
首先解释一下为什么说是200万色的彩灯。几乎所有人类可以看到的颜色都可以用三种基本的颜色表示出来,那就是三基色 红(Red) 绿(Green) 蓝(Blue)。
本次的彩灯正是基于此原理,本次使用了四脚全彩LED灯。如上图左上角所示,其有四个引脚,其中最长的引脚接GND,其它引脚分别控制不同颜色,这种接法被称为共阴。LED灯管里置入了三个不同颜色的LED,其本质上与下方的图是等价的。就是相当于接了三个LED灯。这里我们只需要调节三种颜色的灯的亮度即可调和出各种各样的颜色,本次设计中每种颜色的灯可以调节0~127的亮度,因此128*128*128 = 2的21次方 = 2*1024*1024 = 两百多万色。
一般调节灯光的亮度有两种方式,一种是调整电压,一种是调整PWM占空比。在这里我们使用PWM的方式,PWM(脉冲宽度调制),说白了就是在指定周期内,引脚为高电平(或低电平)的时间占比。引脚为高电平的时间越长,则LED的亮度越高。当然前提是周期尽量短,频率尽量快,使眼睛来不及捕捉到灯光的闪烁。这里我们使用了三个PWM输出通道,三个通道的周期都是128的时间单位。当PWM高电平为128时间单位时,灯亮度为最高。高电平时间为0个时间单位时,LED灯不发光。
好了废话不多说,开干。
一、单片机部分的工作
1.1硬件连接
这里面注意R、G、B这三个口,分别是三个PWM的输出引脚,在本次我使用了TIM3的CH1~CH3,分别对应PA6、PA7和PB0这三个引脚。
1.2LED控制代码编写
首先是初始化代码
void initColorLED(uint16_t period)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
/* TIM3 clock enable */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
/* GPIOA and GPIOB clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
RCC_APB2Periph_AFIO, ENABLE);<