STM32学习笔记(六)丨TIM定时器及其应用(输入捕获丨测量PWM波形的频率和占空比)
本篇文章包含的内容
- 一、输入捕获
- 1.1 输入捕获简介
- 1.2 输入捕获通道的工作原理
- 1.3 输入捕获的主从触发模式
- 1.4 输入捕获和PWMI结构
- 二、频率的测量方法
- 2.1 测频法
- 2.2 测周法
- 2.3 测频法和测周法的误差分析
- 三、输入捕获测量PWM波形的频率和占空比
- 3.1 输入捕获相关库函数
- 3.2 输入捕获IC测量频率
- 3.3 PWMI模式同时测量频率和占空比
- 3.4 测周法测量频率性能评估
本次课程采用单片机型号为STM32F103C8T6。
课程链接:江科大自化协 STM32入门教程
往期笔记链接:
STM32学习笔记(一)丨建立工程丨GPIO 通用输入输出
STM32学习笔记(二)丨STM32程序调试丨OLED的使用
STM32学习笔记(三)丨中断系统丨EXTI外部中断
STM32学习笔记(四)丨TIM定时器及其应用(定时中断、内外时钟源选择)
STM32学习笔记(五)丨TIM定时器及其应用(输出比较丨PWM驱动呼吸灯、舵机、直流电机)
如果上一篇笔记的内容为史诗级副本,本篇文章的内容我愿称之为传说级副本(三)。
一、输入捕获
1.1 输入捕获简介
输入捕获,即Input Capture,英文缩写为IC。输入捕获模式下,当通道输入引脚出现指定电平跳变(可以定义为上升沿、下降沿)时,当前CNT的值将被锁存到CCR中(这就是“捕获”的含义),可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数。在这里,“脉冲间隔、电平持续时间”和“频率、占空比”是互相对应的关系。每个高级定时器和通用定时器都拥有4各输入捕获通道,且二者没有区别。
输入捕获模块可以配置为PWMI(PWM输入)模式和主从触发模式。PWMI模式是专门用来同时测量PWM波形的频率和占空比的。主从触发模式可以实现对频率或占空比的硬件的全自动测量,不占用软件资源,可以极大地减轻CPU的压力。
在定时器中,输入捕获和输出比较共用同一个引脚和同一个CCR,故在使用时,对同一个TIM定时器而言,输入捕获和输出比较功能只能使用一个,不能同时使用。
1.2 输入捕获通道的工作原理
接下来分析输入捕获通道的工作原理。输入信号首先进入输入滤波器和边沿检测器。这个滤波器和定时器的外部时钟模式2的输入滤波原理类似,它可以避免一些高频的毛刺信号造成误触发。在博主的文章STM32学习笔记(四)丨TIM定时器及其应用(定时中断、内外时钟源选择)中有较为详细的说明:
在定时器的外部信号输入引脚一般都有一个滤波器来消除信号的抖动干扰,它的工作原理是:在一个固定的时钟频率fff下进行采样,如果连续NNN个采样点都是相同的电平,就代表输入信号稳定了,就将采样值输出到下一级电路;如果NNN个采样点不全都相同,就说明信号有抖动,这时保持上一次的输出,或直接输出低电平。 这样就能保证输出信号在一定程度上的滤波。这里的采样频率fff和采样点数NNN都是滤波器的参数,频率越低,采样点数越多,滤波效果就越好,不过相应的信号延迟就越大。
在实际应用时,通过改变TIMx_CCMR1寄存器的IC1F位就可以配置不同的滤波频率。
边沿检测部分和外部中断类似,可以选择高电平触发,或者低电平触发。当触发指定的电平时,边沿检测电路就会触发后续的电路执行动作。
在CH1,CH2,CH3之间跨接了一个异或门,它实际上是为三相无刷电机服务的。无刷电机拥有三个霍尔传感器检测转子的位置,可以根据转子的位置进行换相,通过将异或门的三个输入端与三个霍尔传感器相连接,此时的定时器就称为无刷电机的接口定时器,取驱动换相电路工作。这部分内容暂时不涉及,仅作了解即可。
CH3、CH4的输入滤波和边沿检测电路的结构与CH1、CH2类似。图中用一个方框代表了输入滤波和边沿检测,但实际上这里有两套相同的电路结构。CH1通道的一个输入滤波和边沿检测接到TI1FP1(Timer Input 1 Filter Polarity 1,可连接到IC1),另一个输入滤波和边沿检测接到TI1FP2(Timer Input 1 Filter Polarity 2,可连接到IC2);同样,CH2通道的一个输入滤波和边沿检测接到TI2FP1(可连接到IC1),另一个输入滤波和边沿检测接到TI1FP2(可连接到IC2)。这样“交叉连接”的目的主要有以下两点:
- 可以灵活切换后续捕获电路的输入:同一个捕获电路可以选择捕获CH1的输入信号,也可以选择捕获CH2的输入信号
- 可以把一个引脚的输入同时映射到两个捕获单元:PWMI模式的经典结构。
此外,TRC信号也可以作为捕获信号的输入。这个设计同样是为无刷电机的驱动设计的。了解即可,这里暂时不涉及。
信号进入捕获单元后,经过一个预分频器就可以控制CCR对CNT进行捕获操作了。捕获信号同时会触发一个事件,这个事件会在状态寄存器置标志位,同时也可以触发中断。
输入捕获通道1的详细框图如下所示:
1.3 输入捕获的主从触发模式
CCR对CNT进行捕获之后,需要对CNT进行一次清0操作,这样每次捕获得到的值才是测周法(下文有讲解)两个上升沿(下降沿)之间的时间间隔。这个清0操作,就需要用到主从触发模式来自动完成。由输入捕获通道1的详细框图可得:经过滤波和极性选择的TI1FP1信号和经过滤波的边沿信号TI1F_ED都可以通向从模式控制器,之后便可以通过硬件电路自动完成CNT的清0操作。
主从触发模式,即主模式、从模式和触发源选择三个功能的简称。主模式可以将定时器内部的信号映射到TRGO引脚,用于触发其他外设的操作;从模式可以接收其他外设或自身外设的一些信号,用于触发自己的一些操作(定时器的运行);触发源选择,即选择从模式的触发信号源功能,也可以认为它是从模式的一部分。
在从模式下,可以通过触发源选择功能选择一个信号产生TRGI信号,之后去触发从模式。关于主从模式的详细说明可以参见手册:
1.4 输入捕获和PWMI结构
下图是输出捕获模式测频率的基本结构图。下图清晰地展示了输入捕获模式测量频率的过程,同时也是编程的逻辑基础。在这里我们只使用了一个通道,所以它只能测量频率。
首先,配置时基单元,启动寄存器,则CNT就会在时钟驱动下不断自增。我们使用CNT来计数,间接实现计时的功能。经过预分频后的时钟频率,就是测周法的标准频率fcf_cfc。之后,GPIO输入一个待测的方波信号,经过TI1FP1为上升沿触发,之后数据选择器选择直连通道,分频器选择不分频。当TI1FP1出现上升沿之后,CNT的值就会被CCR1捕获;同时触发源选择模块选择TI1FP1为触发信号,从模式选择复位操作。则TI1FP1信号完成两个操作:捕获CNT的值到CCR1中、清零CNT。当然这里存在先后顺序,先进行捕获后进行清0;或者存在非阻塞的同时转移。当电路不断工作是,CCR1中的值始终是最新一个周期的计数值,即测周法的计次数 NNN。
这里需要注意以下两点:
- CNT的计数值是有上限的。由于ARR最大为65535,故CNT最大也只能计65535个数。如果信号频率太低,CNT的计数值可能会溢出。
- 从模式的触发源选择中有TI1FP1和TI2FP2,但是没有TI3和TI4的信号。所以如果要使用从模式自从清零CNT,就必须使用CH1或CH2作为输入。对于CH3和CH4,就只能开启捕获中断,在中断中手动清0了(程序会处于频繁中断的状态,比较占用软件资源)。
通过将一个引脚的信号映射到两个输入捕获单元,将TI1FP2配置为下降沿触发,就可以同时测量PWM波形的频率和占空比了,如下图所示,占空比:
Duty=CCR2CCR1×100%Duty = \frac {CCR_2} {CCR_1} \times 100 \% Duty=CCR1CCR2×100%
二、频率的测量方法
对于测频率而言,STM32只能测量数字信号(高电平3.3V,低电平0V)。如果要测量模拟信号(例如一个正弦波)的频率,还需要在测量之前使信号通过一个信号预处理电路。可以使用继承运放搭接一个比较器,也可以使信号通过一个施密特触发器,将模拟信号转换为数字信号(保证二者频率相同),之后再输入给STM32测量信号频率。如果需要测量的信号电压较高,则还需要考虑隔离的问题,使用隔离放大器、电压互感器等元件,隔离高压端和低压端,保证电路的安全。
2.1 测频法
测频法的测试方法是:在闸门时间 TTT 内,对上升沿(也可以是下降沿)计次,得到 NNN,则测量频率:
STM32学习笔记(六)丨TIM定时器及其应用(输入捕获丨测量PWM波形的频率和占空比)相关推荐
- STM32学习笔记(四)TIM定时器运用之输入捕获
一.输入捕获 1.1输入捕获简介 简称IC(Input Capture),输入捕获可用于测量信号波形(例如PWM波形)的频率.占空比.脉冲间隔.电平持续时间等参数,也可以触发捕获中断. 输入捕获的过程 ...
- STM32固件库(标准外设库)入门学习 第六章TIM定时器(一)
STM32固件库(标准外设库)入门学习 第六章TIM定时器(一) 文章目录 STM32固件库(标准外设库)入门学习 第六章TIM定时器(一) 前言 一.定时器类型 1 基本定时器 2 通用定时器 3 ...
- STM32单片机(六)TIM定时器 -> 第一节:TIM定时中断
❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分:建议先学习51单片机,其是STM32等高级单片机的基础:这样再学习STM32时才能融会贯通. ☀️ 专栏适 ...
- STM32单片机(六)TIM定时器 -> 第五节:TIM输入捕获
❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分:建议先学习51单片机,其是STM32等高级单片机的基础:这样再学习STM32时才能融会贯通. ☀️ 专栏适 ...
- STM32单片机(六)TIM定时器 -> 第三节:TIM输出比较
❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分:建议先学习51单片机,其是STM32等高级单片机的基础:这样再学习STM32时才能融会贯通. ☀️ 专栏适 ...
- STM32学习笔记(八)丨ADC模数转换器(ADC单、双通道转换)
本篇文章包含的内容 一.ADC 模数转换器 1.1 ADC简介 1.2 逐次逼近型ADC工作原理 1.3 STM32中的ADC基本结构 1.4 STM32中ADC的输入通道 1.5 STM32中的AD ...
- STM32学习笔记(四)丨TIM定时器及其应用(定时中断、内外时钟源选择)
本篇文章包含的内容 一.TIM 定时器 1.1 TIM 定时器简介 1.2 TIM 定时器类型及其工作原理简介 1.2.1 基本定时器工作原理及其结构 1.2.2 通用定时器工作原理及其结构 1.2. ...
- STM32学习笔记(10)——高级定时器TIM
前排提示:本笔记参考了野火PPT的大部分内容.本人初学定时器,倍感冗杂,有错烦请指出,谢谢! STM32学习笔记(10)--高级定时器TIM 一.时钟源 1. 内部时钟源 2. 外部时钟模式 1 (1 ...
- STM32学习笔记(三)丨中断系统丨EXTI外部中断(对射式红外传感器计次、旋转编码器计次)
本篇文章包含的内容 一.中断系统 1.1 中断的定义 1.2 中断优先级 1.3 中断的嵌套 1.4 STM32中的中断系统 1.4.1 STM32的中断资源 1.4.2 嵌套中断向量控制器 NVIC ...
最新文章
- esxi 6.x 密码复杂度要求_还在为账号密码多而烦恼?
- libsvm中svmtrain的参数和返回值
- shell的执行流控制
- 春节您“抢票”到手了吗,如果没,请进来看看!
- linux中的信号3——alarm、pause函数
- Git之原有基础开发新功能
- avue下拉框中属性可以显示,但不能选中
- Windows 10企业批量部署实战之刷新并添加启动映像
- [Extjs 4] 类系统
- 步骤mysql_mysql 安装 等步骤(一)
- 孙鑫老师的帮助文档 MSDN Library 2001January 下载地址
- 使用微软官方的Winpe系统安装操作系统(包括下载Winpe、制作U盘启动工具、安装操作系统)
- 顺序工作流 状态机工作流 数据岛工作流 选择 .
- Win10喇叭图标出现红叉提示“未安装任何音频输出设备“
- 风变编程,让小白也能轻松学会!
- 程序员的专属表情包,看了吓一跳
- 2022北航敏捷软件工程 第二次博客作业
- html5调用视频代码,HTML 5 视频使用(示例代码)
- android pmem内存,android内存管理-ION/PMEM【转】
- goland 左右分屏_vim分屏功能 - 米扑博客
热门文章
- Linux配置Wifi模块
- java知识点博客园_Java知识点总结1
- Microsoft Excel、Word 或 PowerPoint 文件因文件关联不正确而无法打开
- linux 开放连续端口,CentOS/Linux 开放80、8080端口或者开放某个端口
- http://jingyan.baidu.com/article/0eb457e5208cbb03f0a9054c.html
- Android输入法方法,Android的输入法系统框架原理
- mysql 对多列进行排序 分组_Mysql 对多列进行排序
- EMC文件服务器,emc存储服务器
- 计算机专业毕业设计致谢,计算机专业毕业论文致谢范文
- FFmpeg的下载和安装