上一篇:STM32-(21):NVIC中断 | 下一篇:STM32-(23):定时器TIM(实验) |
---|
STM32系列的CPU,有多达8个定时器。
1、 其中TIM1和TIM8是能够产生三对PWM互补输出的髙级定时器,常用于三相电机的驱动,它们的时钟由APB2的输出产生。
2、 其它6个为普通定时器,时钟由APB1的输出产生。
定时器的作用:
1、 定时功能
2、 计数功能
3、 输入捕获
4、 匹配输出
5、 PWM咏冲波
通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。
它适用于多种场合,包括测量输入信号的脉冲长度(输入采集)或者产生输出波形(输
出比较和PWM)。
定时器是完全独立的,而且没有互相共享任何资源。
定时器还可以与定时器形成级联,组建更大的定时范围。
NOTE:只要你使用默认的库配置方式配置时钟为72M,无论TIM1还是TIMX, ft们的计数器频率都是72M。
通用TIMx定时器特性包括:
简析:
先简要分为5个部分分析,第1部分是时钟源选择,主要是输出CK_PSC这个时钟信号;第2部分是时基单元,进行计数等等;第3部分是输入捕获的;第4部分是比较输出的;第5部分是输入到输出的一些处理的寄存器。
第1部分:首先为了得到CK_PSC这个时钟,但是它有很多种途径,可以通过内部时钟(CK_INT);可以通过外部时钟源(TIMx_ETR);可以通过ITR0-ITR3等其他定时器;可以通过输入通道TIMx_CH1等提供的 TI1F_ED、TI1FP1、TI2FP2等等;其中 从模式控制器可以对这几路时钟源进行选择与控制。这样就可以得到CK_PSC
第2部分:首先得到CK_PSC这个信号,然后预分频得到CK_CNT,计数器(CNT)前面有+、-,表示可以向上计数也可以向下计数,当计数发生溢出,就会自动重载
第3部分:输入捕获,本来有四个通道,这里只显示两个通道(CH1/CH2)。输入捕获是对通道内的信号进行脉宽测量,可以捕获一个上升沿和一个下降沿,这里就可以得到高电平的脉冲时间;也可以捕获一个上升沿和下一个上升沿,这里就得到了整个周期的时间;大概流程是信号先进来,TI1是选择开关,首先进行输入滤波和边沿检测,假如经 TIFP1 通过 IC1 进行预分频(当不需要进行预分频把这个设置为0),然后产生 IC1PS 信号,然后 捕获/比较1寄存器就会把这个值保存下来。比如我们需要测量的是周期,当第一次上升沿捕获,会有一个值存入寄存器,第二次上升沿捕获,又会有一个值存入寄存器,这两个值相减就是脉冲的周期。
**通道1输入部分详解:**关于输入捕获中滤波的作用,滤波可以屏蔽一些高频的干扰,通过硬件屏蔽干扰,可以节省软件的开销和代码量,滤波器可以起到硬件消抖的作用,消抖稳定性很好。消抖完之后会进入边沿检测的模块可以判断是上升沿还是下降沿,CC1P可以决定这个 TI1FP1这个开关是上边沿检测还是下边沿检测。然后通过CC1S[1:0]位设置为 01 来通过这个信号 IC1,ICPS[1:0]来设定分频值,当不需要分频,设置为1,当分频为2,当脉冲来两次,IC1PS 信号才输出一个。
通道1输出部分详解:当CNT的值大于或者等于一个值(比较寄存器设定值)的时候,进入输出模式控制寄存器,模式的选择由OC1M[2:0]这两个位来设定的,然后出来一个信号 oc1ref,然后往后走,一个取反,一个不作处理,究竟选择哪一个,需要通过CC1P来设置,如果设置为0,则不处理,设置为1,则选择反向,再往后就是一个输出允许的电路(通过CC1E控制),通过外部的引脚输出一个电平。举个例子,当比较寄存器的值设定为5,当CNT等于5,就会产生一个信号,然后输出高电平,然后再相等,我就输出低电平,再相等,又输出高电平,这样就可以产生连续的脉冲。
首先有个时钟分频因子,是由寄存器的CKD[1:0]控制,比如设置为00,表示周期相同,则频率也相同;比如设置为01,表示数字滤波器的周期是定时器时钟的2倍,则频率是其1/2,若时钟频率为72Mhz,则 fDTS 频率为36Mhz.。采样频率 = 1/2 fDTS(这个公式待查阅资料再得知为什么),则采样频率为18Mhz。此时再设定采样次数,假设设定为6次,当采样第一次的时候是高电平,采样第二次的时候是高电平,当采样第六次的时候,还是高电平,则表示这个波的频率小于3Mhz,若第六次为低电平,则表示这个波的频率大于3Mhz,可以选择滤除高于3Mhz的波。采样频率在通道1输入部分的寄存器 ICF[3:0]中设定,若设定为6,采样6次,若波还是存在,则通过。
**滤波的基本道理:**如上图,TI1信号输入,采样次数设置为4,当采样到第4次,这个波突然变成了低电平,则这个波的频率比较高,认为是一个干扰(干扰一般都是瞬间的,频率很高),过滤掉,即 TI1F 一直保持低电平;若采样到第4次,仍为高电平,则认为这是一个正常波, TI1F会产生一个上升沿,因为在采样的时候占用的四个采样周期,故在这个波恢复到低电平的时候再弥补四个采样周期的时间,所以这个波在TI1F上只是相位退后了一点点,而长度,采集到的周期都是一样的。滤波之后输出TI1F,然后进入边沿检测,是高电平触发还是低电平触发,输出TI1FP1,然后进入预分频,如果预分频设为1,则直接过去,如果预分频设为2,则当检测到两次这个电平才产生IC1PS信号,由这个信号触发捕获/比较1寄存器,这个寄存器马上会将计数器的值装载下来,这样就得到了稍微准确的捕获时间。这个捕获时间在这里延后了4个采样周期。
滤波的好处:外部的信号经过这么一个滤波,可以节省软件的开销,硬件滤波更加稳定。硬件滤波实际上就是 消抖、去抖了。
那内部时钟(TIMXCLK)是怎么来的?
定时器的时钟不是直接来自APB1或APB2,而是来自于输入为APB1或APB2的一个倍频器。
APB1不但要为TIM2-7提供时钟,而且还要为其他外设提供时钟;设置这个倍频器可以在保证其他外设使用较低时钟频率时,TIM2-7仍能得到较高的时钟频率。即通过倍频器可以得到更高的频率。
每个定时器(比如TM1/TM2等等)都有四个通道(CH1—CH4),并分配了默认的引脚。例如
外部时钟源模式1
当TIMx_SMCR寄存器中的SMS=111时,次模式被选中。计数器可以在选定的输入上的每个上升沿或下降沿计数。
例如,要配置向上计数器在T12输入端的上升沿汁数,使用下列步骤:
TIM 2- TIM 5可以由向上计数、向下计数、向上向下双向计数。
向上计数模式中,计数器从0计数到自动加载值( TIMx_ARR 计数器内容),然后重新从0开始计数并且产生一个计数器溢出事件。当TIMx _CR1寄存器中的 DIR 位为低的时候执行向上计数。
在向下模式中,计数器从自动装入的值( TIMx_ARR )开始向下计数到0,然后从自动装入的值重新开始,并产生一个计数向下溢出事件。当 TIMx_CR1寄存器的 DIR 位为高时执行向下计数。
而中央对齐模式(向上/向下计数)是计数器从0开始计数到自动装入的值,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数。当 TIMx_CR1寄存器中的 CMS 位不为00时为中央对齐模式。(双向计数其实就是从0加到n,然后再从n减到0,再从0加到n,如此循环)
在向上计数模式中,计数器从0计数到自动加载值(TIMx_ARR计数器的内容),然后重新从0开始计数并产生一个计数器溢出事件。
比如,当 自动加载值 TIMx_ARR=0x36
CK_INT 表示内部时钟
CNT_EN 拉高表示使能允许计数
从 CK_CNT 看应该是上升沿计数
COUNTER REGISTER 开始计数时候的值是31,到了36,会重新从0开始
当计数到了自动加载值,会产生溢出、更新事件、中断信号标志位
注:分频因子为1表示没有分频,来一次脉冲,计数一次
注:分频因子不为1表示分频了,这里为2表示来两次脉冲,计数一次。
在向下计数模式中,计数器从自动加载值(TIMx_ARR计数器的内容)开始向下计数到0,然后从自动装入的值重新开始并且产生一个计数器向下溢出事件。
该寄存器在物理上实际对应着2个寄存器。一个是程序员可以直接操作的,另外一个是程序员看不到的,这个看不到的寄存 器在被叫做影子寄存器。事实上真正起作用的是影子寄存器。
根据TIMx_CR1寄存器中APRE位的设置:APRE=0时,预装载寄存器的内容 可以随时#送到影子寄存器,此时2者是连通的;而APRE=1时,在每一次更 新事件(UEV)时,才把预装在寄存器的内容传送到影子寄存器
上一篇:STM32-(21):NVIC中断 | 下一篇:STM32-(23):定时器TIM(实验) |
---|