【STM32+HAL+Proteus】系列学习教程---PWM(呼吸灯)

这篇具有很好参考价值的文章主要介绍了【STM32+HAL+Proteus】系列学习教程---PWM(呼吸灯)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实现目标

1、利用定时器输出PWM实现呼吸灯

2、学会STM32CubeMX软件输出PWM的配置

3、具体目标:利用定时器3的通道2(部分重映射到PB5管脚)输出1KHz的矩形波,实现呼吸灯。


一、PWM涉及的几个概念

1、什么是PWM?

        PWM(Pulse width modulation)脉冲宽度调制。PWM是通过编程控制输出方波的频率和占空比(高低电平的比例)。广泛应用在从测量、通信、功率控制与变换的许多领域中

2、PWM的占空比?

        占空比Duty Cycle),是指在一个周期内,高电平时间占整个信号周期的百分比,即高电平时间与周期的比值:

占空比=T1/T

【STM32+HAL+Proteus】系列学习教程---PWM(呼吸灯),STM32 应用开发教程(基础),stm32,嵌入式硬件,单片机

二、定时器产生PWM

1、定时器输出PWM主要特点

(1)STM32的每个通用定时器都有独立的4个通道可以用来作为:输入捕获、输出比较、PWM输出、单脉冲模式输出等。

(2)STM32的定时器除了TIM6和TIM7(基本定时器)之外,其他的定时器都可以产生PWM输出。其中,高级定时器TIM1、TIM8可以同时产生7路PWM输出。

(3)STM32中每个定时器有4个输入通道:TIMx_CH1~TIMx_CH4

(4)每个通道对应1个捕获/比较寄存器TIMx_CRRx,将寄存器值和计数器值相比较,通过比较结果输出高低电平,从而得到PWM信号;

(5)脉冲宽度调制模式可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空比的信号

2、PWM的工作模式:              

PWM模式分为两种,PWM1和PWM2,都可以设置计数器递增计数或者递减计数。具体如下表

【STM32+HAL+Proteus】系列学习教程---PWM(呼吸灯),STM32 应用开发教程(基础),stm32,嵌入式硬件,单片机

(1)PWM模式1(向上计数)  :计数器从0计数加到自动重装载值(TIMx_ARR),然后重新从0开始计数,并且产生一个计数器溢出事件。在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(OC1REF=1)。   
(2)PWM模式2(向下计数)  :计数器从自动重装载值(TIMx_ARR)减到0,然后重新从重装载值(TIMx_ARR)开始递减,并且产生一个计数器溢出事件。在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为有效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为有效电平,否则为无效电平。  

以下为PWM模式1向上计数模式输出PWM原理:

【STM32+HAL+Proteus】系列学习教程---PWM(呼吸灯),STM32 应用开发教程(基础),stm32,嵌入式硬件,单片机

(1)在PWM 的一个周期内,定时器从 0 开始向上计数,在 0-t1时间段,定时器计数器TIMx_CNT 值小于 TIMx_CCRx 值,输出低电平
(2)在t1-t2时间段,定时器计数器 TIMx_CNT 值大于 TIMx_CCRx 值,输出高电平
(3)当定时器计数器的值 TIMx_CNT 达到 ARR 时,定时器溢出,重新从 0 开始向上计数,如此循环

总结:

TIMx_ARR寄存器确定PWM频率,

TIMx_CCRx寄存器确定占空比

三、定时器3输出通道2管脚重映射

1、重映射简介     

   每个内置外设都有若干个输入输出引脚,一般这些引脚的输出端口都是固定不变的,为了让设计工程师可以更好地安排引脚的走向和功能,在STM32中引入了外设引脚重映射的概念,即一个外设的引脚除了具有默认的端口外,还可以通过设置重映射寄存器的方式,把这个外设的引脚映射到其它的端口。

        换种说法:重映射就是引脚重映射,本来每个内置外设都有原来设定的引脚,所谓的重映射就是通过某种方式,将外设本来的引脚的功能赋予给另外的引脚(比如一个本项目中定时器3输出PWM的通道2的引脚是PA7,但这个引脚没有接LED,然而可以通过重映射,将PA7设定成PB5,也就是说PA7取代了PB5的功能,成为了时器3输出PWM的通道2的引脚),但是重映射也是有规定可以映射到哪个引脚的(需要查看手册)而不是你想映射到哪个引脚就映射到哪个引脚。

2、两种重映射

部分重映射 & 完全重映射

  • 部分重映射:功能外设的部分引脚重新映射,还有一部分引脚是原来的默认引脚。
  • 完全重映射:功能外设的所有引脚都重新映射

3、TIM3重映射表

【STM32+HAL+Proteus】系列学习教程---PWM(呼吸灯),STM32 应用开发教程(基础),stm32,嵌入式硬件,单片机

二、原理图设计

【STM32+HAL+Proteus】系列学习教程---PWM(呼吸灯),STM32 应用开发教程(基础),stm32,嵌入式硬件,单片机

三、STM32CubeMX 配置

1.定时器3时钟源

【STM32+HAL+Proteus】系列学习教程---PWM(呼吸灯),STM32 应用开发教程(基础),stm32,嵌入式硬件,单片机

2.产生PWM配置

【STM32+HAL+Proteus】系列学习教程---PWM(呼吸灯),STM32 应用开发教程(基础),stm32,嵌入式硬件,单片机

        在预分频系数确定的条件下,PWM模式的信号频率是由自动重装载寄存器ARR来确定的,占空比则由比较寄存器CCR来确定。

(1)输出PWM频率f计算:

【STM32+HAL+Proteus】系列学习教程---PWM(呼吸灯),STM32 应用开发教程(基础),stm32,嵌入式硬件,单片机

例如:假设系统时钟为8MHz,通用定时器3时钟Tclk为8MHz,设置如下: 预分频系数PSC=8-1;    ARR=1000-1; 则,定时时间Tout=8×1000/8000000=1ms,其频率f = 1/Tout=1000Hz.

(2)Channelx:输出PWM通道

  - PWM Generation CH1:CH1输出正常的PWM波形
  - PWM Generation CH1N:产生互补的PWM波形
  - PWM Generation CH1 CH1N:产生正常和互补的波形(通过两个引脚)
  - PWM Generation No Output:不输出PWM波到引脚
  - Forced Output CH1:强制CH1输出某个电平

四、程序设计

1.定义一个全局变量

int pwmVal = 500;

2.开启定时器3通道2产生PWM

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

3.调整占空比

	  while (pwmVal< 1000)
	  {
		  pwmVal++;
		  __HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_2, pwmVal);    //修改比较值,修改占空比
//		  TIM3->CCR2 = pwmVal;    与上方相同
		  HAL_Delay(2);
	  }
	  while (pwmVal)
	  {
		  pwmVal--;
		  __HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_2, pwmVal);    //修改比较值,修改占空比
//		  TIM3->CCR2 = pwmVal;     与上方相同
		  HAL_Delay(2);
	  }
	  HAL_Delay(1000);

五、实验现象

【STM32+HAL+Proteus】系列学习教程---PWM(呼吸灯),STM32 应用开发教程(基础),stm32,嵌入式硬件,单片机

六、仿真实现

Protues 8.8 仿真的时候TIM3输出PWM的通道2  不能够管脚重映射,PWM输出在PA7 !!!

【STM32+HAL+Proteus】系列学习教程---PWM(呼吸灯),STM32 应用开发教程(基础),stm32,嵌入式硬件,单片机文章来源地址https://www.toymoban.com/news/detail-856030.html


总结

到了这里,关于【STM32+HAL+Proteus】系列学习教程---PWM(呼吸灯)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【STM32】标准库与HAL库对照学习教程十四--CAN总线

    STM32全部教程 :【STM32】标准库与HAL库对照学习系列教程大全 本篇介绍如何使用STM32的标准库与HAL库对CAN总线的使用,由于我那块普中的STM32F103ZET6开发板送人了,因此我这边用STM32F103C8最小系统板,进行简单的演示一下功能,最主要的还是需要理解CAN总线的原理,在本篇中,

    2024年02月15日
    浏览(29)
  • stm32HAL库学习笔记----pwm驱动舵机

    目录 一、目标 二、准备 三、原理 四、cubemx 五、程序 实现stm32驱动舵机旋转0°,45°,90°,135°,180°等角度。 stm32f103(c8t6),舵机(SG90 9g),杜邦线 接线:舵机红线-----------5V(mcu)            舵机棕线-----------GND(mcu)            舵机黄线-----------PA1(视情况而定

    2023年04月26日
    浏览(28)
  • STM32学习笔记(一):输出PWM——HAL库

    本篇文章为个人参考总结所用,如果错误还望指出。 涉及的知识: 1、STM32CubeMx的部分使用 2、PWM原理及常用概念 3、用单片机生成一定频率的PWM 用到的软件及单片机: 1、STM32CubeMx 2、IDE: MDK-Keil软件 3、芯片:STM32F407ZGT6 4、开发板:正点原子探索者 注:不同型号的单片机实现

    2024年02月12日
    浏览(33)
  • HAL库STM32常用外设教程(一)—— 定时器 输出PWM

    本篇文章为个人参考总结所用,如果错误还望指出。 涉及的知识: 1、STM32CubeMx的部分使用 2、PWM原理及常用概念 3、用单片机生成一定频率的PWM 用到的软件及单片机: 1、STM32CubeMx 2、IDE: MDK-Keil软件 3、芯片:STM32F407ZGT6 4、开发板:正点原子探索者 注:不同型号的单片机实现

    2024年02月02日
    浏览(44)
  • 【STM32F4系列】【HAL库】【自制库】WS2812(软件部分)(PWM+DMA)

    硬件介绍(PCB设计方案) 模拟时序发送 WS2812是一种异步串行通信,它每一位数据时间是ns级别的 默认是高电平状态 0码:220-380ns高电平+580-1600ns低电平 1码:580-1600ns高电平+220-380ns低电平 复位码:280us低电平 24Bit数据来代表GRB的亮度值 从高位到低位发送,分别按照G-R-B的顺序发送

    2024年02月15日
    浏览(73)
  • STM32CubeIDE学习笔记——使用HAL库PWM输出驱动舵机

    目录 PWM驱动简介 工程配置 代码编写 这里我采用的是STM32F103C8T6最小系统板,SG-90舵机实现功能。 舵机驱动角度和PWM占空比有关系,具体对应为50--0度  150--90度  250--180度,通过STM32的定时器功能输出PWM波来控制舵机进行转动。  时钟选择外部高速时钟 系统映射配置 时钟树设

    2024年02月13日
    浏览(30)
  • STM32 HAL库 Timer(定时器)+DMA输出PWM底层配置过程学习

    本文使用的芯片型号是STM32G030,写本文的目前是想记录学习下Timer借助DMA生成可变占空比PWM时的底层配置过程。 使用TIM1,配置就只改了图上的配置,系统时钟用的16M,分频选择15(16-1),自动重装载寄存器ARR选择999(1000-1),那么生成的就是1kHz的PWM,这里为什么要减1,因为这俩是

    2024年04月09日
    浏览(48)
  • STM32系列(HAL库)——F103C8T6驱动WS2812全彩RGB模块(PWM+DMA方式)

    (1)编程平台:Keil5 (2)CubeMX (1)某宝买的RGB模块(4个灯珠级联) (2)F1的板子,本例使用经典F103C8T6 (3)ST-link 下载器 (4)杜邦线若干 (1)模块简介: 没什么比手册讲得更加清楚了,模块中文数据手册:ws2812b中文资料_数据手册_参数 (2)驱动原理:          以上这是数据手册中提到

    2023年04月11日
    浏览(35)
  • STM32循迹小车系列教程(一)—— 使用PWM控制电机

    本章节主要讲解直流减速电机控制原理,电机驱动电路,以及如何使用PWM控制直流减速电机 1.软件准备:STM32CubeMx、Keil5_ MDK 2.硬件准备:STM32F103C8T6核心板、TB6612电机驱动模块/L298N电机驱动、18650锂电池3节/3S航模电池、杜邦线若干         图2-1为 市场上 常用 的 直流减速 电

    2024年02月05日
    浏览(36)
  • STM32野火教程学习笔记

    虽然经历了疫情期间的价格起飞,但是STM32系列的单片机仍然是各个控制领域内主流的微控制器。它是控制人的必修课之一。 我们在学习51单片机的时候,通常是通过编写程序直接对其输入输出(i/o)口进行操作。而STM32单片机更加高级,它有更复杂的底层。因此我们对STM32单

    2024年02月06日
    浏览(80)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包