初学HAL库|利用PWM实现LED呼吸灯

目录

前言

一、PWM是什么?

二、呼吸灯实现的原理

1. LED灯的快速响应

2. 人眼的视觉暂留效应

三、参数设置

1. 实现的要求

2. 设计思路

3. CubeMx配置

3.1 选择芯片型号

3.2 System Core配置

3.3 Timer配置

3.4 时钟树设置(Clock Configuration)

3.5 Project Manager设置

4. 代码编写

4.1 打开main文件

4.2 将程序设置为自启动模式

4.3 代码部分

总结

参考文献


前言

文章为记录个人学习HAL库的成果,使用的芯片型号为:STM32F103C8T6,使用辅助软件:CubeMx,学习的视频来源于B站up主成电应电科协,主讲老师为漆强,视频的BV号为:BV1y7411m7gg

一、PWM是什么?

PWM是Pulse Width Modulation的缩写,中文意思是脉冲宽度调制,简称脉宽调制。PWM就是一个调节脉宽的东西,调节脉宽就可以控制电压。脉宽所控制电压的原理是:一个周期内高电平所占该周期的比值,就比如如果输入电压为5V,高电平在一个周期内所持续的时间为20%,这时候输出电压就等效为:5V*20%=1V,这个例子中20%的由来为:(一个周期内)高电平持续时间/一个周期的时间,这个式子对最终输出电压有明显的影响,其有特殊的意义,因此这个式子(高电平持续时间/一个周期的时间)就被命名为占空比。\frac{}{}调节脉冲宽度,也就是调节占空比,可以达到的效果是改变输出的电压。

二、呼吸灯实现的原理

PWM实现LED呼吸灯亮度调节的原理是基于LED灯对电流的瞬时响应以及人眼的视觉暂留效应。

1. LED灯的快速响应

LED灯作为半导体器件,对电流的变化响应非常快。当PWM信号为高电平时(二极管导通,有电流流过),LED灯获得足够的电流以发光;当PWM信号为低电平时(二极管截至,无电流流过),LED灯几乎没有电流通过,因此不发光。由于LED的响应时间非常短,它几乎可以立即响应电流的变化。

2. 人眼的视觉暂留效应

人眼在观察快速变化的图像时,具有一种称为“视觉暂留”的生理现象。即当光信号快速闪烁时,人眼并不会立即感知到这种闪烁,而是会将多个短暂的光信号在视觉上进行平均或融合,从而感知到一个平均的亮度水平。

结合以上两点,当PWM信号的占空比(即高电平时间与整个周期时间的比例)发生变化时,虽然LED灯实际上是在不断地开关(即发光和不发光之间快速切换),但由于人眼的视觉暂留效应,我们感知到的是一个平均的亮度。占空比越高,LED灯在一个周期内发光的时间越长,因此平均亮度越高;占空比越低,平均亮度越低。

注:电流的大小控制LED灯的亮度。对非线性元件二极管(LED为发光二极管)来说,调节占空比,即控制高电平和低电平的持续时间可以控制二极管的导通和截至的时间,导通时有电流流过,截至时无电流流过。PWM调节输出电压的例子类似,调节占空比也可以使得电流流过的大小变化:假设输出电流为5A,占空比为20%,此时等效输出电流为:5A*20%=1A。因此调节占空比越大,LED灯越亮。

三、参数设置

1. 实现的要求

在STM32F103C8T6单片机的A0引脚上实现LED的双向呼吸灯(灯的亮度变化:暗 -> 亮 -> 暗),设置PWM周期为20ms,占空比从0%开始,步进为20%。递增到100%后,再逐级减为0%,并重复整个过程。

2. 设计思路

占空比从0%开始,因此写入捕获/比较寄存器CCR的初值为0,然后再while循环中调用宏函数__HAL_TIM_SET_COMPARE修改CCR的内容,从0开始,逐渐增加到200(根据公式Duty=(CCR)/(ARR+1)可以得出CCR为200),步进值为40。

3. CubeMx配置

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值