STM32 cubeMX 呼吸灯实验

文章代码使用 HAL 库。


呼吸灯

一、1.PWM原理

PWM全称为脉冲宽度调制(Pulse Width Modulation),是一种常用的调制技术。它通过改变信号脉冲的宽度来控制电路或装置的输出功率或电压。

在PWM中,周期性的方波信号被产生,其中脉冲的宽度是可变的,而脉冲的频率是固定的。通常,PWM信号的周期称为周期时间,而脉冲的占空比则是脉冲宽度与周期时间之间的比值。

PWM信号可用于控制电机速度、调节LED的亮度、产生模拟信号等各种应用。通过改变PWM信号的占空比,可以在时间上控制输出信号的强度或控制设备的工作时间比。

周期:PWM周期(Pulse Width Modulation period)指的是PWM信号一个完整的周期的时间长度。在PWM信号中,周期是指一个完整的脉冲周期,包括脉冲的高电平和低电平部分。

计算公式:(定时器预分频系数 + 1) * (重装载值 + 1) / 时钟主频

占空比:

占空比通常用百分比或比例表示,可以取值在 0% 到 100% 之间,或是 0 到 1 之间。占空比为 0% 表示PWM 信号全为低电平,占空比为 100% 表示 PWM 信号全为高电平。一般而言,占空比决定了 PWM信号中高电平的时间长度,从而控制到达被驱动装置的电源的平均电压水平。

对于直流电机或LED等装置,常用 PWM 控制来调节速度或亮度。例如,在 50% 的占空比下,PWM 信号在一个周期内将有一半的时间为高电平,一半的时间为低电平,这将导致电机转速或灯光亮度的降低。ARR(自动重载寄存器)增加占空比将增加高电平时间,减小占空比则减小高电平时间。

例子:在输出电压为10V的电路中,设置PWM占空比为40%,那么起始这个电路输出的实际电压是4V。

通常控制LED时只需要给一个高电平就可以控制那么下面是LED电平状态图使用PWM控制LED调节亮度的电平状态图.

在这里插入图片描述
在这里插入图片描述

二、LED 原理图

可以看到有4个led。 其中 LED2 接到了PB2引脚, LED3 接到了PB1引脚, LED4 接到了PB0引脚,所以我们需要配置对应 led 的 gpio 引脚为输出引脚。

在这里插入图片描述
在这里插入图片描述

三、使用cubemx 配置 led

在这里插入图片描述
在这里插入图片描述

四、PWM 相关函数

启动定时器PWM模式

HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel);

参数:

  • TIM_HandleTypeDef *htim`:指向 TIM_HandleTypeDef 结构体的指针,该结构体包含了定时器的配置和状态信息。

  • uint32_t Channel`:指定要启动 PWM 的通道。对于 STM32 定时器而言,可以有多个通道,每个通道可以独立地生成 PWM 信号。

设置 占空比

__HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__);

参数:

  • HANDLE:是一个宏或变量,用于表示特定定时器的句柄。

  • CHANNEL:这是指定要操作的定时器通道。

  • COMPARE:这是要设置的比较值,用于比较寄存器的内容。

// 也可以使用 CCRx 比较寄存器设置 占空比。
TIM3->CCR3 = 200;

// 也可以通过htim3.Instance->CCRx直接修改CCR的值
htim3.Instance->CCR3 = 200;

五、PWM占空比占空比计算

CCR(捕获/比较寄存器)/ ARR(自动重载寄存器) 100%*

如果 ARR(自动重载值) = 500时,当 CCR(比较寄存器值) = 100 则 占空比是 20%

六、PWM 呼吸灯重要代码

int pwm_value = 0;		// 占空比


// 开启 pwm 输出
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);


for(uint16_t i=1;i<500;i++)    // 通过循环逐渐改变CCR,进而改变占空比。
{
    htim3.Instance->CCR3 = i; 
    HAL_Delay(1);
}

for(uint16_t i=499;i>=1;i--)
{
    htim3.Instance->CCR3 = i;   // 通过htim3.Instance->CCRx直接修改CCR的值
    HAL_Delay(1);
} 

在这里插入图片描述


总结

下篇文章为大家介绍 无源蜂鸣器唱歌。

  • 21
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

糖果罐子♡

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

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

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

打赏作者

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

抵扣说明:

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

余额充值