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

这篇具有很好参考价值的文章主要介绍了基于STM32利用PWM完成呼吸灯的实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、pwm的介绍

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

stm32pwm呼吸灯程序,c/c++,嵌入式,stm32,c语言,嵌入式硬件
其中分为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,作用于开关元器件。如下图
stm32pwm呼吸灯程序,c/c++,嵌入式,stm32,c语言,嵌入式硬件

6.端口的选择

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

7.PWM口对应配置

stm32pwm呼吸灯程序,c/c++,嵌入式,stm32,c语言,嵌入式硬件

8.PWM 输入模式

该模式是输入捕获的特例,只能使用通道 1 和通道 2,通道 3 和通道 4 使用不了。与上面那种只使用一个捕获寄存器测量脉宽和频率的方法相比,PWM 输入模式需要占用两个捕获寄存器。stm32pwm呼吸灯程序,c/c++,嵌入式,stm32,c语言,嵌入式硬件

9.PWM 输出模式

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

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

(1) PWM 边沿对齐模式
在递增计数模式下,计数器从 0 计数到自动重载值(TIMx_ARR 寄存器的内容),然后重新从 0 开始计数并生成计数器上溢事件。stm32pwm呼吸灯程序,c/c++,嵌入式,stm32,c语言,嵌入式硬件
(2)PWM 中心对齐模式
在中心对齐模式下,计数器 CNT 是工作做递增/递减模式下。开始的时候,计数器CNT 从 0 开始计数到自动重载值减1(ARR-1),生成计数器上溢事件;然后从自动重载值开始向下计数到 1 并生成计数器下溢事件。之后从 0 开始重新计数。
stm32pwm呼吸灯程序,c/c++,嵌入式,stm32,c语言,嵌入式硬件

二、用cubemx创建工程

1.创建新工程

stm32pwm呼吸灯程序,c/c++,嵌入式,stm32,c语言,嵌入式硬件

2.芯片的选择

stm32pwm呼吸灯程序,c/c++,嵌入式,stm32,c语言,嵌入式硬件

3.配置环境

System Core–RCC–Crystal/Ceramic Resonatorstm32pwm呼吸灯程序,c/c++,嵌入式,stm32,c语言,嵌入式硬件System Core–SYS–Serial Wirestm32pwm呼吸灯程序,c/c++,嵌入式,stm32,c语言,嵌入式硬件
TM3–Internal Clock(内部时钟–PWM Generation CH1(选择通道1)–Prtscaler (定时器分频系数) : 71–Counter Mode (Up向上计数模式)–Counter Period(自动重装载值 500)–CKD(不分频 No Division)
stm32pwm呼吸灯程序,c/c++,嵌入式,stm32,c语言,嵌入式硬件
TM4–Internal Clock(内部时钟–PWM Generation CH1(选择通道1)–Prtscaler (定时器分频系数) : 71–Counter Mode (Up向上计数模式)–Counter Period(自动重装载值 500)–CKD(不分频 No Division)
stm32pwm呼吸灯程序,c/c++,嵌入式,stm32,c语言,嵌入式硬件

4.时钟的配置

stm32pwm呼吸灯程序,c/c++,嵌入式,stm32,c语言,嵌入式硬件

5.生成项目

三、代码的编译

main.c文件中添加变量

uint16_t pwm=0;   //占空比

添加后如下图所示:
stm32pwm呼吸灯程序,c/c++,嵌入式,stm32,c语言,嵌入式硬件
在main.c中添加PWM的通道

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

添加后如下图所示:
stm32pwm呼吸灯程序,c/c++,嵌入式,stm32,c语言,嵌入式硬件
在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);

stm32pwm呼吸灯程序,c/c++,嵌入式,stm32,c语言,嵌入式硬件
编译未出现错误,连接完电路后准备烧录
stm32pwm呼吸灯程序,c/c++,嵌入式,stm32,c语言,嵌入式硬件

四、电路的连接

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波形文章来源地址https://www.toymoban.com/news/detail-768888.html

到了这里,关于基于STM32利用PWM完成呼吸灯的实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32实现PWM输出频率1kHz占空比50%的方波和呼吸灯

    板子:野火指南者 芯片:STM32f103VET6 PWM通道:TIM3的通道1和通道3 GPIO:PA6和PB0 本文主要讲需要怎么做,简要讲解原理,提供全部代码,有利于快速上手。 打开STM32f103VET6的芯片数据手册,打开目录Pinouts and pindescriptions——High-density STM32F103xC/D/E pin definitions,如图所示。 这里选

    2024年02月05日
    浏览(37)
  • stm32之PWM呼吸灯

            呼吸灯是灯从渐亮到渐灭周而复始形成的一个效果。由于51没有PWM所以需要定时器模拟PWM才能实现呼吸灯的效果,但是stm32的通用定时器是有PWM模式的,所以不需要再用软件模拟,精准度也高。 本实验用的基于stm32f103C8t6。在PB8引脚上接了一个led, led的另一端接到

    2024年02月05日
    浏览(25)
  • STM32 HAL库 STM32CubeMX -- PWM(呼吸灯)

    PWM (Pulse Width Modulation)就是对外输出脉宽(即占空比)可调的方波信号,简称脉宽调制; 信号频率由自动重装寄存器ARR 的值决定,占空比由比较寄存器CCR 的值决定。 PWM模式1 : 在向上计数时 ,一旦TIMx_CNTTIMx_CCR1时通道1为有效电平,否则为无效电平; 在向下计数时 ,一旦

    2024年02月01日
    浏览(35)
  • STM32自学☞PWM驱动LED呼吸灯

    常用函数简单说明 ①用来配置输出比较模块  TIM_OC1Init()     (初始化)             TIM_OC2Init()                               TIM_OC3Init()                               TIM_OC4Init() ②TIM_OCStructInit();用来给输出比较结构体赋一个默认值 ③用来配置强制输出模式  TIM

    2024年02月19日
    浏览(27)
  • stm32定时器输出pwm&IO口模拟pwm——呼吸灯

    什么是pwm波?pwm就是脉冲宽度调制,就是占空比可变的脉冲波形,通过改变占空比,输出不同的pwm波,就能实现许多有趣的功能,比如说我们生活中常见的呼吸灯就是通过这样实现的。接下来我们就以呼吸灯为例,学习stm32通过定时器输出pwm波和io口模拟输出pwm波。 控制方式就

    2024年01月18日
    浏览(37)
  • 【STM32+HAL+Proteus】系列学习教程---PWM(呼吸灯)

    1、利用定时器输出PWM实现呼吸灯 2、学会STM32CubeMX软件输出PWM的配置 3、具体目标:利用定时器3的通道2(部分重映射到PB5管脚)输出1KHz的矩形波,实现呼吸灯。 1、什么是PWM?         PWM (Pulse width modulation)脉冲宽度调制。PWM是通过编程控制输出方波的频率和占空比(高

    2024年04月23日
    浏览(35)
  • 10、江科大stm32视频学习笔记——PWM驱动led呼吸灯、驱动舵机、驱动直流机

    目录 一、PWM驱动LED呼吸灯(灯接在PA0) 1、PWM波和GPIO的对应关系参考引脚定义表 2、计数器的计算 3、TIM输出PWM波使用步骤​编辑 4、代码 (1)输出化比较单元 (2) PWM.c (3)main.c 5、重映射更换成PA15亮灯 二、PWM驱动舵机(舵机接在PA1、按键在PB1)  1、电路图 2、参数计算

    2024年02月14日
    浏览(25)
  • STM32 HAL库 通用定时器介绍及相关应用例程 定时器中断 输出PWM (点亮LED呼吸灯、输出PWM、输入捕获) CubeMX

    (部分图引自于ATK) 前情提要(基本定时器) 点此进入 通用定时器类别 通用定时器和基本定时器相比大致的工作方式是相似的,不过通用定时器比基本定时器多了一些很好用的功能,比如: 外部输入捕获 输出比较 输出PWM 时钟源 CubeMX为我们提供了配置时钟的非常方便的工

    2024年04月15日
    浏览(66)
  • 按键调整PWM占空比,实现电机转速调整(基于STM32开发板)

    实验名称 :PWM控制电机转速 实验功能 : 基于正点原子战舰开发板,通过按键(KEY0 / KEY1)改变PWM,进而实现电机转速的调整。当按下KEY0键,电机转速加快;按下KEY1键,电机转速降低。 硬件资源 : 1. 独立按键 KEY0         -  PE4 KEY1         -  PE3 2. 通用定时器 TIM2

    2024年02月09日
    浏览(32)
  • 【STM32学习】——定时器输出比较功能&PWM脉宽调制&通用/高级定时器输出比较通道&舵机/直流电机简介&PWM驱动呼吸灯/舵机/直流电机代码实操

    声明:学习笔记根据b站江科大自化协stm32入门教程编辑,仅供学习交流使用!

    2024年02月03日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包