首页 > 其他分享 >利用PWM实现呼吸灯

利用PWM实现呼吸灯

时间:2024-12-11 19:03:58浏览次数:6  
标签:duty LED TIM 呼吸 利用 占空比 PWM

利用PWM实现呼吸灯

一、PWM理论知识

1、PWM概念

脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是一种利用脉冲宽度对模拟信号进行控制的技术,也就是对模拟信号电平进行数字表示的方法

2、占空比的概念

pwm的频率是指1秒钟内信号从高电平到低电平再回到高电平的次数(一个周期);占空比是一个脉冲周期内,高电平的时间(脉宽时间)与整个周期时间的比例。

3、PWM输出呼吸灯

PWM输出呼吸灯实质上就是通过对占空比的调节实现的。
频率很高时,看不到闪烁,占空比越大,LED越亮;
频率很低时,可看到闪烁,占空比越大,LED越亮。

二、工程创建

1、设计要求

使用TIM3和TIM4,分别输出一个PWM波形,PWM的占空比随时间变化,去驱动外接的一个LED以及最小开发板上已焊接的LED(固定接在 PC13 GPIO端口),实现2个 LED呼吸灯的效果。

2、使用STM32CubeMX配置

创建一个新项目在这里插入图片描述
选择STM32F103C8T6芯片

在这里插入图片描述
配置RCC
在这里插入图片描述

配置SYS
在这里插入图片描述
配置定时器
设置TIM3预分频系数为72-1,自动重装值ARR为500-1,则PWM的输出频率为72000000/72/500=2000Hz。
在这里插入图片描述
设置TIM4预分频系数为72-1,自动重装值ARR为1000-1,则PWM的输出频率为72000000/72/800=1250Hz。
在这里插入图片描述

配置时钟在这里插入图片描述

项目管理
在这里插入图片描述
在这里插入图片描述
生成项目在这里插入图片描述

三、代码编写

设置占空比

/* USER CODE BEGIN Includes */
uint16_t duty_num3 = 10;
uint16_t duty_num4 = 10;
/* USER CODE END Includes */

开启PWM通道

/* USER CODE BEGIN 2 */
	HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);
	HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_1); 
/* USER CODE END 2 */

循环代码

 while (1)
  {
		 HAL_Delay(50);
		duty_num3 = duty_num3 + 10;
			duty_num4 = duty_num4 + 10;
		if(duty_num3 > 600)
		{
			duty_num3 = 0;
		}
		__HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_1,duty_num3);
			if(duty_num4 > 600)
		{
			duty_num4 = 0;
		}
		__HAL_TIM_SetCompare(&htim4,TIM_CHANNEL_1,duty_num4);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

四、结果演示

TIM3的通道1对应的引脚为PA6,TIM4的通道1对应的引脚为PB6。因此可以将LED灯的正极接到3.3v电源上,负极接到PB6上,即可观察到LED实现了呼吸灯的效果。由于设计要求中还要驱动最小开发板上已焊接的LED(固定接在 PC13 GPIO端口),所以将PA6与PC13连接起来。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

<iframe allowfullscreen="true" data-mediaembed="csdn" frameborder="0" id="C4bFcV6H-1733911506851" src="https://live.csdn.net/v/embed/438350"></iframe>

呼吸灯

五、总结

通过本次实验,我深入理解了 TIM3 和 TIM4 定时器的配置流程,包括设置时钟源、预分频系数、自动重装载值等参数以得到合适的 PWM 频率,以及通过改变比较值来调整占空比实现呼吸灯的亮度渐变。掌握了在代码中如何灵活地控制两个定时器的启动、停止与参数更新,使两个 LED 能呈现出呼吸灯效果。
参考链接:
PWM原理 PWM频率与占空比详解
STM32输出PWM完成呼吸灯

标签:duty,LED,TIM,呼吸,利用,占空比,PWM
From: https://blog.csdn.net/2202_75807729/article/details/144403567

相关文章

  • 利用husky.js git hooks实现图片自动压缩功能
    场景在一般的网页开发过程中,往往我们都要下载较多的切图,而这些切图未必都做了压缩,即使做了压缩,效果未必能达到理想效果。要解决这种图片压缩问题,途径有很多1.手动将图片丢到xx站点,压缩好之后再放进项目2.让UI给已经压缩好的图这些方式都得靠人工操作,人工操作往往存在一些不......
  • Redis未授权利用复现
    Kali:192.168.162.129Ubuntu:192.168.162.1281、靶机安装redis服务器(redis-server)1.1下载redis-4.0.10wgethttp://download.redis.io/releases/redis-4.0.10.tar.gz解压,进入源码目录,然后编译(make、makeinstall)我这里是进入目录之后输入make然后后面根据提示用aptinstallre......
  • 如何利用甘特图进行项目时间管理?5个技巧轻松上手
    甘特图是一种常用的项目管理工具,能够帮助你可视化项目的时间线、任务进度和资源分配,进而有效地进行时间管理。通过合理的使用甘特图,你可以更清晰地掌握项目的进展,识别潜在的瓶颈,并确保项目按时完成。下面是5个技巧,帮助你轻松上手利用甘特图进行项目时间管理:1.定义项目的关键任......
  • 利用Python爬虫抓取消费者投诉数据:投诉内容与解决方案的抓取与分析
    一、引言随着电商和互联网平台的普及,消费者投诉平台逐渐成为消费者反馈产品和服务质量问题的重要渠道。消费者投诉数据不仅对企业改进产品和服务至关重要,同时也为消费者提供了更多的选择信息。通过抓取和分析这些投诉数据,我们可以了解消费者对产品或服务的具体问题、企业解决......
  • 利用Eden AI在Python中自动化多功能AI任务
    #利用EdenAI在Python中自动化多功能AI任务##引言在现代AI应用中,集成多种AI能力至关重要。EdenAI通过将顶尖AI服务提供商集成到单一平台上,极大地简化了AI功能的部署。本篇文章将介绍如何使用EdenAI工具组合来创建一个具备多种功能的Agent,从而开启无限AI可能性。##......
  • 如何利用4G数采网关实现城市内涝监测预警
    随着气象环境不断趋于极化,气象变化带来的灾害也日益加深。每当城市遭遇暴雨,都将对区域交通造成显著影响。伴随暴雨而来的就包括城市内涝积水,不仅给居民日常生活出行、企业生产经营带来很多不便,甚至引发公共安全事故。 针对提高城市应对洪涝灾害能力,佰马提供基于工业4G数采网关......
  • 程序员如何利用AI大模型逆袭
    随着人工智能(AI)技术的迅猛发展,尤其是大规模预训练模型(如GPT-4、BERT等)的出现,程序员迎来了一个前所未有的机会窗口。AI不仅能提高开发效率,还能为程序员提供创新创业的机会。本文将探讨程序员如何利用AI大模型实现逆袭。前排提示,文末有大模型AGI-CSDN独家资料包哦!一、提升编......
  • Android笔记【20】利用Log来debug
    一、背景    在利用青云课API写聊天软件时,由于自己ui界面的column高度设计不当,导致没有看见下面的TextField,便没有输入信息,于是lazycolumn里面的messages.size为0,故不会显示内容。本人还以为无法运行到column内部,且在用text测试时由于两次text内容一致,在Box里面重叠,更......
  • Vue.js中高效利用第三方工具类与插件的实践
    在Vue.js项目中,引入并使用第三方工具类和插件可以显著提升开发效率和代码质量。以下是10种好用且高端的Vue.js第三方插件及其简要介绍和使用示例:1.VueRouter简介:VueRouter是Vue.js官方的路由管理器,用于构建单页面应用(SPA)。它提供了动态路由匹配、嵌套路由、路由守卫等功能......
  • 利用time函数生成随机数
    一、函数1.包括库函数和自定义函数2.官方的C标准库头文件如下https://zh.cppreference.com/w/c/header1.头文件string.h(1)system库函数           system是一个库函数,用来执行系统命令的            system的详细内容可见上一篇博客:system......