当前位置: 首页 > news >正文

STM32定时器设计与应用与PWM的简介

STM32定时器设计与应用与PWM的简介

摘要:本文深入探讨了STM32微控制器中定时器的设计原理与应用方法。首先对定时器的基本功能与结构进行概述,随后详细分析了STM32的三种不同类型定时器(基本定时器、通用定时器、高级定时器)的特性、工作模式及配置要点,并结合时序图阐述了时基单元的关键运行机制,旨在为嵌入式系统开发人员提供一个全面且详细的STM32定时器应用参考,助力其高效实现精准时间控制与复杂任务调度。

一、引言

在嵌入式系统开发中,精准的时间控制与任务调度是实现复杂功能的关键所在,而定时器作为微控制器的核心组件之一,承担着至关重要的角色。STM32系列微控制器凭借其高性能与丰富的外设资源,在众多领域得到了广泛应用,其内置的多种定时器为开发者提供了强大的时间管理工具。本文将聚焦于STM32定时器的设计与应用,深入剖析其工作原理、特性以及在实际项目中的应用方法。

二、STM32定时器概述

(一)定时器基本功能

定时器本质上是一个计数器,能够对输入的时钟信号进行计数,并在计数值达到预设的目标值时触发中断,从而实现定时功能。STM32的定时器具备多种功能,除了基本的定时中断功能外,还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等复杂功能,可满足不同应用场景下的多样化需求。

(二)定时器的分类

根据复杂度和应用场景的不同,STM32的定时器主要分为高级定时器、通用定时器和基本定时器三种类型。基本定时器功能较为简单,仅具备基本的定时中断功能和主模式触发DAC的功能;通用定时器在功能上更为丰富,除了包含基本定时器的所有功能外,还增加了内外时钟源选择、输入捕获、输出比较等功能;高级定时器则是最为复杂的一种,它不仅拥有通用定时器的全部功能,还额外具备重复计数器、死区生成、互补输出、刹车输入等功能,主要用于三相无刷电机的驱动等复杂应用场合。

三、STM32定时器的结构与工作原理

(一)基本定时器

 1. 基本定时器的时基单元

基本定时器的核心部分是时基单元,由预分频器、计数器和自动重装寄存器组成。预分频器可以对输入的时钟信号进行分频,使计数器的计数频率更加灵活;计数器则对分频后的时钟信号进行计数,当计数值达到自动重装寄存器中预设的目标值时,触发更新中断,完成一次定时任务。这三个寄存器均为16位,当预分频器和自动重装寄存器均设置为最大值时,定时器的最大定时时间可达59.65秒。

2. 定时中断功能

基本定时器的时钟源只能选择内部时钟CK_INT,其频率通常为系统主频72MHz。预分频器对72MHz的时钟信号进行分频,分频后的信号作为计数器的时钟输入。计数器在时钟信号的驱动下不断自增,当计数值与自动重装寄存器中的目标值相等时,产生更新中断,中断信号通过NVIC传递给CPU,从而实现定时中断功能。

3. 主模式触发DAC功能

主模式触发DAC功能允许定时器的更新事件直接触发DAC(数字/模拟转换模块)进行转换,无需通过中断程序手动触发,从而减轻CPU的负担。通过将定时器的更新事件映射到TRGO(触发输出)引脚,TRGO引脚直接连接到DAC的触发转换引脚,实现硬件自动化触发,提高系统的运行效率。

(二)通用定时器

1. 时钟源选择

与基本定时器不同,通用定时器的时钟源更加灵活,可以选择内部时钟、外部时钟模式1、外部时钟模式2以及内部触发输入等多种时钟源。外部时钟模式2通过ETR引脚输入外部时钟信号,经过滤波和预分频处理后,可作为时基单元的时钟源;外部时钟模式1则通过TRGI引脚输入外部时钟信号,同样可以实现对时基单元的时钟控制。此外,通用定时器还可以接收来自其他定时器的TRGO信号作为内部触发输入,实现定时器之间的级联功能。

2. 控制器功能

通用定时器的控制器部分包括触发控制器、从模式控制器和编码器接口。触发控制器可以将定时器内部的事件映射到TRGO引脚,用于触发其他定时器、DAC或ADC等外设;从模式控制器则可以控制计数器的复位、启动、递增/递减以及计数方向等操作;编码器接口专门针对编码器计数而设计,可实现对旋转编码器的精确计数。

 3. 时基单元与输入捕获

通用定时器的时基单元与基本定时器类似,由预分频器、计数器和自动重装寄存器组成,其工作原理也基本相同。此外,通用定时器还具备输入捕获功能,通过四个通道(CH1至CH4)的引脚,可以捕获外部输入信号的边沿信息,用于测量输入信号的频率等参数。

(三)高级定时器

 1. 重复计数器

高级定时器在基本定时器和通用定时器的基础上增加了重复计数器,该计数器可以实现每隔几个计数周期才发生一次更新事件和更新中断,相当于对输出的更新信号进行了进一步的分频处理。这一特性使得高级定时器的最大定时时间得到了显著提升,可满足更长时间的定时需求。

2. 输出比较模块与死区生成

高级定时器的输出比较模块具备互补输出功能,可输出一对互补的PWM波形,适用于三相无刷电机的驱动控制。为了防止互补输出的PWM信号在开关切换瞬间出现直通现象,高级定时器还配备了死区生成电路(DTG),在开关切换的瞬间将桥臂的上下管全部关断,确保电机驱动电路的安全可靠运行。

3. 刹车输入

刹车输入功能为电机驱动提供了安全保障。当外部引脚BKIN产生刹车信号或内部时钟失效时,控制电路会自动切断电机的输出,防止意外情况的发生,确保系统的安全运行。

四、定时中断基本结构与时序分析

(一)定时中断基本结构

定时中断的基本结构以时基单元为核心,包括预分频器、计数器和自动重装寄存器。时基单元的时钟源可以选择内部时钟、外部时钟模式2或外部时钟模式1等多种时钟源。在计时时间到达时,时基单元会产生更新中断信号,该信号通过状态寄存器中的中断标志位传递给NVIC,进而触发中断处理程序,完成定时中断任务。

(二)时序分析

1. 预分频器时序

预分频器的输入时钟为CK_PSC,计数器使能信号(CNT_EN)控制计数器的运行状态。当计数器使能时,预分频器对输入时钟进行分频处理,分频后的时钟信号(CK_CNT)作为计数器的时钟输入。预分频器的分频值可通过预分频器控制寄存器设置,但实际生效的分频值存储在缓冲寄存器中。在一个计数周期内,若改变预分频值,该变化将在当前计数周期结束时生效,新的分频值将在下一个计数周期开始时被加载到缓冲寄存器中。预分频器的计数频率与分频值之间的关系为:CK_CNT = CK_PSC / (PSC + 1)。

2. 计数器时序

计数器的时钟信号(CK_CNT)由预分频器输出,其频率取决于预分频器的分频值。计数器在时钟信号的驱动下不断自增,当计数值达到自动重装寄存器中的目标值时,计数器溢出,产生更新事件和更新中断标志位(UIF)。计数器溢出频率的计算公式为:CK_CNT_OV = CK_CNT / (ARR + 1) = CK_PSC / (PSC + 1) / (ARR + 1)。为了防止在计数过程中更改目标值导致错误,计数器也采用了缓冲寄存器机制。当自动重装寄存器的值发生变化时,新的值将在下一个计数周期开始时被加载到缓冲寄存器中,从而确保计数器的正常运行。

计数器无预装时序

计数器有预装时序

五、RCC时钟数

RCC(复位和时钟控制)模块是STM32微控制器的时钟管理核心,负责配置系统时钟源(如内部HSI或外部HSE晶振)、PLL倍频、总线分频以及外设时钟使能。通过合理设置PLL参数(如PLLM/PLLN/PLLP)和分频系数,可将输入时钟倍频至目标频率(如72MHz),并分配给AHB、APB1/APB2等总线,确保CPU、内存及外设(如USART、SPI)在最佳频率下运行。开发时需参考芯片手册的时钟树结构,使用寄存器直接配置或STM32CubeMX工具生成代码,避免超频并兼顾功耗与性能平衡。

六、输出比较简介

在定时器模块中,输出比较(OC)功能通过对比计数器(CNT)与捕获/比较寄存器(CCR)的数值,实现对输出信号电平的精确控制。该功能支持多种操作模式,包括强制置位、清零及电平翻转,常用于生成具有特定频率和占空比的PWM信号。

在STM32系列微控制器中,每个通用定时器和高级定时器均配置了4个独立的输出比较通道。值得注意的是,高级定时器的前3个通道还集成了互补输出和死区时间插入功能,使其特别适用于电机控制等需要高可靠性的应用场景

七、PWM简介

PWM(Pulse Width Modulation)是一种通过调节脉冲信号的占空比来控制平均电压或功率输出的技术。其核心原理是利用定时器周期性地比较计数器(CNT)与比较寄存器(CCR)的值,从而动态调整输出信号的高电平与低电平持续时间。当CNT小于CCR时输出高电平,反之则输出低电平,通过改变CCR的数值即可精确调节占空比。PWM广泛应用于电机调速、LED亮度调节、开关电源等领域,因其高效的能量控制能力和简单的实现方式而成为嵌入式系统中的关键技术。在STM32等微控制器中,PWM通常通过定时器的输出比较(OC)或PWM模式实现,支持多通道独立输出,并可结合高级功能(如死区控制、互补输出)满足复杂应用需求。

PWM参数:

频率 = 1 / TS            占空比 = TON / TS           分辨率 = 占空比变化步距

PWM基本结构

PWM(脉冲宽度调制)是一种在模拟电路和数字电路中广泛应用的技术,用于控制模拟电路的功率输出。PWM技术通过改变脉冲信号的占空比来调节输出功率,从而实现对负载的控制。下面是PWM基本结构的描述:

1. 时基单元:这是PWM生成器的核心部分,负责产生基本的时钟信号。它通常包括:

   预分频器(PSC):用于对输入时钟信号进行分频,以提供不同频率的时钟给计数器。

   计数器(CNT):一个向上计数的寄存器,从0计数到预设的最大值(由ARR决定),然后重置为0,开始新的计数周期。

   自动重装寄存器(ARR):存储计数器的最大计数值,当计数器达到这个值时,会触发一个事件(如中断或输出信号的翻转)。

2. 运行控制:用于启动或停止计数器的运行。

3. 捕获/比较寄存器(CCR):用于捕获计数器的当前值或与计数器值进行比较。在PWM应用中,CCR用于设定PWM信号的占空比。当计数器的值与CCR的值相匹配时,输出信号的状态会改变。

4. 输出比较单元:包含多个输出比较通道,每个通道都可以独立地与计数器的值进行比较,并根据比较结果生成相应的PWM信号。

5. 极性选择输出使能(REF):根据计数器的值与CCR的值的比较结果,决定输出信号的极性(有效或无效电平)。

6. GPIO(通用输入输出):PWM信号最终通过GPIO引脚输出到外部设备。

在图中,右侧的波形图展示了PWM信号的生成过程。蓝色波形代表计数器的值,随着时间线性增加直到达到ARR值,然后重置为0。红色和绿色波形代表不同的CCR值,当计数器的值超过CCR值时,输出信号(橙色波形)的状态会改变。通过调整CCR值,可以改变PWM信号的占空比,从而控制输出功率。

PWM的参数计算

八、输出比较通道(高级)与通用

输出比较模式

九、结论

STM32微控制器的定时器功能强大且灵活多样,通过合理配置和使用不同类型的定时器,可以满足嵌入式系统开发中的各种时间控制与任务调度需求。本文详细介绍了STM32定时器的基本功能、结构组成以及工作原理,并结合时序图对关键运行机制进行了深入分析。希望本文的研究能够为嵌入式系统开发人员提供有价值的参考,帮助他们在实际项目中更好地应用STM32定时器,提高系统的性能与可靠性。

相关文章:

  • 6.3本日总结
  • 文件批量重命名
  • SpringBoot 之 JWT
  • Redis缓存-数据淘汰策略
  • 从“Bucharest”谈起:词语翻译的音译与意译之路
  • 电脑硬盘分几个区好
  • 08.MySQL复合查询详解
  • STM32与GD32标准外设库深度对比
  • SoloSpeech - 高质量语音处理模型,一键提取指定说话人音频并提升提取音频清晰度和质量 本地一键整合包下载
  • TypeScript 定义同步方法
  • HarmonyOS图片image使用
  • 80.在服务器部署LLAVA模型
  • 【Doris基础】Apache Doris中的Fragment概念详解
  • Agno:使用简单代码构建AI智能体
  • JS语法笔记
  • 风云二号G星:我国气象监测的“天眼”
  • 小巧实用,Windows文件夹着色软件推荐
  • MySQL强化关键_019_索引优化
  • [Linux] MySQL源码编译安装
  • MySQL计算精度计算加减乘除取模方式和方法总计
  • 网站建设流程图viso/9个广州seo推广神技
  • 信息技术用C 做登录界面网站 csdn/合肥网站优化推广方案
  • 企业网站制作费做分录/sem代运营费用
  • 手机微网站与微官网/国外网站seo免费
  • 全功能多国语言企业网站/广告宣传方式有哪些
  • 携程网网站做的怎么样/windows10优化工具