STM32-TIM输入捕获(十四)

TIM输入捕获

输入捕获部分总共有两个程序,第一个是输入捕获模式测频率,第二个是 PWM 模式测频率和占空比。

先看一下第一个程序啊,输入捕获模式测频率。

在这里为了测量外部信号的频率,我们现在有个信号源,产生一个频率和占空比可调的波形啊。但是考虑到大家可能没有信号发生器,所以我这里就借用了一下上一小节的代码。先用 PWM 模块在 PA0 端口输出一个频率和占空比可调的波形。然后我们本节的代码,测量波形的输入口是 PA6。所以我们直接用一根线把 PA0 和 PA6 连在一起,这样就能测量自己 PWM 模块产生波形的频率了。另外如果你有示波器的话,可以把探头也接在这根线上。验证看一下频率值到底对不对啊。如果你还有信号发生器的话,那就不需要 PA0 自己输出波形了,直接用信号发生器产生可调的测试信号,接在 PA6 端口,这样就行了。那现在看一下当前代码的现象啊,目前我们 OLED 上显示的频率是 1000 赫兹,这说明通过 PA6 的测试, PA 0 输出的是一个 1 千赫兹的信号。

然后返回程序来看一下,这两行是 PA0 输出频率和占空比的参数调节部分,目前预分频系数是 720,带入右边的公式啊,简单计算一下,频率就是 1 千赫兹。我们加大预分频,比如扩大 10 倍,现在输出频率应该是 100 赫兹啊,再试一下。

第二个程序PWMI模式(PWM输入模式)测频率占空比

两目参数配置,当前频率是 72 兆除以分频系数 720 除以 100 等于 1000 赫兹,占空比是 CCR 50 除以 100 等于 50%。

我们修改一下,比如分频系数给个 3600,频率就是 200 赫兹, CCR 给个 20,占空比就是 20%。试一下。下载。目前看到测量得到的频率 200 赫兹,占空比 20%,没问题啊。大家可以自行更改参数尝试啊,或者用信号发生器进行测试,都是可以的。

它的英文缩写是 ICR, 全称是 Input Capture, 直译就是输入捕获的意思。对应前面我们这个定时器的整体结构图啊,输入捕获就是这左边一部分电路,那右边就是我们之前讲过的输出比较部分。4 个输入捕获和输出比较通道共用 4 个 CCR 计数器,另外它们的 CH1 到 CH4 4 个通道的引脚啊也是共用的。所以对于同一个定时器,输入捕获和输出比较只能使用其中一个,不能同时使用啊。然后我们回过来看一下输入捕获的描述。这一句话就是对整个输入捕获的一个概括描述啊。

先看一下之前输出比较的部分,我们也有一句话的概括描述,就是输出比较可以通过比较 CNT 与 CCR 计数器值的关系,来对输出电平进行置一、置零或翻转的操作,用于输出一定频率和占空比的 PWM 波形

也就是这里啊, CNT 和 CCR 是作为比较电路的输入,根据 CNT 和 CCR 的大小关系,从通道引脚输出高低电平,这是输出比较的执行逻辑。

然后来到输入捕获的部分,我们看一下,输入捕获模式下,当通道输入引脚出现指定电平跳变时,这个指定的电平跳变就是上升沿或者下降沿哈,可以通过程序配置,发生电平跳变的瞬间,输入捕获电路会干些啥呢?会让当前 CNT 的值锁存到 CCR 中。锁存到 CCR 的意思就是把当前 CNT 的值读出来,写入到 CCR 中去啊。这就是功能描述,就是输入引脚电平跳变的瞬间,把 CNT 的值锁存到 CCR 中。

对应这个定时器的结构图案就是这 4 个是边缘信号输入引脚,一旦有边缘,比如说上升沿,那这一块输入滤波和边缘检测电路就会检测到这个上升沿,让输入捕获电路产生动作。所以这一块的作用和外部中断差不多啊,都是检测电平跳变,然后执行动作。只不过外部中断执行的动作是向 CPU 申请中断,而这里电路执行的动作就是控制后续电路,让当前 CNT 的值锁存到 CCR 计程器中。

对比一下输出比较啊,就是输出比较引脚是输出端口,输入捕获引脚是输入端口,输出比较是根据 CNT 和 CCR 的大小关系来执行输出动作,输入捕获是接收到输入信号,执行 CNT 所存到 CCR 的动作。这就是输入捕获的执行流程和与输出比较的区别。

那设计这样一个输入捕获电路有什么用呢?就是测量 PWM 波形的频率、占空比、脉冲间隔、电平持续时间等参数。这个脉冲间隔啊,实际上和频率是差不多的意思,电平持续时间和占空比差不多啊,这些参数通过这个输入捕获电路都可以很方便的进行测量。如何配置输入捕获电路来测量这些参数,这就是本小节接下来的任务啊。

好我们先接着看下一条,每个高级定时器和通用定时器都拥有四个输入捕获通道,这里通用定时器总共有四个通道,上面高级定时器也有四个通道啊。

输入捕获电路,通用定时器和高级定时器没有区别,都是一样的。然后基本定时器这里没有输入捕获的功能哈,这就是输入捕获电路的资源分布情况,了解一下。

然后是下面一条,可配置为 PWM I模式,同时测量频率和占空比。这个 PWM 模式就是 PWM 的输入模式,是专门为测量 PWM 频率和占空比设计的。

可配合主从触发模式,实现硬件全自动测量。

我觉得后面这两个功能 PWM I模式和主从触发模式设计的非常巧妙啊,把这两个功能结合起来,测量频率占空比就是硬件全自动执行,软件不需要进行任何干预,也不需要进中断,需要测量的时候直接读取 CCR 寄存器就行了,使用非常方便啊,而且极大的减轻了软件的压力

那既然要测量 PWM 信号的频率等参数

为了测量频率,我们有两种方法可以选择。第一种是测频法,执行流程是在闸门时间 T 内对上升沿计数。这里计数下降沿也可以啊,只是极性不同而已,都是一样的。之后为了方便,我们统一以上升沿为一个周期的开始进行描述哈。那计数得到 N, 则待测信号的频率就是 Fx 等于 N 除 T。

测频法的图是说明哈,就是这个图的左边。比如我们要测量这一块信号的频率,那就可以制定一个闸门时间 T, 通常设置为 1 秒。在 1 秒时间内对信号上升沿计数,从零开始计,每来一个上升沿计数加一。每来一个上升沿其实就是来了一个周期的信号啊,所以在 1 秒时间内来了多少个周期,那它的频率就是多少赫兹。这符合频率的基本定义哈,频率的定义就是 1 秒内出现了多少个重复的周期那频率就是多少赫兹。所以我们在一秒的闸门时间内对上升沿计数计数多少频率值就是多少赫兹,这个没问题啊。所以这种直接按频率定义来进行测量的方法就叫测频法。另外这个闸门时间也不是必须为一秒啊,也可以两秒的闸门时间,那计数值除 2 就是频率。也可以 0.5 秒的闸门时间,计数乘 2 也是频率啊。所以得到这个公式,计数 N 除闸门时间 T 就是频率。当 T 等于一秒时,计数 N 就直接是频率。这个好理解吧?这就是测频法。

然后我们继续看下一个方法,测周法。执行流程是,两个上升沿内,以标准频率 FCG 计数,得到 N,则频率 FX 等于 FC 除 N。测周法的基本原理就是,周期的倒数就是频率啊 。我们如果能测出一个周期的时间,再取个倒数,不就是频率了吗?所以我们看一下这右边的测周法图示说明。我们捕获信号的两个上升沿,然后测量一下这之间持续的时间就行了。但实际上我们并没有一个精度无穷大的秒表来测量时间哈。测量时间的方法实际上也是定时器计时。我们使用一个已知的标准频率 FC 的计时时钟来驱动计数器,从一个上升沿开始计,计数器从零开始一直计到下一个上升沿停止。计一个数的时间是 FC 分之一,计 N 个数时间就是 FC 分之 N, FC 分之 N 就是周期,再取个倒数就得到了公式。 FX 等于 FC 除以 N 这个应该也好理解吧,这就是测周法。

测频法和测周法都是测量频率的重要方法,那这两种方法都有什么区别呢?实际情况使用哪种方法更好呢?我们来一一分析。

首先测频法适合测量高频信号,测周法适合测量低频信号。这个从图里也可以看出来哈。

测频法在闸门时间内最好要多出现一些上升沿,计数数量多一些,这样有助于减小误差哈。假如你定了 1 秒的闸门时间,结果信号频率非常低。1 秒内时间才只有寥寥无几的几个上升沿,甚至一个上升沿都没有,那你总不能认为频率是 0 吧?在计次 N 很少时,误差会非常大。所以测评法要求信号频率要稍微高一些

那对于测周法就要求信号频率低一些了,低频信号周期比较长,计次就会比较多,有助于减小误差哈。否则的话,比如标准频率 FC 为 1 兆赫兹,待测信号频率太高,比如待测信号 500 千赫兹,那在一个周期内只能记一两个数啊,如果待测信号再高一些,甚至一个数也记不那总不能认为频率无穷大了,所以测周法需要待测信号频率低一些

然后是测频法测量结果更新的慢些 ,数值相对稳定。测周法更新的快,数据跳变也非常快 。看一下,测频法测量的是在闸门时间内的多个周期,所以它自带一个均值滤波。如果在闸门时间内波形频率有变化,那得到的其实是这一段时间的平均频率哈。如果闸门时间选为 1 秒,那么每隔 1 秒才能得到一次结果。所以测频法结果更新慢,测量结果是一段时间间的平均值,值比较平滑。反观测周法,它只测量一个周期就能出一次结果,所以出结果的速度取决于待测信号的频率。一般而言,待测信号都是几百几千赫兹,所以一般情况下,测周法结果更新更快。但是由于它只测量一个周期,所以结果值会受噪声的影响,波动比较大。这就是这两种方法的基本特征对比哈。

然后刚才我们说了,高频适合使用测频法,低频适合使用测周法,那多高算高,多低算低呢?这就涉及到中介频率的概念。

中介频率是测频法与测周法误差相等的频率点。我们之前说了,测频法计数和测周法计数,这个计数数量 N 尽量要大一些, N 越大相对误差越小。因为在这些方法中,计数可能会存在正负一误差。比如测频法,在闸门时间内,并不是每个周期信号都是完整的。比如在最后时间里,可能有一个周期刚出现一半,闸门时间就到了,那这只有半个周期,只能舍弃掉,或者当做一整个周期来看。因为计数只有整数,不可能计次 0.5 个数吧。那在这个过程,就会出现多计一个或者少计一个的情况,这就叫做正负一误差。

另外在测周法这里也有啊,标准频率 FC 计次,在最后时刻有可能像这样,一个数刚数到一半,计时就结束了, 那这半个数也只能舍弃或者按一整个数来算,这里也会出现正负一误差。所以说正负一误差是这两种方法都固有的误差,要想减小正负一误差的影响,就只能尽量多记一些数。当计次 N 比较大时,正负一对 N 的影响就会很小。

所以总结就是, N 越大,正负一误差对我们的影响越小。那当有一个频率,测频法和测周法计次的 N 相同,就说明误差相同,这不就是中介频率了吗?所以这个公式, FM 等于根号 FC 除 T 怎么来的?我们把测频法的 N 提出来,测周法法, N 也提出来,令这两个方法 N 相等,把 FX 解出来,就得到中介频率 FM 等于根号 FC 除 T 了。

对应图上,当待测信号频率小于中介频率时,测周法误差更小,选用测周法更合适。当待测信号频率大于中介频率时,测频法误差更小,选用测频法更合适。

接下来我们用 STM32 来实现这两种方法。首先测频法,这个我们用之前学过的外设就可以实现啊。我们之前写过对射式红外传感器计次,定时器外部时钟,这些代码稍加改进就是测频法。比如对射式红外传感器计次,每来一个上升沿计次加一。那我们再用一个定时器,定一个 1 秒的定时中断。在中断里,每隔 1 秒取下计次值,同时清 0 计次,为下一次做准备啊。这样每次读取的计次值就直接是频率,对应定时器外部时钟的代码也是如此,每隔一秒取下计次,就能实现测频法测量频率的功能了。这部分代码应该也不难实现吧,大家可以自行研究哈

我们本节输入捕获测频率使用的方法是测周法,就是测量两个上升沿之间的时间来进行频率测量的。那接下来我们来研究一下这个电路如何实现测周法。我们先回到这个定时器框图啊,先详细了解一下输入捕获的各部分电路。

我们先回到这个定时器框图啊,先详细了解一下输入捕获的各部分电路。从左到右来看,最左边是四个通道的引脚。参考引脚定义表啊,就能知道这个引脚是复用在了哪个位置。然后引脚进来,这里有一个三输入的异或门,这个异或门的输入接在了通道一二三端口。异或门的执行逻辑是,当三个输入引脚的任何一个有电平翻转时,输出引脚就产生一次电平翻转。之后输出通过数据选择器到达输入捕获通道一,数据选择器如果选择上面一个,那输入补货通道一的输入就是三个引脚的异或值。如果选择下面一个,那异或门就没有用,四个通道各用各的引脚啊。设计这个异或门其实还是为三相无刷电机服务的。

无刷电机有三个霍尔传感器检测转子的位置。可以根据转子的位置进行换向。有了这个异或门就可以在前三个通道接上无刷电机的霍尔传感器,然后这个定时器就作为无刷电机的接口定时器去驱动换向电路工作哈。这个了解一下,我们本节暂时不涉及。

然后继续看,输入信号过来,来到了输入滤波器和边缘检测器。输入滤波器可以对信号进滤波,避免一些高频的毛刺信号误触发哈。然后边缘检测器,这就和外部中断那里是一样的了,可以选择高电平触发或者低电平触发。当出现指定的电平时边缘检测电路就会触发后续电路执行动作。另外这里它其实是设计了两套滤波和边缘检测电路哈。第一套电路经过滤波和极性选择,得到 T I 1F P 1,输入给通道一的后续电路。第二套电路经过另一个滤波和极性选择,得到 T I 1 F P 2,输入给下面通道二的后续电路。同理,下面 T I 2信号进来,也经过两套滤波和极性选择,得到 T I 2F P 1和 T I 2F P 2。其中 T I 2F P 1输给上面, TI2F P2 输入给下面。

在这里两个信号进来,可以选择各走各的,也可以选择进行一个交叉,让 CH2 引脚输入给通道一,或者 CH1 引脚输入给通道二。那这里为什么要进行一个交叉连接呢?

这样做的目的啊,个人认为主要有两个。第一个目的,可以灵活切换后续补货电路的输入。比如你一会想以 CH1 作为输入,一会想以 CH2 作为输入,这样就可以通过这个数据选择器灵活的进行选择。第二个目的啊,也是它交叉的主要目的,就是可以把一个引脚的输入同时映射到两个补货单元。这也是 PWIM 模式的经典结构哈。等会讲 PWIM 模式的时候,你就知道这样设计的好处了。第一个补货通道使用上升沿触发,用来补货周期。第二个通道使用下降沿触发,用来补货占空比。两个通道同时对一个引脚进行补货,就可以同时测量频率和占空比。这就是 PWM 模式。等会再来继续分析哈。

那先回到这里,一个通道灵活切换两个引脚。和两个通道同时捕获一个引脚,这就是这里交叉一下的作用和目的。

同样下面通道三和通道四也是一样的结构啊,可以选择各自独立连接,也可以选择进行交叉。另外这里还有个 T R C 信号,也可以选择作为捕获部分的输入啊,这个 T R C 信号啊是来源于这里的,这样设计也是为了无刷电机的驱动哈,这个知道一下就行了,我们暂时不用。

然后继续往后看,输入信号进行滤波和极性选择后,就来到了预分频器。预分频每个通道各有一个,可以选择对前面的信号进行分频,分频之后的触发信号就可以触发捕获电路进行工作了。每来一个触发信号, CNT 的值就会向 CCR 转运一次,转运的同时会发生一个捕获事件,这个事件会在状态寄存器置标志位,同时也可以产生中断哈。如果需要在捕获的瞬间处理一些事情的话,就可以开启这个捕获中断。这就是整个电路的工作流程。

比如我们可以配置上升沿触发捕获。每来一个上升沿, CNT 转运到 CCR 一次。又因为这个 CNT 计数器是由内部的标准时钟驱动的,所以 CNT 的数值其实就可以用来记录两个上升沿之间的时间间隔。这个时间间隔就是周期,再取个倒数就是测周法测量的频率了。

那回到这里。是不是就和这里的测周法差不多的意思啊?上升沿用于触发输入捕获, CNT 用于计数计时,每来一个上升沿,取下 CNT 的值,自动存在 CCR 里, CCR 捕获到的值就是计数值 N,CNT 的驱动时钟就是 FC,FC 除 N 就得到了待测信号的频率。另外这里还有个细节问题啊,就是每次捕获之后,我们都要把 CNT 清 0 一下,这样下次上升沿再捕获的时候,取出的 CNT 才是两个上升沿的时间间隔。这个在一次捕获后自动将 CNT 清 0 的步骤,我们可以用主从触发模式自动来完成,等会再详细介绍。

好到这里,输入捕获电路的执行流程和测频率的原理,我们应该已经大概的了解了哈。接下来就是执行细节的问题,把电路执行的细节都了解清楚,这样写程序的时候才能得心应手是吧?好那接着看一下这里,这是输入捕获通道一的一个更详细的框图,这个框图就是我们刚才那个框图的一个细化结构哈,基本功能都是一样的,看一下,

引脚进来还是先经过一个滤波器,滤波器的输入是 T I 一,就是 C H 一的引脚哈,输出的 T I 一 F 就是滤波后的信号。 F D T S 是滤波器的采样时钟来源。下面 C C M R 一寄存器里的 I C F 位可以控制滤波器的参数。那这个滤波器具体是怎么工作的呢?可以看一下手册哈,在 C C M R 一寄存器这里。有 ICF 位,描述是这几位定义了 TIE 输入的采样频率及数字滤波长度。数字滤波器是由一个事件计数器组成,它记录到 N 个事件后会产生一个输出的跳变。简单理解这个滤波器工作原理就是以采样频率对输入信号进行采样,当连续 N 个值都为高电平,输出才为高电平,连续 N 个值都为低电平,输出才为低电平。如果你信号出现高频抖动,导致连续采样 N 个值不全都那输出就不会变化,这样就可以达到滤波的效果。采样频率越低,采样个数 N 越大,滤波效果就越好。那下面这些描述啊,就是每个参数对应的采样频率和采样个数。在实际应用中,如果波形噪声比较大,就可以把这个参数设置大一些,这样就可以过滤噪声了。

然后回过来,滤波之后的信号通过边缘检测器,捕获上升沿或者下降沿。用这个 CCR1 寄存器里的 CCEP1 位,就可以选择极性了,最终得到 TIEFP1 触发信号,通过数据选择器进入通道一后续的补货电路。

当然这里实际应该还有一套一样的电路哈,得到 TIEFP2 触发信号,连通到通道二的后续电路,这里并没有画出来。同样通道二有 TIRFP1 连通到通道一的后续,通道二也还有 TIRFP2 连通到通道二的后续。总共是四种连接方式啊。然后经过这里的数据选择器进入后续补货部分电路。

CCE1S 位可以对数据选择器进行选择,之后 ICPS 位可以配置这里的分频器。可以选择不分频、二分频、四分频、八分频。最后, CCE1E 位控制输出使能或失能。如果使能了输出,输入端产生指定边缘信号,经过层层电路啊到达这里,就可以让这里 CNT 的值转运到 CCR 里面来。另外我们刚才说了,每捕获一次 CNT 的值,都要把 CNT 清 0 一下,以便于下一次的捕获。在这里硬件电路就可以在捕获之后自动完成 CNT 的清 0 工作。如何自动清 0 CNT 呢?看下这里,这个 TIEFP1 信号。和 TIE 的边缘信号都可以通向从模式控制器。

比如 TIEFP1 信号的上升沿触发捕获,那通过这里, TIEFP1 还可以同时触发从模式。这个从模式里面就有电路可以自动完成 CNT 的清 0。所以可以看出这个从模式就是完成自动化操作的利器啊。

那接下来我们就来研究下这个主从触发模式。主从触发模式有什么用?如何来完成硬件自动化的操作?我们看一下,主从触发模式这个名字是我自己起的啊,手册里并没有这个描述。主从触发模式就是主模式从模式和触发源选择这三个功能的简称。

其中主模式可以将定时器内部的信号映射到 T R G O 引脚,用于触发别的外设,所以这部分叫做主模式。

从模式呢,就是接收其他外设或者自身外设的一些信号,用于控制自身定时器的运行,也就是被别的信号控制,所以这部分叫从模式。

触发源选择就是选择从模式的触发信号源的,你可以认为它是从模式的一部分哈。触发源选择选择指定的一个信号,得到 T R G I, T R G I 去触发从模式。从模式可以在这个列表里选择一项操作来自动执行。如果想完成我们刚才说的任务,想让 T I E F P 1 信号自动触发 CNT 清 0,那触发源选择就可以选中这里的 T I E F P 1。从模式执行的操作就可以选择执行 Reset 的操作。这样 T I E F P 1 的信号就可以自动触发从模式,从模式自动清 0 CNT, 实现硬件全自动测量了。这就是主从触发模式的用处。

那有关这些信号的具体解释哈,可以看看手册。比如主模式的这些触发源都什么意思,可以看下手册的这里啊,这里就有各种主模式的解释。比如你想实现定时器的极连,就可以选择一个定时器主模式输出更新信号到 TRO, 另一个定时器选择上一个定时器触发从模式,从模式选择执行外部时钟模式 1 的操作,这样就能实现定时器的极连了。

还有其他很多高级的功能啊,都可以用主从触发模式来实现,使用非常灵活。

然后主模式还可以选择复位,使能,比较脉冲,和 4 个 OCR1F 信号作为 TRGO 的输出。具体描述哈,可以看看这里的文字。这些东西不用特别去记哈,知道有这个功能就行了,需要用的时候再来看看。

然后接下来继续往下,这里有从模式触发源的可选信号啊,可以选择这些信号去触发从模式。

触发从模式后可以执行哪些操作呢?继续看从模式选择,可以执行这么多的操作哈,比如我们本节会使用到复位模式,执行的操作就就是选中触发输入的上升沿重新初始化寄存器,是不是就是清 0 CNT 的意思啊?这就是从模式。

那回到 PPT, 总结下来就是这三个图,主模式,触发源选择,从模式。在库函数里也非常简单哈,这三块东西就对应三个函数。数,调用函数给个参数就行了。这些就是主从触发模式的内容。

接下来我们就来最后理一下思路,把之前的东西组合在一起哈,得到这两个图。这两个图也分别对应了我们演示两个代码的逻辑。

先看第一个,输入捕获基本结构。这个结构啊,我们只使用了一个通道,所以它目前只能测量频率。在右上角这里是实际单元,我们把实际单元配置好,启动定时器,那这个 CNT 啊,就会在预分频之后的这个时钟驱动下不断自增。这个 CNT 就是我们测周法用来计数计时的东西。经过预分频之后,这个位置的时钟频率就是驱动 CNT 的标准频率 FC。 这里不难看出哈,标准频率等于 72 兆除以预分频系数。然后下面输入捕获通道一的 GPI O 口,输入一个这样的方波信号,经过滤波器和边缘检测,选择 TIEFP1 为上升沿触发,之后输入选择直连的通道,分频器选择不分频。当 TIEFP1 出现上升沿之后, CNT 的当前计数值转运到 CCR1 里。同时触发源选择,选中 TIFP1 为触发信号,从模式选择复位操作。这样 TIFP1 的上升沿也会通过上面这一路去触发 CNT 清 0。

当然这里会有个先后顺序哈,肯定是得先转运 CNT 的值到 CCR1 里去,再触发从模式给 CNT 清 0,或者是非主色的同时转移, CNT 的值转移到 CCR1,同时 0 转移到 CNT 里面去。总之肯定不会是先清 0 再捕获啊,要不然捕获值肯定都是 0 了。这是这两条路的执行逻辑。

然后看一下左上角的图,在这里信号出现一个上升沿, CCR1 等于 CNT,就是把 CNT 的值转运到 CCR1 里面去,这是输入捕获自动执行的。然后 CNT 等于 0,清 0 寄存器,这是从模式自动执行的。然后在一个周期之内, CNT 在标准时钟的驱动下不断自增,并且由于之前清 0 过了,所以 CNT 就是从上升沿开始,从 0 开始计数,一直加加,直到下一次上升沿来临,然后执行相同的操作, CCR1 R1 等于 CNT, CNT 等于 0。注意,第二次捕获的时候,这个 CNT 是不是就是从这里到这里的计数值啊?这个计数值就自动放在 CCR1 里面。然后下一个周期继续同样的过程, CNT 从零开始自增,直到下一个上升沿,这时 CCR1 刷新为第二个周期的计数值,然后不断重复这个过程。所以当这个电路工作时, CCR1 的值始终保持为最新一个周期的计数值。

这个计数值就是这里的 N,然后 FC 除 N 就是信号的频率。所以当我们想要读取信号的频率时,只需要读取 CCR1 得到 N,再计算 FC 除 N 就行了。当我们不需要读取的时候,整个电路全自动的测量,不需要占用任何软件资源。

然后还有几个注意事项说明一下,首先是这里 CNT 的值是有上限的, AR 一般设置为最大 6535,那 CNT 最大也只能记 6535 个数。如果信号频率太低, CNT 计数值可能会溢出还另外还有就是这个从模式的触发源选择,在这里看到哈,只有 TIEFP1 和 TIEFP2,没有 TIE3 和 TIE4 的信号。所以这里如果想使用从模式自动清 0 CNT, 就只能用通道一和通道二。对于通道三和通道四,就只能开启捕获中断,在中断里手动清 0 了。不过这样程序就会处于频繁中断的状态,比较消耗软件资源哈,这个注意一下。

好,接下来我们继续来看最后一个 PPT, 这里展示的是 PWM 基本结构。这个 PWM I 模式使用了两个通道同时捕获一个引脚,可以同时测量周期和占空比啊。我们来看一下,上面这部分结构和刚才演示的一样,下面这里多了一个通道。首先, TIEFP1 配置上升沿触发,触发捕获和清 0 CNT, 正常的捕获周期哈。这时我们再来一个 TIEFP2,配置为下降沿触发,通过交叉通道去触发通道二的捕获单元。这时会发生什么呢?我们看一下左上角的这个图,最开始上升沿, CCR1 捕获,同时清 0 CNT。之后 CNT 一直加加,然后在下降沿这个时刻触发 CCR2 捕获,所以这时 CCR2 的值就是 CNT 从这里到这里的计数值,就是高电平期间的计数值。 CCR2 捕获并不触发 CNT 清 0,所以 CNT 继续加加,直到下一次上升沿, CCR1 捕获周期, CNT 清 0。这样执行之后, CCR1 就是一整个周期的计数值, CCR2 就是高电期间的计数值。我们用 CCR2 除以 CCR1 是不是就是占空比呢?

这就是 PWM I模式,使用两个通道来捕获频率和占空比的思路。另外这里,你可以两个通道同时捕获第一个引脚的输入,这样通道二的前面这一部分就没有用到啊。

当然也可以配置两个通道同时捕获第二个引脚的输入,这样我们就是使用 TIM2FP1 和 TIM2FP2 这两个引脚,这两个输入可以灵活切换啊。

好到这里,我们本小节的内容差不多就结束了啊,最后大致看一下手册,我们本节的内容在手册里主要对应这两节,输入捕获模式和 PWMI 输入模式。

是 PWMI 模式的例子,一个通道捕获周期,也就是频率啊。一个通道捕获脉宽,也就是占空比。这就是这两种输入捕获的模式。

另外我们本节还讲了主从触发模式,这个在定时器同步这里有介绍。包括使用一个定时器作为另一个定时器的预分频器,就是定时器级联啊。

然后一个定时器使能另一个定时器。

一个定时器启动另一个定时器,等等啊,这些定时器同步的功能比较高级,了解一下就行了。

主要还是理解这个从模式在这里配合输入捕获完成硬件自动化的应用。

相关推荐
cpsss06811 小时前
Freertos的Systick_Handler重定义
单片机·嵌入式硬件
国产电子元器件2 小时前
电流传感器的输出可以直接接示波器吗?
stm32·单片机·嵌入式硬件
zlinear数据采集卡3 小时前
SPI Flash存储电路深度解析:从芯片选型到ZLinear采集卡的实战设计
c语言·嵌入式硬件·自动化·硬件架构
m0_747124535 小时前
单片机 VSCode 开发环境搭建
vscode·单片机·嵌入式硬件
嵌入式小站5 小时前
STM32 零基础可移植教程 21:1602A 并口 4 位模式,先显示 Hello
stm32·单片机·嵌入式硬件
夜月yeyue5 小时前
KCP 与 UDP 可靠传输
linux·网络·单片机·网络协议·udp·php
WIZnet5 小时前
W55RP20-EVB-MKR MicroPython 实战(14):MQTT 协议与 OneNET 平台对接
单片机·网络协议·wiznet
三佛科技-187366133975 小时前
AIP8P005B(SOP14)中微爱芯8位MCU用辉芒微FT60E112A SOP14替代
单片机·嵌入式硬件
西城微科方案开发6 小时前
LED汽车打气泵PCBA方案
单片机·嵌入式硬件