你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【Stm32C0测评】学习PWM比较实现呼吸灯

[复制链接]
知识不仅闹 发布时间:2024-4-26 11:55

STM32呼吸灯

PWM(Pulse Width Modulation)是一种常用的调制技术,用于在数字电路中生成模拟信号。它通过改变脉冲的宽度和周期来模拟连续的模拟信号。

PWM信号由一系列的脉冲组成,每个脉冲的宽度表示信号的幅度或占空比。占空比是指脉冲高电平时间与一个周期的比例。通过改变脉冲的宽度和周期,可以改变PWM信号的平均电平,从而模拟出不同的电压或电流值。

呼吸灯原理讲解

**我们可以知道,假如我们的小灯是低电平触发的时候,我们的电平保持着低电平的状态,我们的小灯就会一直亮着。反之我们的小灯一直是低电平的时候,则我们的小灯就一直处于熄灭的状态。 **** 那如何实现小灯从亮到灭实现呼吸的效果呢? **** 下面画一个效果图 image-20240329222605908.png

我们可以看到,在一段时间内,我们在灭灯状态中,不断的加大我们的亮灯时间,在这一个时间段,我们看见的灯不是变亮了吗!简单来说,我们需要在一个时间段,不断加大我们的亮灯时间,控制我们的亮灯时间,亮灯时间不断加大,我们就可以发现灯在不断从暗变亮的效果。

原理大致解释完了,接下来我们就要实践操作!

配置设置

首先我们先打开我们上次配置LED小灯,后缀的ioc的图形化配置。** 好首先我们根据我们上次配置小灯的IO口,来找到PA5引脚。 通过刚才的分析,我们需要在一段时间内配置我们的小灯的亮灭时间,那么这一段时间要如何来呢? 这里就需要我们的定时器! image-20240329223123869.png

我们点击PA5,发现PA5有这么多状态可以配置,这里我们需要PA5定时器的通道1。我们点击进行配置。

image-20240329223242558.png

可以发现PA5变黄了,说明我们还需要配置定时器。这里我们点击Enter User Lable,自定义用户命名我们修改为LED1。

image-20240329223606883.png

我们可以知道刚才的选择,我们的小灯是定时器通道1,这里的CH1代表的是通道。image-20240329223647692

image-20240329230559124.png

我们往下看,需要配置的三个参数,下面是关于PWM的计数模式,这里我们选择默认,以后需要的话,我们单独讲解。** **这里的PSC是配置我们的定时器预分频器,这里我们的频率为48M,我们设置为48-1,这里会让我们的频率降为1MHZ,这里讲一下为什么要减少1,为什么不能48M/48=1M呢?因为我们的定时器会有一个重装载的时间,就是说原本定时器要计算0-1000,但是1000要转换为0,也需要一段时间,这里我们的减1,是留给重装载的。不理解也没关系,简单记得就需要减少1.

这里的Count Period为计数周期。(ARR)** **这里我们用周期来理解我们的计算数,这里我们需要1kHZ的周期,所以我们需要将我们的1MHZ降为1KHZ,1M换算过来刚好是一百万,所以说这里我们需要除以1000,这里我们又因为重装载也需要一个周期,所以我们这里还需要减1。

*这里其实是有计算公式的:最终周期 = (PSC + 1) (ARR + 1) / 定时器输入时钟频率**

Auto-reload preload 用于在定时器计数器溢出后自动重新加载预设的初始值。这里就是溢出的时候加到1001,之后要将我们的值重新赋值为0,硬件复位的效果。

最后点击右上角的CEBERARTE CODE

好软件的配置完成,接下来我们开启程序的编写。

程序编写

这里我们需要开启我们的定时器PWM开始计数image-20240329231711182.png

这里需要填写俩个参数,第一个参数是定时器,第二个参数是定时器通道。** 这里通过指针来获取的定时器的基地址,&htimx,这里的x是根据我们的定时器几来决定的,所以这里我们填写了&htim1. **第二个参数是定时器通道,根据我们上面的讲解,这里我们只需要填写TIM_CHANNEL_1,定时器通道1,完成我们的设置。

image-20240329231756899.png

根据我们的操作,我们可以知道,我们需要调节我们的其中的时间来实现我们的亮灭程度,所以我们需要一个宏定义函数来调节我们的高低电平的时间,

这里我定义了一个延时时间参数uint16_t time** **首先先介绍一下函数的使用

HAL_TIM_SET_COMPARE(**HANDLE**, **CHANNEL**, **COMPARE__);**

image-20240329232536382.png

第一个参数为:定时器,第二个参数为:定时器通道1,第三个参数是PWM的高电平时间。** **这里我们就可以知道,在一个周期里,我们不断修改定时器时间,其中小灯的亮灭效果是有变化的。

image-20240329233123106.png

因为一个周期是1000ms,所以我们不断修改其中高电平的时间,就能改变一个周期的时间,就能观察到小灯从亮开始慢慢变暗的过程,这里还需要一定的延时,因为没有延时的话,运行速度太快,我们观察不到小灯亮灭的效果。第二个for循环就是实现小灯从暗道亮的过程。

**这里我们就实现了小灯呼吸灯的效果,下次我们通过串口命令来控制小灯。

image-20240329223647692.png
image-20240329222605908.png
image-20240329223839689.png
image-20240329231711182.png
image-20240329231756899.png
收藏 评论0 发布时间:2024-4-26 11:55

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版