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.mzph.cn/news/629446.shtml

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

相关文章

Windows Server 2019配置DNS服务器

正文共&#xff1a;1234 字 31 图&#xff0c;预估阅读时间&#xff1a;1 分钟 我们在给Windows Server添加角色和功能时&#xff0c;会发现有一项“远程桌面服务安装”&#xff0c;它的介绍为“为虚拟桌面基础结构&#xff08;Virtual Desktop Infrastructure&#xff0c;VDI&…

Angular系列教程之MVC模式和MVVM模式

文章目录 MVC模式MVVM模式MVC与MVVM的区别Angular如何实现MVVM模式总结 在讨论Angular的时候&#xff0c;我们经常会听到MVC和MVVM这两种设计模式。这两种模式都是为了将用户界面(UI)和业务逻辑分离&#xff0c;使得代码更易于维护和扩展。在这篇文章中&#xff0c;我们将详细介…

介绍一个强大的免费开源.net反编译工具

dnSpy dnSpy 是一个用C#开发&#xff0c;开源的调试器和.NET 汇编编辑器。 即使您没有任何可用的源代码&#xff0c;也可以使用它来编辑和调试程序&#xff0c;并可以把代码导出成.net工程。

01 SpringBoot3快速入门

本次使用3.0.5版本 SpringBoot整合了之前的一切。 需求&#xff1a;浏览器发送/hello请求&#xff0c;返回"Hello,Spring Boot 3!" 总体开发步骤&#xff1a; 1. 创建Maven工程 2. 添加依赖(springboot父工程依赖 , web启动器依赖) 3. 编写启动引导类(springboot项…

速通——决策树(泰坦尼克号乘客生存预测案例)

一、决策树 1、概述 树中每个内部节点表示一个特征上的判断&#xff0c;每个分支代表一个判断结果的输出&#xff0c;每个叶子节点代表一种分类结果 2、建立过程 1. 特征选择&#xff1a;选取有较强分类能力的特征。 2. 决策树生成&#xff1a;根据选择的特征生成决策树。 3.…

Gazebo的模型下载。

git clone zouxu634866/gazebo_modelshttps://gitee.com/zouxu6348660/gazebo_models.git&#xff0c;并完成路径配置。 &#xff08;本文提供了gitee下载&#xff0c;国外的Github下载较慢。&#xff09;

芯课堂 | 华芯微特MCU在PCB板级设计中对ISP引脚的应用

1.应用描述 ISP&#xff08;In System Programming&#xff09;&#xff0c;在系统编程&#xff0c;使用片内驻留出厂引导程序&#xff08;BootROM&#xff09;配合UART / SPI等外设进行烧录。 华芯微特全系MCU的ISP操作说明&#xff1a;当芯片上电后检测到 ISP 引脚持续 5ms…

LLaMa2 Chat gpt 大模型本地部署初体验

一直想在自己电脑或者测试环境随便找台服务器尝试部署一下“大模型”&#xff0c;但“大模型”对于内存和GPU的要求令人望而却步&#xff0c;层出不穷的各种术语也令人困惑&#xff0c;有点难以下手。 经过一段时间&#xff0c;在百度千帆大模型平台、讯飞星火大模型平台、魔搭…

【数据结构】哈希表详解,举例说明 java中的 HashMap、HashTable及其区别

一、哈希表&#xff08;Hash Table&#xff09;简介&#xff1a; 哈希表是一种数据结构&#xff0c;用于实现字典或映射等抽象数据类型。它通过把关键字映射到表中的一个位置来实现快速的数据检索。哈希表的基本思想是利用哈希函数将关键字映射到数组的索引位置上&#xff0c;…

【征服redis2】redis的事务与lua

1.redis事务介绍 在前面我们介绍了redis的几种典型数据结构和应用&#xff0c;本文我们来看一下redis的事务问题。事务也是数据库的重要主题&#xff0c;熟悉关系型数据库的读者应该对事务比较了解&#xff0c;简单地说&#xff0c;事务表示一组动作&#xff0c;要么全部执行&…

esp32-idf Eclipse Log日志打印demo

Log日志打印demo 1、代码例程 esp32-S2 芯片 / Eclipse软件 开发环境 #include <stdio.h> #include "sdkconfig.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "esp_system.h" #include "esp_…

【linux】终端发送网络请求与文件下载

发送网络请求 linux的终端中发送网络请求可以使用curl命令。 语法&#xff1a; curl [url] 但是他返回的是html代码&#xff0c;因为在终端中&#xff0c;他无法像浏览器中一样把访问到的html代码渲染成我们访问的页面&#xff0c;所以我们只能拿到他的源码。 访问CSDN - 专…

1.机器学习-机器学习算法分类概述

机器学习-机器学习算法分类概述 个人简介机器学习算法分类&#xff1a;监督学习、无监督学习、强化学习一监督学习1. 监督学习分类任务举例&#xff1a;1.1 特征1.2 标签 二无监督学习1.关键特点2.应用示例3.常见的无监督学习算法 三强化学习1.定义2.示例场景 四机器学习开发流…

数据结构之串|数组|广义表

串 数组 广义表 总结&#xff1a;

【加强版】小学数学出题,加减乘除混合运算,支持自定义数字,一键打印

在线预览&#xff1a;在线HTML代码预览和运行工具 - UU在线工具 复制下面代码后到该地址预览即可 注意&#xff1a;在线预览不能打印。如需打印&#xff0c;在电脑本地上新建文本文档&#xff0c;粘贴代码后保存&#xff0c;然后把文件后缀改为.html运行&#xff0c;出题点击…

【CF闯关练习】—— 1400分(C. Make Good、B. Applejack and Storages)

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;cf闯关练习 &#x1f48c;其他专栏&#xff1a; &#x1f534;每日一题 &#x1f7e1; C跬步积累 &#x1f7e2; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0c;缓…

isis小实验

要求: 1.合理规划level1-2 2.r1访问r5走r6且走上面 3.全网可达 个人理解:以重发布的视角:is-level level1即L1可以看做rip,L2可以看做OSPF,L1-2可以看作是既要rip又要OSPF,优点:isis只用在每个路由器上宣告一次 缺点:isis需要每个接口上输isis enable 1(序号)特点:L1-2会自动下…

vue流程图

效果图 组件 <template><div class="processBox" v-if="list.length"><div class="childs"><div class="child" v-for="(item,index) in list" :key="item.id +-child-+index"><div…

第10章_多线程扩展练习(Thread类中的方法,线程创建,线程通信)

文章目录 第10章_多线程扩展练习Thread类中的方法1、新年倒计时 线程创建2、奇偶数输出3、强行加塞4、奇偶数打印5、龟兔赛跑友谊赛6、龟兔赛跑冠军赛7、多人过山洞8、奇偶数连续打印9、字母连续打印 线程通信10、奇偶数交替打印11、银行账户-112、银行账户-2 第10章_多线程扩展…

协方差矩阵自适应调整的进化策略(CMA-ES)

关于CMA-ES&#xff0c;其中 CMA 为协方差矩阵自适应(Covariance Matrix Adaptation)&#xff0c;而进化策略&#xff08;Evolution strategies, ES&#xff09;是一种无梯度随机优化算法。CMA-ES 是一种随机或随机化方法&#xff0c;用于非线性、非凸函数的实参数&#xff08;…