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在下图标记的位置:

        橙色框里就是输出比较电路,红色框里是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的应用场景必须要是一个惯性系统。

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

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

        PWM中几个关键参数:

        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通用定时器的输出比较部分电路

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

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

        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高级定时器的输出比较部分电路

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

四、输出模式控制器

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

        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基本结构

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参数计算

  • 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的一些内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/239883.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GAMES104-现代游戏引擎:从入门到实践 - 物理引擎课程笔记汇总

文章目录 0 入门资料1 物理引擎基本概念Actor & shapesRigid body dynamicsCollision DetectionCollision Resolution 应用与实践Character controllerRagdoll 0 入门资料 GAMES104-现代游戏引擎&#xff1a;从入门到实践_课程视频_bilibiliGAMES104官方账号 - 知乎课程主页…

OceanBase基础概念

文章目录 基本概念介绍集群、Zone和OB ServerRootService总控服务多租户机制&#xff0c;资源隔离&#xff0c;数据隔离资源池创建租户检查集群状态查看系统日志 基本概念介绍 集群、Zone和OB Server 一个集群由多个Zone组成&#xff0c;给集群内的一批机器打上同一个tag&#…

综合评价 | 基于EW、EW-BP、EW-ELM的地区发展水平综合评价(Matlab)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 综合评价 | 基于EW、EW-BP、EW-ELM的地区发展水平综合评价&#xff08;Matlab&#xff09; 程序设计 完整程序和数据获取方式&#xff1a;私信博主回复基于EW、EW-BP、EW-ELM的地区发展水平综合评价&#xff08;Matl…

ZooKeeper 实战(五) Curator实现分布式锁

文章目录 ZooKeeper 实战(五) Curator实现分布式锁1.简介1.1.分布式锁概念1.2.Curator 分布式锁的实现方式1.3.分布式锁接口 2.准备工作3.分布式可重入锁3.1.锁对象3.2.非重入式抢占锁测试代码输出日志 3.3.重入式抢占锁测试代码输出日志 4.分布式非可重入锁4.1.锁对象4.2.重入…

【MySQL】数据处理之增删改

文章目录 一、增加&#xff08;插入&#xff09;INSERT INTO...VALUES(...,...)VALUES的方式添加情况一&#xff1a;为表的所有字段按默认顺序插入数据情况二&#xff1a;为表的指定字段插入数据情况三&#xff1a;同时插入多条记录 将查询结果插入到表中 二、修改&#xff08;…

CTF CRYPTO 密码学-3

题目名称&#xff1a;反编译 题目描述&#xff1a; 分析 题目给出一个pyc后缀的文件&#xff0c;需要使用uncompyle6模块去还原成py文件 uncompyle6简介 uncompyle6 是一个 Python 反编译器&#xff0c;它能够将 Python 字节码&#xff08;.pyc 文件&#xff09;转换回源代码&…

数据结构之栈和队列

数据结构之栈和队列 1、栈1.1、栈的定义及基本运算1.2、栈的存储结构 2、队列2.1、队列的定义及基本运算2.2、队列的存储结构2.3、队列的应用 数据结构是程序设计的重要基础&#xff0c;它所讨论的内容和技术对从事软件项目的开发有重要作用。学习数据结构要达到的目标是学会从…

2024华数杯国际赛A题16页完整思路+五小问py代码数据集+后续高质量参考论文

这回带大家体验一下2024“华数杯”国际大学生数学建模竞赛呀&#xff01; 完整内容获取在文末 此题涉及到放射性废水从日本排放到海洋中的扩散问题&#xff0c;以及对环境和人类健康的潜在影响。 ## 问题重述 1. **预测污染范围和程度&#xff1a;** - 使用数学模型描述放射性…

LeetCode 104. 二叉树的最大深度

104. 二叉树的最大深度 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3示例 2&#xff1a; 输入&#xff1…

多维时序 | Matlab实现GRO-CNN-BiLSTM-Attention淘金算法优化卷积神经网络-双向长短期记忆网络结合注意力机制多变量时间序列预测

多维时序 | Matlab实现GRO-CNN-BiLSTM-Attention淘金算法优化卷积神经网络-双向长短期记忆网络结合注意力机制多变量时间序列预测 目录 多维时序 | Matlab实现GRO-CNN-BiLSTM-Attention淘金算法优化卷积神经网络-双向长短期记忆网络结合注意力机制多变量时间序列预测效果一览基…

RabbitMQ交换机(1)

1.交换机Exchange RabbitMQ消息传递模型的核心思想是: 生产者生产的消息从不会直接发送到队列。实际上&#xff0c;通常生产者甚至都不知道这些消息传递传递到了哪些队列中。 相反&#xff0c;生产者只能将消息发送到交换机(exchange)&#xff0c;交换机工作的内容非常简单&am…

Python中如何简化if...else...语句

一、引言 我们通常在Python中采用if...else..语句对结果进行判断&#xff0c;根据条件来返回不同的结果&#xff0c;如下面的例子。这段代码是一个简单的Python代码片段&#xff0c;让用户输入姓名并将其赋值给变量user_input。我们能不能把这几行代码进行简化&#xff0c;优化…

【数据结构】红黑树

导语 之前平衡二叉树讲解中&#xff0c;可以了解到AVL在插入或删除频繁的场景&#xff0c;需要消耗大量的时间来调整&#xff0c;使树重新满足平衡条件。红黑树就此作出优化&#xff0c;在查询速率和平衡调整中寻找平衡&#xff0c;放宽了树的平衡条件&#xff0c;从而可以用于…

Java实现海南旅游景点推荐系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户端2.2 管理员端 三、系统展示四、核心代码4.1 随机景点推荐4.2 景点评价4.3 协同推荐算法4.4 网站登录4.5 查询景点美食 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的海南旅游推荐系统&#xff…

YUM仓库和NFS共享

目录 一、yum仓库 1. yum仓库介绍 1.1 简介 1.2 实现过程 1.3 实现安装服务 2. yum配置文件及命令 2.1 yum配置文件 2.1.1 yum主配置文件 2.1.2 仓库设置文件 2.1.3 日志文件 2.2 yum命令详解 2.2.1 查询 2.2.2 yum安装升级 2.2.3 软件卸载 3. 搭建仓库的方式 …

使用 Categraf 采集 Nginx 指标

1. 前言 工作中需要监控 Nginx 的指标&#xff0c;选用的指标采集器是 Categraf&#xff0c;特此记录下&#xff0c;以备后用。 此文档并未详细记录详细的操作细节&#xff0c;只记录了大概的操作步骤&#xff0c;仅供参考。 2. 采集基础指标 2.1. 暴露 Nginx 自带的指标采…

SparkSQL——DataFrame

DataFrame Dataframe 是什么 DataFrame 是 SparkSQL中一个表示关系型数据库中 表的函数式抽象, 其作用是让 Spark处理大规模结构化数据的时候更加容易. 一般 DataFrame可以处理结构化的数据, 或者是半结构化的数据, 因为这两类数据中都可以获取到 Schema信息. 也就是说 DataFra…

Kafka系列(四)

本文接kafka三&#xff0c;代码实践kafkaStream的应用&#xff0c;用来完成流式计算。 kafkastream 关于流式计算也就是实时处理&#xff0c;无时间概念边界的处理一些数据。想要更有性价比地和java程序进行结合&#xff0c;因此了解了kafka。但是本人阅读了kafka地官网&#…

【每日一题】2744. 最大字符串配对数目-2024.1.17

题目&#xff1a; 2744. 最大字符串配对数目 给你一个下标从 0 开始的数组 words &#xff0c;数组中包含 互不相同 的字符串。 如果字符串 words[i] 与字符串 words[j] 满足以下条件&#xff0c;我们称它们可以匹配&#xff1a; 字符串 words[i] 等于 words[j] 的反转字符…

Pytorch各种Dropout层应用于详解

目录 torch框架Dropout functions详解 dropout 用途 用法 使用技巧 参数 数学理论公式 代码示例 alpha_dropout 用途 用法 使用技巧 参数 数学理论公式 代码示例 feature_alpha_dropout 用途 用法 使用技巧 参数 数学理论 代码示例 dropout1d 用途 用…