零基础学STM32(七)-呼吸灯实验(非定时器)

本项目讲解所用工程均使用stm32f103C8T6芯片HAL库版本。
原理讲解

本节内容我们讲解呼吸灯实验,对此我们会简单讲解一下PWM原理,利用改变占空比的方式实现LED灯亮灭比快速转换从而实现LED灯呼吸的效果。

什么是PWM

Pulse Width Modulation(脉冲宽度调制),简称PWM,它是一种通过快速开关信号并调节脉冲宽度与周期比例(占空比)的技术,它巧妙地实现了对信号功率的平均控制,广泛应用于电机调速、灯光亮度调节、电源管理等众多领域,以其高效、精确的控制特性。

PWM的频率

PWM(脉冲宽度调制)的频率指的是每秒钟PWM信号从0到最大值再回到0的周期数,通常以 F 表示,赫兹(Hz)为单位。PWM频率决定了开关动作的速率。

PWM的周期

PWM(脉冲宽度调制)的周期指的是PWM信号从0到最大值再回到0所耗费的时间,通常以 T 表示,秒(S)为单位。

周期与频率的换算关系为 F = 1 / T

 PWM的占空比(重点)

PWM(脉冲宽度调制)的占空比是指在一个PWM周期内,信号处于高电平状态的时间与整个周期时间的比例。它是PWM信号的关键参数之一,用于控制输出功率或电压的平均值。

我们根据图讲讲,可以看到周期就是一个完整的脉冲信号,而脉冲信号就是他的高电平时间,也就是t1,而占空比的计算方法就是 占空比 = 脉宽时间 / 周期 * 100% ,至于为什么是用高电平比上周期,而不是用低电平比上周期,因为通常我们更关心的是信号为高电平时设备工作的部分,这直接关系到功率的输出,再加上惯例的原因使其成为了约定俗成的规则。

举个例子来让大家理解怎么计算占空比:假设 t1为0.2秒,t2为0.8秒,那么周期 T= t1 + t2 = 1秒,占空比 = t1 / T * 100% = 20% ,所以它的占空比为20%。

如何通过改变占空比实现呼吸灯效果

在STM32中,我们可以通过软件写代码来改变占空比,也可以通过硬件定时器输出PWM波。这里我们没有讲到定时器,所以就通过软件改变占空比。随着占空比的增加,LED的亮度逐渐增强;反之,占空比减少时,LED的亮度逐渐减弱。这样,LED的亮度就呈现出平滑的渐变效果,也就是呼吸灯效果。

注意一点,我们设置的周期必须为人眼所不能观测到的时间内(通常超过100Hz),人眼就不会察觉到LED的闪烁,LED看起来是稳定发光的。

初始化配置

接下来我们利用Cubemx进行HAL库的初始化配置,建立工程的部分我们这里就直接快速完成,不了解的同学可以看我之前的新建工程部分零基础学STM32(二)-新建工程-CSDN博客

我们首先配置时钟,将时钟设置为外部高速时钟

再配置相应时钟树,将总频设置为32MHz。

我们配置输出一个LED灯,不会的同学可以看看零基础学STM32(四)-LED灯闪烁实验_stm32 103c led 程序-CSDN博客

紧接着输出工程,将必要的内容勾选和填写一下即可。注意!!!文件路径中不要出现中文

 接下来打开工程

 代码书写

书写呼吸灯我们需要用到微妙级延时,简单讲讲因为我们的代码,我们输入一个延时时间,然后再乘上32MHz的时间频率,因为__NOP()需要大约4个时钟周期来完成,所以除以4得到__NOP()的执行次数。__NOP()是一个空操作,它执行一个时钟周期的指令。

void HAL_delay_us(uint32_t us)
{
    uint32_t Delay = us * 32/4;
    do
    {
        __NOP();
    }
    while (Delay --);
}

再在主函数中书写代码

int i = 1 ;
while( i <1300 )
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);
HAL_delay_us(i);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);
HAL_delay_us(1300-i);
i++;
}
while( i > 1 )
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);
HAL_delay_us(i);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);
HAL_delay_us(1300-i);
i--;
}

 解释一下代码,通过递增和递减来循环改变占空比

这样呼吸灯实验就算完成了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彧佑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值