基于STM32利用PWM完成呼吸灯的实现

目录

  • 一、pwm的介绍
      • 1.高级控制定时器功能实现框图
      • 2.pwm的定义
      • 3.pwm的控制方式
      • 4.主要参数
      • 5.实现原理
      • 6.端口的选择
      • 7.PWM口对应配置
      • 8.PWM 输入模式
      • 9.PWM 输出模式
  • 二、用cubemx创建工程
      • 1.创建新工程
      • 2.芯片的选择
      • 3.配置环境
      • 4.时钟的配置
      • 5.生成项目
  • 三、代码的编译
  • 四、电路的连接
  • 五、代码实现
  • 六、总结
  • 参考文献

一、pwm的介绍

1.高级控制定时器功能实现框图

在这里插入图片描述
其中分为6个板块:①时钟源②控制器 ③时基单元 ④输入捕获 ⑤输出比较 ⑥断路功能

2.pwm的定义

pwm是​​​​​​​一种模拟控制方式,根据相应载荷的变化来调制晶体管栅极或基极的偏置,来实现开关稳压电源输出晶体管或晶体管导通时间的改变,这种方式能使电源的输出电压在工作条件变化时保持恒定。脉冲宽度调制(PWM )是一种对模拟信号电平进行数字编码的方法。
通过高分辨率计数器的使用,利用方波的占空比调制来对一个具体模拟信号的电平进行编码。pwm​​​​​​​信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。

3.pwm的控制方式

1.线电压控制PWM
2.电流控制 PWM
3.空间电压矢量控制PWM
4.矢量控制PWM​​​​​​​
5.直接转矩控制PWM
6.非线性控制PWM
7.谐振软开关PWM

4.主要参数

PWM:脉宽调制
脉宽调试是数字信号输出对模拟信号输出的一种方式。
占空比:一个周期内,高电平时间与整个周期的比值。

5.实现原理

PWM实现的原理是通过锯齿波/三角波(载波)所需要合成的波形(调制波)进行比较,然后确定PWM所需要输出的极性,通常是ON或者是OFF,作用于开关元器件。如下图
在这里插入图片描述

6.端口的选择

IO模拟PWM输出时速度不是很快。端口选择时,普通IO可以输出PWM,但还是尽量选择PWM口进行PWM输出。

7.PWM口对应配置

在这里插入图片描述

8.PWM 输入模式

该模式是输入捕获的特例,只能使用通道 1 和通道 2,通道 3 和通道 4 使用不了。与上面那种只使用一个捕获寄存器测量脉宽和频率的方法相比,PWM 输入模式需要占用两个捕获寄存器。在这里插入图片描述

9.PWM 输出模式

PWM输出就是对外输出脉宽(即占空比)可调的方波信号,信号频率由自动重装寄存器 ARR 的值决定,占空比由比较寄存器 CCR 的值决定。
PWM 模式分为两种,PWM1 和 PWM2,总得来说是差不多,具体的区别。

PWM1 与 PWM2 模式的区别:
模式|计数器 CNT 计算方式|说明
PWM1 递增 CNT PWM2 递减 CNT>CCR,通道 CH 为无效,否则为有效 PWM2 递增 CNT PWM2 递减 CNT>CCR,通道 CH 为有效,否则为无效

(1) PWM 边沿对齐模式
在递增计数模式下,计数器从 0 计数到自动重载值(TIMx_ARR 寄存器的内容),然后重新从 0 开始计数并生成计数器上溢事件。在这里插入图片描述
(2)PWM 中心对齐模式
在中心对齐模式下,计数器 CNT 是工作做递增/递减模式下。开始的时候,计数器CNT 从 0 开始计数到自动重载值减1(ARR-1),生成计数器上溢事件;然后从自动重载值开始向下计数到 1 并生成计数器下溢事件。之后从 0 开始重新计数。
在这里插入图片描述

二、用cubemx创建工程

1.创建新工程

在这里插入图片描述

2.芯片的选择

在这里插入图片描述

3.配置环境

System Core–RCC–Crystal/Ceramic Resonator在这里插入图片描述System Core–SYS–Serial Wire在这里插入图片描述
TM3–Internal Clock(内部时钟–PWM Generation CH1(选择通道1)–Prtscaler (定时器分频系数) : 71–Counter Mode (Up向上计数模式)–Counter Period(自动重装载值 500)–CKD(不分频 No Division)
在这里插入图片描述
TM4–Internal Clock(内部时钟–PWM Generation CH1(选择通道1)–Prtscaler (定时器分频系数) : 71–Counter Mode (Up向上计数模式)–Counter Period(自动重装载值 500)–CKD(不分频 No Division)
在这里插入图片描述

4.时钟的配置

在这里插入图片描述

5.生成项目

三、代码的编译

main.c文件中添加变量

uint16_t pwm=0;   //占空比

添加后如下图所示:
在这里插入图片描述
在main.c中添加PWM的通道

	HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_1); 

添加后如下图所示:
在这里插入图片描述
在while循环中添加如下所示代码

while (pwm< 500){pwm++;__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, pwm);  __HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_1, pwm);  			HAL_Delay(1);}while (pwm){pwm--;__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, pwm);    __HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_1, pwm);  HAL_Delay(1);}HAL_Delay(200);

在这里插入图片描述
编译未出现错误,连接完电路后准备烧录
在这里插入图片描述

四、电路的连接

3V3 —> 3V3
GND —> GND
RXD —> A9
TXD —> A10
LED灯短脚 —> A6
LED灯长脚 —> 3V3
PB6 —> PC13

五、代码实现

利用PWM完成呼吸灯

六、总结

通过本次练习,以PWM输出端实现led呼吸灯。在本次练习的过程中,出现了许多小问题例如代码未添加变量导致无法编译;程序编译成功,由于led引脚接错无法实现呼吸灯;程序编译成功,线路连接也没问题时,烧录软件出错导致无法实现等问题。再出现这些问题时不要急于放弃,沉下心来慢慢摸索,总会成功。希望本篇博客可以帮助到你,欢迎指正!!

参考文献

一文搞懂什么是PWM
pwm超详细解读,大佬细说pwm的控制方式
STM32CUBEMX_基于PWM的呼吸灯
stm32f103呼吸灯(PWM脉冲宽度调制)
使用STM32输出PWM波形


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部