STM32 TIM输出比较、PWM波形

这篇具有很好参考价值的文章主要介绍了STM32 TIM输出比较、PWM波形。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

单片机学习!

目录

一、输出比较简介

二、PWM简介

三、输出比较通道

3.1通用定时器的输出比较部分电路

3.2高级定时器的输出比较部分电路

四、输出模式控制器

五、PWM基本结构

六、PWM参数计算

总结


前言

        文章讲述STM32定时器的输出比较功能,它主要用来输出PWM波形,而PWM波形是驱动电机的必要条件。PWM本质是利用面积等效原理来改变波形的有效值。


一、输出比较简介

  • OC(Output Compare)输出比较。
  • 输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形。
  • 每个高级定时器和通用定时器都拥有4个输出比较通道。
  • 高级定时器的前3个通道额外拥有死区生成和互补输出的功能。

        库函数中英文缩写:OC(Output Compare)输出比较、IC(Input Capture)输入捕获、CC(Capture/Compare)输入捕获和输出比较的单元。

        输出比较模块最主要的功能就是输出一定频率和占空比的PWM波形。CNT和CCR在下图标记的位置:

STM32 TIM输出比较、PWM波形,STM32,stm32,嵌入式硬件,单片机

        橙色框里就是输出比较电路,红色框里是CNT(时基单元里的计数器),CCR(捕获/比较寄存器)。

        捕获/比较寄存器是输入捕获和输出比较共用的。当使用输入捕获时,它就是捕获寄存器;当使用输出比较时,它就是比较寄存器。输出比较时,电路会比较CNT和CCR的值,CNT计数自增,CCR是给定的一个值,当CNT大于CCR、小于CCR或者等于CCR时,这里输出就会对应的置1、置0、置1、置0……这样就可以输出一个电平不断跳变的PWM波形。

二、PWM简介

  • PWM(Pulse Width Modulation)脉冲宽度调制。
  • 在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速等领域。
  • PWM参数:    频率 = 1 / TS           占空比 = TON / TS          分辨率 = 占空比变化步距

        PWM波形是一个数字输出信号,是由高低电平组成的一个连续变化的电平信号。

        使用PWM波形是用来等效的实现一个模拟信号的输出。如控制LED亮度大小,就是让LED不断点亮、熄灭、点亮、熄灭,当点亮和熄灭的频率足够大时,LED就不会闪烁了,而是呈现出一个中等亮度。控制点亮和熄灭的时间比例就可以使LED呈现不同的亮度级别。电机调速也是同样的原理,用很快的频率给电机通电、断电、通电、断电,那么电机的速度就能维持在一个中等速度。

        PWM的应用场景必须要是一个惯性系统。

STM32 TIM输出比较、PWM波形,STM32,stm32,嵌入式硬件,单片机

        由上图可以看出,高低电平跳变的数字信号是可以等效为中间紫色虚线所表示的模拟量的,

  • 当Ud电平时间长一点,-Ud电平时间短一点的时候,等效的模拟量就偏向于上面;
  • 当Ud电平时间短一点,-Ud电平时间长一点的时候,等效的模拟量就偏向于下面;

        PWM中几个关键参数:

STM32 TIM输出比较、PWM波形,STM32,stm32,嵌入式硬件,单片机

        TS代表一个高低电平变换周期的时间,周期的倒数就是频率,频率 = 1 / TS,PWM的频率越快,那它等效的模拟信号就约平稳,不过同时性能开销就越大,一般来说PWM的频率在几千到几十千赫兹就足够快了。

        占空比 = TON / TS,TON是高电平的时间,TS是一个周期的时间。占空比就是高电平时间相对于整个周期时间的比例,一般用百分比来表示。

  • 占空比为50%,那就是高低电平时间相等的方波;
  • 占空比为20%,那就是高电平占20%,低电平占80%;
  • 占空比100%,那就是一直是高电平;
  • 占空比0%,那就是一直是低电平。

        占空比决定了PWM等效出来的模拟电压的大小。占空比越大,等效的模拟电压就越趋近于高电平;占空比越小,等效的模拟电压就越趋近于低电平;这个等效关系一般来说是线性的,如高电平5V,低电平0V,50%占空比就等效于中间电压,为2.5V;20%占空比就等效于1/5处的电压,就是1V。

        分辨率 = 占空比变化步距,比如有的占空比只能是1%、2%、3%等等这样以1%的步距跳变,那它的分辨率就是1%;如果可以1.1%、1.2%、1.3%等等这样以0.1%的步距跳变,那它的分辨率就是0.1%。这个分辨率就是占空比变化的精细程度,分辨率的大小需看实际项目需求。高频率和高分辨率的设计对硬件电路要求也较高。

        使用PWM波形,就可以在数字系统等效输出模拟量。可以实现LED控制亮度、电机控速等功能。

三、输出比较通道

3.1通用定时器的输出比较部分电路

STM32 TIM输出比较、PWM波形,STM32,stm32,嵌入式硬件,单片机

        上图通用定时器框图中红色框起来的部分对应的就是下图。由黄色框中CNT和CCR比较的结果传入红色框的输出比较电路,最后通过蓝色框中TIM_CH1输出到GPIO引脚上。下方三个是同样的通道,分别输出到CH2、CH3、CH4。

STM32 TIM输出比较、PWM波形,STM32,stm32,嵌入式硬件,单片机

        这部分电路是通用定时器的输出比较部分电路,高级定时器的第四个通道的结构和这部分电路也是基本一样的。

        1.由CNT计数器和CCR1第一路的捕获/比较寄存器比较得出CNT>CCR1或CNT=CCR1时,就会给输出模式控制器传一个信号,输出模式控制器就会改变它输出OC1ref的高低电平。ref是reference的缩写,意思是参考信号。(ETRF输入是定时器的一个小功能)

        2.ref信号可以前往主模式控制器,可以将ref映射到主模式的TRGO输出。也可以前往极性选择,这个是ref的主要去向,给寄存器CC1P写0,信号就走上方支路,信号电平不翻转,就是信号经过不改变;给寄存器CC1P写1,信号就走下方支路,信号通过一个非门取反。信号经过高低电平反转。极性选择就是选择是否要把高低电平反转。

        3.极性选择过后就是输出使能电路,选择要不要输出。最后就是OC1引脚,OC1引脚就是CH1通道的引脚。在引脚定义表可查具体对应哪个GPIO口。

3.2高级定时器的输出比较部分电路

STM32 TIM输出比较、PWM波形,STM32,stm32,嵌入式硬件,单片机

        高级定时器的输出比较部分电路比通用定时器的输出比较部分电路多了红色方框框起来的部分。OC1和OC1N就是两个互补的输出端口,一个输出高电平,另一个就输出低电平。死区发生器则用于互补输出切换时延时一小段时间。

四、输出模式控制器

        输出模式控制器的输入是CNT和CCR的大小关系,输出的是REF的高低电平,可以选择多种模式控制REF输出。这个模式可以通过CC1M寄存器进行配置。具体操作可参考下表:

STM32 TIM输出比较、PWM波形,STM32,stm32,嵌入式硬件,单片机

        1.冻结模式,CNT=CCR时,REF保持为原状态。实际上CNT和CCR就相当于没有用,所以也可以理解为CNT和CCR无效,REF保持为原状态。这个模式比较简单,它根本就不管CNT和CCR谁大谁小,直接REF保持不变,维持上一个状态就行了。冻结模式可用于正在输出PWM波时,突然需要暂停一会儿输出时。冻结模式被切换后,输出就暂停了。并且高低电平也维持为暂停时刻的状态保持不变。

        2.有效电平和无效电平一般是高级定时器里面的,与关断、刹车这些功能配合表述的,描述比较严谨,所以叫有效电平和无效电平。为了方便理解,可以直接认为置有效电平就是置高电平、置无效电平就是置低电平。这三个模式都是当CNT与CCR值相等时,执行操作。

  • 匹配时置有效电平模式:CNT=CCR时,REF置有效电平,也就是高电平。
  • 匹配时置无效电平模式:CNT=CCR时,REF置无效电平,也就是低电平。
  • 匹配时电平翻转模式:CNT=CCR时,电平翻转。

以上这三个模式就可以用做波形输出了。

匹配时电平翻转模式和匹配时置无效电平模式都只是一次性置高电平或置低电平后就结束。这两个模式不适合输出连续变化的波形。如果是定时输出一次性的信号,则可以选择这两个模式。

匹配时电平翻转模式可以方便地输出一个频率可调,占空比始终为50%的PWM波形。当设置CCR为0时,CNT每次更新清0时,就会产生一次CNT=CCR的事件,这就会导致输出电平翻转一次。每更新两次,输出为一个周期。并且高电平和低电平的时间是始终相等的,也就是占空比始终为50%。当改变定时器更新频率时,输出波形的频率也会随之改变。输出波形的频率=更新频率/2,因为更新两次输出才为一个周期。这就是匹配时电平翻转模式的用途。

        3.强制为无效电平和强制为有效电平模式是CNT与CCR无效,REF强制为无效电平或者强制为有效电平。这两个模式和冻结模式有些相似,如果需要暂停波形输出,并且在暂停期间保持低电平或者高电平。就可以设置这两个强制输出电平模式。

        4.PWM模式1和PWM模式2是非常重要的两个模式。它们可以用于输出频率和占空比都可调的PWM波形,是项目中主要使用的模式。

  • PWM模式1中计数器为向上计数的情况下,CNT<CCR时,REF置有效电平,CNT≥CCR时,REF置无效电平;向下计数的情况下,CNT>CCR时,REF置无效电平,CNT≤CCR时,REF置有效电平。
  • PWM模式2中计数器为向上计数的情况下,CNT<CCR时,REF置无效电平,CNT≥CCR时,REF置有效电平;向下计数的情况下,CNT>CCR时,REF置有效电平,CNT≤CCR时,REF置无效电平。

PWM模式1和PWM模式2的区别就是输出高低电平反过来了,所以PWM模式2实际上就是PWM模式1输出的取反。改变PWM模式1和PWM模式2,就只是改变了REF电平的极性而已。从上图输出比较通道中可以看到,REF输出之后还有一个极性的配置(图中2部分),所以使用PWM模式1的正极性和PWM模式2的反极性最终的输出是一样的。所以下文介绍其中一种模式:使用PWM模式1的向上计数的模式输出频率和占空比都可调的PWM波形。

五、PWM基本结构

STM32 TIM输出比较、PWM波形,STM32,stm32,嵌入式硬件,单片机

1.时基单元,配置好时基单元,CNT计数器就可以开始不断地自增运行。

2.运行控制。

3.输出比较单元,总共有4路。输出比较单元的最开始是CCR捕获/比较寄存器,CCR可自己设定,CNT不断自增运行,同时CNT和CCR在不断进行比较。CCR之后输出模式控制器以PWM模式1中CNT<CCR时,REF置有效电平,CNT≥CCR时,REF置无效电平为执行逻辑。

        图中右上角的第一个折线图中,蓝色线是CNT的值,黄色线是ARR的值。蓝线CNT从0开始自增,一直增到ARR也就是99之后清0,继续自增。在这个过程中,设置的红色线是CCR,图中CCR设置为30,执行图中PWM模式1的向上计数的逻辑。就得到右上角第二个方波图中绿色线表示的输出波形

        右上角两个图对照来看,最开始CNT<CCR时,置高电平;当CNTCCR时,变为低电平;当CNT溢出清0后,CNT又小于CCR,置高电平;之后CNTCCR时,置低电平。这样一直持续下去,REF的电平就会不断变化,并且它的占空比是受CCR值的调控的。如果CCR的值设置高一些,输出的占空比就变大;CCR的值设置的低一些,输出的占空比就变小。这就是PWM模式的工作流程。这里的REF就是一个频率可调,占空比也可调的PWM波形。

        REF最终在经过极性选择,输出使能,最终通向GPIO口。最终完成PWM波形的输出。

六、PWM参数计算

STM32 TIM输出比较、PWM波形,STM32,stm32,嵌入式硬件,单片机

  • PWM频率:    Freq = CK_PSC / (PSC + 1) / (ARR + 1)
  • PWM占空比:    Duty = CCR / (ARR + 1)
  • PWM分辨率:    Reso = 1 / (ARR + 1)

        PWM频率:PWM的一个周期始终对应着计数器CNT的一个溢出更新周期,所以PWM的频率就等于计数器CNT的更新频率,PWM频率的计算公式就是计数器的更新频率公式。

        PWM占空比:一个周期中CNT是从0一直加到ARR,图中ARR是99,那CNT总共就是计了100个数。PWM波高电平时,CNT是从0一直加到CCR,图中CCR是30,在等于30的瞬间,PWM波形就已经跳变为低电平了。CNT从0到29是高电平,总共是计30个数的时间。所以占空比就是30/100=30%,对应公式 Duty = CCR / (ARR + 1)。

        PWM分辨率:分辨率也就是占空比变化的步距。从图中可以看出,CCR的值因该设置在0到ARR+1这个范围里,CCR=ARR+1时,占空比就正好是100%;若 CCR>(ARR+1) 时,占空比始终是100%,这样设置没有意义。所以CCR的变化范围取决于ARR的值,ARR越大,CCR的范围就越大,对应的分辨率就越大,总结公式为 Reso = 1 / (ARR + 1),公式里定义的分辨率是占空比最小的变化步距,所以这个值越小越好;也可以定义CCR的范围为分辨率,这个值越大越好。这两种定义都是对应占空比变化的越细腻越好。


总结

        以上就是今天要讲的内容,本文仅仅简单介绍了STM32输出比较和PWM的一些内容。文章来源地址https://www.toymoban.com/news/detail-807588.html

到了这里,关于STM32 TIM输出比较、PWM波形的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 嵌入式系统开发13——STM32输出PWM实现呼吸灯

    本文主要介绍在STM32F103C8T6上,利用定时器输出PWM波形,进而驱动LED实现呼吸灯。 使用TIM3和TIM4,分别输出一个PWM波形,PWM的占空比随时间变化,去驱动你外接的一个LED以及最小开发板上已焊接的LED(固定接在 PC13 GPIO端口),实现2个 LED呼吸灯的效果。 脉冲宽度调制(PWM) ,是

    2023年04月08日
    浏览(67)
  • STM32外设之TIM定时器使用及输出比较模式PWM生成,PWM频率和占空比计算,文末有固件库TIM驱动文件的函数讲解

    过来人的经验分享: TIM定时器在我们学习STM32的过程中是一个重要且稍微有点难度的外设了,就拿从学校里做的项目来说用到的也是一些基本的外设配置和传感器等等。TIM作为外设中稍微有点难度的外设相当关键,学好TIM,对以后学习单片机开发也有很大帮助。 定时器是stm3

    2024年02月07日
    浏览(34)
  • STM32-TIM3-PWM实现不同占空比波形

    目录 硬件准备 PWM介绍 产生PWM方法  TIM3模块介绍  代码部分 详细步骤 总结 首先,需要准备一块带有STM32芯片的开发板,例如STM32F103C8T6或STM32F407VET6。连接开发板到电脑上,并使用Keil,IAR等软件进行编程。本文章用的是Keil软件。 PWM(Pulse Width Modulation)即脉冲宽度调制,在具

    2024年02月03日
    浏览(32)
  • (STM32)TIM输出比较

    TIM输出比较(OC): 主要功能输出PWM波形,PWM波形是驱动电机的必要条件,所以信息TIM输出比较就等于学习PWM CNT:计数器,计数自增,CCR:捕获比较寄存器,程序员给定的一个值 当CNT,大于、小于、大于CCR时,输出就会置0,置1,置0....,一个不断跳变的pwm的波形 每个高级定时器

    2024年02月05日
    浏览(49)
  • STM32--TIM定时中断&TIM输出比较

    目录 一.TIM中断 1.TIM简介 2.定时器类型 1)基本定时器 2)通用定时器 3)高级定时器  3.时基单元   二.TIM输出比较 1.输出比较简介OC 2.PWM 1.PWM简介 2.PWM结构  3.参数计算  3.输出比较通道(通用) 1)输出模式控制器 2)至主模式控制器 3)极性选择 4)输出使能电路 5)OCx——

    2024年04月09日
    浏览(28)
  • STM32:TIM定时器输出比较(OC)

    一、输出比较简介 1、输出比较 OC(Output Comapre)输出比较 输出比较可以通过比较CNT(时基单元)和CCR(捕获单元)寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率的占空比的PWM波形(CC是捕获/比较的意思,R是Register,寄存器的意思),这个捕获

    2024年02月05日
    浏览(45)
  • STM32学习笔记(六)丨TIM定时器及其应用(输入捕获丨测量PWM波形的频率和占空比)

    ​  本次课程采用单片机型号为STM32F103C8T6。 ​  课程链接:江科大自化协 STM32入门教程   往期笔记链接:   STM32学习笔记(一)丨建立工程丨GPIO 通用输入输出   STM32学习笔记(二)丨STM32程序调试丨OLED的使用   STM32学习笔记(三)丨中断系统丨EXTI外部中断

    2023年04月19日
    浏览(45)
  • 【嵌入式学习-STM32F103-TIM-编码器接口】

    编码器测速相当于测频法测正交脉冲的频率,CNT计次,每隔一段时间取一次计次。高级,它是带方向的计次。 通过定时器的编码器接口来实现自动计次。之前的代码是通过触发外部中断,然后在中断函数里手动进行计次。使用编码器接口的好处就是节约软件资源。对于频繁执

    2024年02月01日
    浏览(39)
  • STM32单片机(六)TIM定时器 -> 第三节:TIM输出比较

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月09日
    浏览(54)
  • 【嵌入式学习-STM32F103-TIM-定时中断和外部时钟】

    1、定时器基本定时,定一个时间,然后让定时器每隔一段时间产生一个中断,来实现每隔一个固定时间执行一段程序的目的,比如要做一个时钟、秒表或者使用一些程序算法 2、定时器输出比较的功能,输出比较这个模块最常见的用途是产生PWM波形,用于驱动电机等设备,使

    2024年02月12日
    浏览(55)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包