IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32呼吸灯(基于PWM脉冲宽度调制) -> 正文阅读

[嵌入式]STM32呼吸灯(基于PWM脉冲宽度调制)

目录

?

?

一、PWM脉冲宽度调制

1、什么是PWM

?2、如何产生PWM信号

二、CubuMX配置定时器输出PWM

1、芯片选型(stm32f103c8t6)

2、时钟配置

3、配置定时器输出PWM

?4、导出工程

三、程序工程代码分析

1、TIM1_channel1初始化

2、中断回调函数实现呼吸灯

四、实验效果展示

五、总结

六、参考链接


?

一、PWM脉冲宽度调制

1、什么是PWM

????????PWM(Pulse Width Modulation)即脉冲宽度调制,简称脉宽调制。它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术;它是一种模拟控制方式,根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变。

?

????????PWM就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。也可以这样理解,PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。只要带宽足够,任何模拟值都可以使用 PWM 进行编码。

PWM脉冲宽度调制示意图

? ??9c1f631663414ef585fe8956553b8dd1.png

?

?2、如何产生PWM信号

(1)可以直接通过芯片内部模块输出PWM信号,前提是这个I/O口要有集成模块,只需要简单几步操作即可,这种自带有PWM输出的功能模块在程序设计更简便,同时数据更精确。

(2)但是如果IC内部没有PWM功能模块,或者要求不是很高的话可以利用I/O口设置一些参数来输出PWM信号,因为PWM 信号其实就是一高一低的一系列电平组合在一起。具体方法是给I/O加一个定时器,对于你要求输出的PWM信号频率与你的定时器一致,用定时器中断来计数,但是这种方法一般不采用,除非对于精度、频率等要求不是很高可以这样实现。
?

二、CubuMX配置定时器输出PWM

1、芯片选型(stm32f103c8t6)

500323da1a214062887880674bc8fe4b.png

?

2、时钟配置

选择晶体/陶瓷晶振作为外部高速时钟(HSE)输入

35e0f3ddb37948118bc94a16bcbcdccf.png

系统时钟数配置

38c2bcdf031b477bb46d49214426d6aa.png

3、配置定时器输出PWM

配置PA8作为PWM输出IO口

a0cb8f1a783b4ccaa83eadf855ff2ab2.png

?4、导出工程

15d45cf98e424041a7c704e2222e4af6.png

三、程序工程代码分析

1、TIM1_channel1初始化

?MX_TIM1_Init();? ? ? ? ? ? ? ? ? ? ? ? //定时器1初始化函数

6e3f88e1ac5a486b9bef065fd8b6ed74.png

?

HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);?? ??? ??? ??? ?//开启tim1通道1计时器

只有开启了该定时器中断定时器才开始工作计数计时

2、中断回调函数实现呼吸灯

?__HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_1,i);? ? ? ? ? ? //PWM输出占空比设置函数

  MX_GPIO_Init();
  MX_TIM1_Init();
  /* USER CODE BEGIN 2 */
  HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);				//开启tim1通道1计时器
   
  /* USER CODE END 2 */
	int i=0,flag=0;
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
	
	 if(flag==0)			//0状态占空比按+10的步长逐渐增大
	 {
		 i+=10;
		 if(i>400)
			flag=1;
	 }
	 else				   //1状态占空比按-10的步长逐渐减小
	 {
		i-=10;
		if(i<5)
			flag=0;
	 }
	 /*PAB2总线时钟为72Mhz,经过72分频后为1Mhz,计数周期RCC为65535
	  __HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_1,i);	    //设置该PWM输出占空比为变量i
	 
    /* USER CODE BEGIN 3 */
  }

?工程代码文件传送门:工程代码

四、实验效果展示

PWM_LED

五、总结

????????呼吸灯主要就是通过PWM脉冲宽度调制来改变IO输出电压来实现LED的亮度逐渐变化,PWM是一个很有用的东西,在以后工程设计中可能会经常遇得到或者用到它。所以希望后来的读者们都可以通过这个小实验去了解学习PWM。

六、参考链接

使用STM32输出PWM波形

PWM(脉冲宽度调制)信号原理

STM32CUBEMX_基于PWM的呼吸灯

?

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 12:14:20  更:2022-10-31 12:16:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:23:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码