定时器PWM控制RGB彩灯案例

1.脉冲宽度调制PWM

PWM(Pulse Width Modulation)简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在测量、通信、工控等方面。

PWM的一个优点是从处理器到​​ ​被控系统​​​信号都是数字形式的,再进行数模转换。可将噪声影响降到最低(可以跟电脑一样)。噪声只有在强到足以将逻辑1改变为逻辑0或将逻辑0改变为逻辑1时,也才能对数字信号产生影响。

2.STM32定时器

通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。它适用于多种场合,包括测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)。

使用定时器预分频器和RCC时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。

定时器脉冲宽度调制模式可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空比的信号。在TIMx_CCMRx寄存器中的OCxM位写入'110'(PWM模式1)或'111'(PWM模式2),能够独立地设置每个OCx输出通道产生一路PWM。必须设置TIMx_CCMRx寄存器OCxPE位以使能相应的预装载寄存器,最后还要设置TIMx_CR1 寄存器的ARPE位, (在向上计数或中心对称模式中)使能自动重装载的预装载寄存器。

本次RGB彩灯即可通过定时器PWM控制,实现全彩颜色显示。

3.RGB彩灯


本次使用的RGB彩灯设备是国巨的RS-3535,亮度可达8000nit。使用RGB三个引脚,通过三原色的设置从而实现全彩颜色显示。

硬件接口如下:

接口 引脚
LED_R PB4(TIM3_CH1)
LED_G PB5(TIM3_CH2)
LED_B PB8(TIM4_CH3)

4.软件配置

4.1 定时器PWM通道配置

根据硬件接口,接下来需要完成对定时器3的CH1和CH2配置,定时器4的CH3的配置。将通道配置为PWM输出模式。根据实际亮度测试,仅需将亮度周期时间设置为255即可,软件代码配置如下:

定时器4的CH3配置:

4.2 定时器2配置

为了实现呼吸灯效果,这里通过定时器2实现,设置周期时间为50ms,CNT+1时间为0.1ms。

5.代码生成

5.1 PW配置生成代码

定时器3的CH1和CH2代码生成:

定时器4的CH3代码生成:

5.2 增加PWM启动代码

在软件生成代码过程中,PWM通道需要手动启动,添加代码如下:

5.3 RGB彩灯控制函数

编写函数,实现RGB彩灯控制,后续仅需调用该函数即可实现全彩颜色显示。

c 复制代码
/************rgb***************
函数功能:检测按键值
形  参:r,g,b --红绿蓝灯,取值范围为0~255
公  司:北京万邦易嵌
作  者:IT_阿水
*******************************/
void RGB_Ctl(uint8_t r,uint8_t g,uint8_t b)
{
  htim3.Instance->CCR1=(r/25);
  htim3.Instance->CCR2=(g/20);
  htim4.Instance->CCR3=(b/10);
}

6. RGB彩色呼吸灯实现

通过定时器2,设置计数周期为50ms,计数器+1的时间为0.1ms。即没50ms改变一次RGB彩灯颜色。功能实现如下:

在定时器2中断服务函数中,没进一次中断,即改变一次RGB颜色值,RGB颜色变化效果为:红---绿---蓝三种颜色逐渐转换。

c 复制代码
uint8_t rgb[53*3][3] = {{0,0,0},{10,0,0},{20,0,0},{30,0,0},{40,0,0},{50,0,0},{60,0,0},{70,0,0},{80,0,0},{90,0,0},
											 {100,0,0},{110,0,0},{120,0,0},{130,0,0},{140,0,0},{150,0,0},{160,0,0},{170,0,0},{180,0,0},{190,0,0},
											 {200,0,0},{210,0,0},{220,0,0},{230,0,0},{240,0,0},{250,0,0},{255,0,0},{250,0,0},{240,0,0},{230,0,0},
											 {220,0,0},{210,0,0},{200,0,0},{190,0,0},{180,0,0},{170,0,0},{160,0,0},{150,0,0},{140,0,0},{130,0,0},
											 {120,0,0},{110,0,0},{100,0,0},{90,0,0},{80,0,0},{70,0,0},{60,0,0},{50,0,0},{40,0,0},{30,0,0},
											 {20,0,0},{10,0,0},{0,0,0},
                       {0,0,0},{0,10,0},{0,20,0},{0,30,0},{0,40,0},{0,50,0},{0,60,0},{0,70,0},{0,80,0},{0,90,0},
											 {0,100,0},{0,110,0},{0,120,0},{0,130,0},{0,140,0},{0,150,0},{0,160,0},{0,170,0},{0,180,0},{0,190,0},
											 {0,200,0},{0,210,0},{0,220,0},{0,230,0},{0,240,0},{0,250,0},{0,255,0},{0,250,0},{0,240,0},{0,230,0},
											 {0,220,0},{0,210,0},{0,200,0},{0,190,0},{0,180,0},{0,170,0},{0,160,0},{0,150,0},{0,140,0},{0,130,0},
											 {0,120,0},{0,110,0},{0,100,0},{0,90,0},{0,80,0},{0,70,0},{0,60,0},{0,50,0},{0,40,0},{0,30,0},
											 {0,20,0},{0,10,0},{0,0,0},
                       {0,0,0},{0,0,10},{0,0,20},{0,0,30},{0,0,40},{0,0,50},{0,0,60},{0,0,70},{0,0,80},{0,0,90},
											 {0,0,100},{0,0,110},{0,0,120},{0,0,130},{0,0,140},{0,0,150},{0,0,160},{0,0,170},{0,0,180},{0,0,190},
											 {0,0,200},{0,0,210},{0,0,220},{0,0,230},{0,0,240},{0,0,250},{0,0,255},{0,0,250},{0,0,240},{0,0,230},
											 {0,0,220},{0,0,210},{0,0,200},{0,0,190},{0,0,180},{0,0,170},{0,0,160},{0,0,150},{0,0,140},{0,0,130},
											 {0,0,120},{0,0,110},{0,0,100},{0,0,90},{0,0,80},{0,0,70},{0,0,60},{0,0,50},{0,0,40},{0,0,30},
											 {0,0,20},{0,0,10},{0,0,0}};
void TIM2_IRQHandler(void)
{
  /* USER CODE BEGIN TIM2_IRQn 0 */
   static uint16_t i=0;
  /* USER CODE END TIM2_IRQn 0 */
  HAL_TIM_IRQHandler(&htim2);
  /* USER CODE BEGIN TIM2_IRQn 1 */
  i++;
  if(i>=159)i=0;
  RGB_Ctl(rgb[i][0],rgb[i][1],rgb[i][2]);
  /* USER CODE END TIM2_IRQn 1 */
}


相关推荐
枯无穷肉8 小时前
stm32制作CAN适配器4--WinUsb的使用
stm32·单片机·嵌入式硬件
不过四级不改名6779 小时前
基于HAL库的stm32的can收发实验
stm32·单片机·嵌入式硬件
嵌入式科普9 小时前
十一、从0开始卷出一个新项目之瑞萨RA6M5串口DTC接收不定长
c语言·stm32·cubeide·e2studio·ra6m5·dma接收不定长
云山工作室9 小时前
基于单片机的视力保护及身姿矫正器设计(论文+源码)
stm32·单片机·嵌入式硬件·毕业设计·毕设
艺术家天选12 小时前
STM32点亮LED灯
stm32·单片机·嵌入式硬件
向阳逐梦12 小时前
基于STM32F4单片机实现ROS机器人主板
stm32·单片机·机器人
小猪写代码13 小时前
STM32 水质水位检测项目 (调试模块)和(延时模块)
stm32·单片机·嵌入式硬件
御风_2113 小时前
STM32单片机使用CAN协议进行通信
stm32·单片机·嵌入式硬件
逝灮14 小时前
【蓝桥杯——物联网设计与开发】拓展模块3 - 温度传感器模块
驱动开发·stm32·单片机·嵌入式硬件·物联网·蓝桥杯·温度传感器
Wallace Zhang16 小时前
STM32F407 | Embedded IDE01 - vscode搭建Embedded IDE开发环境(支持JLINK、STLINK、DAPLINK)
ide·vscode·stm32