0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32基础知识:定时器的PWM输出功能

CHANBAEK 来源:上下求索电子er 作者:上下求索电子er 2023-10-24 15:32 次阅读

定时器PWM输出功能

1 PWM工作原理

脉冲宽度调制(PWM:Pulse Width Modulation)是一种对模拟信号电平进行数字编码的方法。广泛应用于电机控制、灯光的亮度调节、功率控制等领域。

1.1 PWM信号的两个基本参数

  • 周期(Period): 一个完整PWM波形所持续的时间
  • 占空比(Duty): 高电平持续时间(Ton)与周期时间(Period)的比值

1.2 PWM信号的电压调节原理

图片

  • 不同占空比的PWM信号等效于不同的平均电压
  • 平均电压 = 峰值 x 占空比

1.3 定时器通道结构

图片

  • 时基单元工作于定时模式,预分频时钟CK_PSC等于定时器时钟TIMx_CLK。
  • 每个定时器具备1~4个独立的通道,各个通道具有独立的 输入捕获单元捕获/比较寄存器输出比较单元 ,但共享同一个时基单元。
  • x表示定时器编号,每个通道有对应的GPIO引脚作为通道的输入/输出引脚,每个通道可以选择作为输入捕获或者输出比较功能,但是只能二选一。

1.4 功能单元的作用

  • 输入捕获单元: 用于捕获外部触发信号,捕获方式为上升沿/下降沿/双边沿捕获。发生捕获事件时,将此刻计数器的值锁存到捕获比较寄存器中,供用户读取,同时可以产生捕获中断。
  • 捕获/比较寄存器: TIMx_CCR寄存器在输入捕获模式下用于存放发生捕获事件时的当前计数值;在输出比较模式下用于存放预设的比较值。该寄存器具备预装载功能。
  • 输出比较单元: 用于信号输出。定时器通过将预设的比较值与计数器的值做匹配比较,以实现各类输出,如PWM输出、单脉冲输出等。预设的比较值存放在捕获/比较寄存器中。

1.5 PWM输出的工作原理

图片

  • 实例:假设预分频时钟CK_PSC为100MHz,产生周期为1ms,占空比为47.5%的PWM信号。Period = 1ms,可以设置 PSC = 99,ARR = 999,Duty = 47.5%,则 CRR = 475。

定时器的每个通道都可以输出PWM信号,对于同一个定时器而言,它的多个通道共享同一个自动重载寄存器,因此可以输出占空比不同,但周期相同的PWM信号。

图片

2 PWM功能的数据类型和接口函数

2.1 输出比较单元

图片

成员变量:

输出比较模式:成员变量OCMode的取值范围

宏常量定义含义
IM_OCMODE_TIMING输出比较冻结模式,匹配时无通道输出
TIM_OCMODE_ACTIVE输出比较冻结模式,匹配时无通道输出
TIM_OCMODE_INACTIVE匹配时设置通道输出为无效电平
TIM_OCMODE_TOGGLE匹配时设置通道输出电平翻转
TIM_OCMODE_PWM1PWM输出模式1
TIM_OCMODE_PWM2PWM输出模式2
TIM_OCMODE_FORCED_ACTIVE不进行匹配,强制通道输出为有效电平
TIM_OCMODE_FORCED_INACTIVE不进行匹配,强制通道输出为无效电平
  • PWM模式1:递增计数时,当TIMx_CNT (当前计数值)
  • PWM模式2:递增计数时,当TIMx_CNT (当前计数值)

有效电平极性:成员变量OCPolarity的取值范围

宏常量定义含义
TIM_OCPOLARITY_HIGH输出有效电平为高电平
TIM_OCPOLARITY_LOW输出有效电平为低电平

快速输出使能:成员变量OCFastMode的取值范围

宏常量定义含义
TIM_OCFAST_DISABLE不使能快速输出模式
TIM_OCPOLARITY_LOWTIM_OCFAST_ENABLE使能快速输出模式

可以加快触发输入事件对通道输出的影响,默认配置为不使能

接口函数:

  1. 定时器PWM输出启动函数:HAL_TIM_PWM_Start

    函数原型HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel)
    功能描述在轮询方式下启动PWM信号输出
    入口参数htim:定时器句柄的地址
    返回值HAL状态值
    注意事项1. 该函数在定时器初始化完成之后调用2. 函数需要由用户调用,用于启动定时器的指定通道输出PWM信号
  2. 定时器比较/捕获寄存器设置函数: __HAL_TIM_SET_COMPARE

    函数原型__HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__)
    功能描述设置捕获/比较寄存器TIMx_CCR的值。在PWM输出时, 用于改变PWM 信号的占空比
    入口参数HANDLE : 定时器句柄的地址__CHANNEL__: 定时器通道号, 取值范围是TIM_CHANNEL_1 ~TIM_CHANNEL_4__COMPARE__ :写入捕获/比较寄存器TIMx_CCR的值
    返回值
    注意事项1. 该函数是宏函数,进行宏替换,不发生函数调用2. 函数需要由用户调用,用于PWM输出时,改变PWM信号的占空比

任务实践

用PWM信号控制发板上的指示灯LED1。设置PWM周期为 20 ms,占空比从0%开始,步进为20%。递增到100%后,又从0%开始,并重复整个过程。占空比修改的时间间隔为200ms。

经过计算可得,可以取值:PSC=799,ARR=199,CRR从0到200,步进值为40。

  1. 配置定时器2时钟源为内部时钟 (8MHz),通道1配置为PWM输出模式,设置PSC=799,ARR199,Pulse设置为0。
    图片
  2. 编写代码
    main.c
    /* USER CODE BEGIN PV */
    uint16_t CCR = 0;
    uint16_t Step = 40;
    /* USER CODE END PV */
    
    /* USER CODE BEGIN 2 */
      HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
     /* USER CODE END 2 */
    
    /* USER CODE BEGIN 3 */
        for (CCR = 0; CCR <= 200; CCR = CCR + Step)
        {
          __HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1, CCR);
          HAL_Delay(200);
        }
      }
    /* USER CODE END 3 */
    
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    30

    文章

    5028

    浏览量

    117721
  • PWM
    PWM
    +关注

    关注

    114

    文章

    4900

    浏览量

    209906
  • STM32
    +关注

    关注

    2239

    文章

    10671

    浏览量

    348743
  • 定时器
    +关注

    关注

    23

    文章

    3147

    浏览量

    112036
  • 脉冲宽度调制

    关注

    7

    文章

    74

    浏览量

    13571
收藏 人收藏

    评论

    相关推荐

    电机控制基础知识1—定时器基础知识PWM输出原理

    转速等。 本篇先介绍 定时器基础知识 ,然后对照这些知识介绍一下 定时器输出PWM的基本原理
    的头像 发表于 06-17 00:11 1.1w次阅读
    电机控制<b class='flag-5'>基础知识</b>1—<b class='flag-5'>定时器</b><b class='flag-5'>基础知识</b>与<b class='flag-5'>PWM</b><b class='flag-5'>输出</b>原理

    定时器基础知识PWM输出原理

    转速等。本篇先介绍定时器基础知识,然后对照这些知识介绍一下定时器输出PWM的基本原理,以及编程
    发表于 06-18 09:21

    定时器基础知识PWM输出原理

    配置为输入: CCR1 为上一个输入捕获 1 事件 (IC1) 发生时的计数值。4 代码实现与分析上面介绍了定时器基础知识PWM输出
    发表于 07-07 07:00

    介绍通过STM32定时器输出PWM

    目录01、PWM介绍02、STM32的管脚复用03、STM32输出PWM原理04、STM32
    发表于 08-04 08:21

    定时器基础知识

    目录:一、定时器基础知识二、基本定时器(TIM6和TIM7)三、通用定时器(TIM2~TIM6)1.功能特点2.时钟源3.时基单元4.输入捕
    发表于 08-09 07:30

    Systick定时器基础知识讲解

    Systick定时器基础知识讲解Systick相关寄存库函数讲解delay延时函数讲解(Systick应用)(借鉴正点原子网课)(一)Systick定时器,是一个简单的
    发表于 08-19 07:18

    定时器基础知识PWM输出原理介绍

    上篇电机控制基础——定时器基础知识PWM输出原理介绍了定时器输出
    发表于 01-20 08:23

    定时器基础知识PWM输出原理是什么

    转速等。本篇先介绍定时器基础知识,然后对照这些知识介绍一下定时器输出PWM的基本原理,以及编程
    发表于 01-25 08:16

    如何通过STM32定时器输出PWM

      本文将介绍通过STM32定时器输出PWM,如果对定时器不太熟悉的同学可以看下之前的文章《STM32
    的头像 发表于 02-20 15:08 2.1w次阅读
    如何通过<b class='flag-5'>STM32</b>的<b class='flag-5'>定时器</b><b class='flag-5'>输出</b><b class='flag-5'>PWM</b>?

    浅谈定时器基础知识PWM输出原理

    转速等。 本篇先介绍定时器基础知识,然后对照这些知识介绍一下定时器输出PWM的基本原理,以及编
    的头像 发表于 04-05 10:35 1.4w次阅读
    浅谈<b class='flag-5'>定时器</b><b class='flag-5'>基础知识</b>与<b class='flag-5'>PWM</b><b class='flag-5'>输出</b>原理

    [STM32]通用定时器的使用

    STM32的通用定时器定时输出PWM功能的使用本次还是使用发光二极管来验证
    发表于 11-22 19:06 24次下载
    [<b class='flag-5'>STM32</b>]通用<b class='flag-5'>定时器</b>的使用

    STM32-通用定时器-PWM输出

    1 通用定时器PWM概述1.1STM32定时器输出通道引脚这里以TIM3为例来讲解。STM32
    发表于 11-26 15:36 22次下载
    <b class='flag-5'>STM32</b>-通用<b class='flag-5'>定时器</b>-<b class='flag-5'>PWM</b><b class='flag-5'>输出</b>

    STM32F4单定时器独立输出四路PWM脉冲

    本文以STM32F405单片机为例,介绍如何用一个定时器的四个通道独立地输出四路PWM脉冲。主要使用定时器
    发表于 11-30 10:06 28次下载
    <b class='flag-5'>STM32</b>F4单<b class='flag-5'>定时器</b>独立<b class='flag-5'>输出</b>四路<b class='flag-5'>PWM</b>脉冲

    电机控制基础——定时器基础知识PWM输出原理

    转速等。本篇先介绍定时器基础知识,然后对照这些知识介绍一下定时器输出PWM的基本原理,以及编程
    发表于 11-30 14:21 38次下载
    电机控制基础——<b class='flag-5'>定时器</b><b class='flag-5'>基础知识</b>与<b class='flag-5'>PWM</b><b class='flag-5'>输出</b>原理

    STM32F103C8T6定时器TIM4通道1、2输出PWM

    STM32F103C8T6定时器TIM4通道1、2输出PWM这美妙的波形,真好,我他喵的终于把你弄出来了。STM32F103C8T6使用
    发表于 12-02 18:21 66次下载
    <b class='flag-5'>STM32</b>F103C8T6<b class='flag-5'>定时器</b>TIM4通道1、2<b class='flag-5'>输出</b><b class='flag-5'>PWM</b>