STM32F103VET6实现呼吸灯

本文详细介绍了如何使用STM32F103VET6开发板实现呼吸灯,涉及呼吸灯概念、硬件知识及实现步骤。通过计算法得到呼吸曲线PWM波,利用STM32定时器的PWM功能,控制LED灯亮度,实现红、绿、蓝三种颜色的单色呼吸灯效果。文章深入解析了定时器配置、中断服务函数、PWM表的生成与应用,以及如何调整周期以达到理想的呼吸效果。
摘要由CSDN通过智能技术生成

STM32F103VET6开发板实现呼吸灯


前言

在本章中,演示如何使用计算法得到的呼吸曲线 PWM 波和 SPWM 波,并使用 STM32定时器 TIM的 PWM功能输出波形控制 LED 灯,实现三色LED的呼吸效果。


一、相关知识介绍

1.呼吸灯简介

呼吸灯,就是指灯光设备的亮度随着时间由暗到亮逐渐增强,再由亮到暗逐渐衰减,
很有节奏感地一起一伏,就像是在呼吸一样,因而被广泛应用于手机、电脑等电子设备的指示灯中

要控制 LED 灯达到呼吸灯的效果,实际上就是要控制 LED 灯的亮度拟合呼吸特性曲线。前面控制全彩 LED 灯时,通过控制脉冲的占空比来调整各个通道 LED 灯的亮度,从而达到混色的效果。若控制脉冲的占空比在 3 秒的时间周期内按呼吸特性曲线变化,那么就可以实现呼吸灯的效果了。
这种使用脉冲占空比拟合不同波形的方式称为 PWM(脉冲宽度调制)控制技术—— 通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形(含形状和幅值)。

PWM 控制的基本原理为:冲量相等而开头不同的窄脉冲加在具有惯性的环节上时,其效果基本相同。其中冲量指窄脉冲的面积;效果相同指环节输出响应波形基本相同。
SPWM 波形——脉冲宽度按正弦规律变化而和正弦波等效的PWM 波形。SPWM 是一种非常典型的 PWM 波形,它在数字电路控制中应用非常广泛,如果使用低通滤波器,可以由 SPWM 波得到其等效的连续正弦半波。

若把拟合的波形改成呼吸特性曲线,即可得到控制呼吸灯使用的 PWM 波形,要生成拟合的 PWM 波形,通常使用计算法和调制法:
(1) 计算法:根据拟合波形的频率、幅值和半周期脉冲数,准确计算 PWM 波各脉冲宽度和间隔,据此控制开关器件的通断,就可得到所需 PWM 波形;
(2) 调制法:拟合波形作调制信号,进行调制得到期望的 PWM 波;该方法一般采用等腰三角波为载波,其任一点水平宽度和高度成线性关系且左右对称。载波(等腰三角波)与平缓变化的调制信号波(即要拟合的波形)相交,在载波与信号波的交点控制器件通断,就得宽度正比于信号波幅值的脉冲,符合 PWM 的要求 。相对于计算法,其处理过程计算简单。

2. 硬件简介

  • TIM—单色呼吸灯 使用呼吸曲线 PWM 波控制 LED 灯,可实现红、绿、蓝三种
    颜色的单色呼吸灯。
    RGB 灯,里面由红蓝绿三个小灯构成, 使用 PWM控制时可以混合成 256 不同的颜色
    在这里插入图片描述
    本开发板中设计的 RGB 灯控制引脚是经过仔细选择的,因为使用STM32 的定时器控制输出 PWM脉冲,然而并不是任意 GPIO都具有 STM32 定时器的输出通道功能,所以 在设计硬件时,需要根据《STM32 中文数据手册》中的说明,选择具有定时器输出通道功能的引脚来控制 RGB 灯,如图
    图 《 STM32 中文数据手册》中本设计中使用的 LED 引脚说明

本实训中的 RGB 灯使用阴极分别连接到了 PB5、PB0 及 PB1,它们分别是定时器
TIM3 的通道 2、3、4,其中 PB5用于定时器输出通道时,需要使用重定义功能。

二、实现呼吸灯

1.单色呼吸灯

要点

  • 初始化 PWM 输出通道,初始化 PWM 工作模式;
  • 计算获取 PWM数据表;
  • 编写中断服务函数,在中断服务函数根据 PWM 数据表切换比较寄存器的值;

LED灯硬件相关宏定义

breathing.h


#define RED_LIGHT
#define GREEN_LIGHT 
#define BLUE_LIGHT

/*要使用什么颜色的呼吸灯,可选RED_LIGHT、GREEN_LIGHT、BLOE_LIGHT*/
#define LIGHT_COLOR_RED_LIGHT
/********定时器通道*******/
#if LIGHT_COLOR == RED_LIGHT
/************红灯***********/
#define  BRE_TIMx      TIM3

#define  BRE_TIM_APBxClock_FUN    	RCC_APB1PeriphClockCmd
#define  BRE_TIM_CLK					RCC_APB1Periph_TIM3
#define  BRE_TIM_GPIO_APBxClock_FUN      RCC_APB2PeriphClockCmd
#define  BRE_TIM_GPIO_CLK     (RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO)
//红灯的引脚需要重映射
#define BRE_GPIO_REMAP_FUN()  GPIO_PinRemapConfig(GPI0_PartialRemap_TIM3,ENABLE);

#define BRE_TIM_LED_PORT   GPIOB
#define BRE_TIM_LED_PIN   GPIO_Pin_5

#define BRE_TIM_OCxInit    TIM_0C2Init      //通道选择,1~4
#define BRE_TIM_OCxPreloadconfig      TIM_OC2Preloadconfig
#define BRE_CCRx    CCR2
#define BRE_TIMx_IRQn  TIM3_IRQn   //中断
#define BRE_TIMx_IROHandler   TIM3_IRQHandler

  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值