STM32_TIM_定时器
文章目录一、定时器二、基本定时器1、时钟源2、计数器时钟3、计数器4、自动重装载寄存器5、定时时间的计算三、高级定时器1、高级定时器框图2、高级定时器引脚分布3、高级定时器功能图1.时钟源2.控制器3.时基单元4.输入捕获5.输出比较6.断路功能一、定时器STM32 定时器是嵌入式开发中最常用的外设之一功能涵盖定时中断、PWM 输出、输入捕获、输出比较等。二、基本定时器1、时钟源定时器时钟 TIMxCLK即内部时钟 CK_INT经 APB1预分频器后分频提供如果APB1 预分频系数等于 1则频率不变 否则频率乘以 2库函数中 APB1预分频的系数是2即 PCLK136M所以定时器时钟 TIMxCLK36*272M。2、计数器时钟定时器时钟经过 PSC 预分频器之后即 CK_CNT用来驱动计数器计数。PSC是一个16 位的预分频器 可以对定时器时钟 TIMxCLK 进行 1~65536之间的任何一个数进行分频。具体计算方式为CK_CNT TIMxCLK/(PSC1)。3、计数器计数器 CNT 是一个 16 位的计数器只能往上计数最大计数值为65535。当计数达到自动重装载寄存器的时候产生更新事件并清零从头开始计数。4、自动重装载寄存器自动重装载寄存器 ARR 是一个 16位的寄存器这里面装着计数器能计数的最大数值。当计数到这个值的时候如果使能了中断的话定时器就产生溢出中断。5、定时时间的计算定时器的定时时间等于计数器的中断周期乘以中断的次数。计数器在 CK_CNT的驱动下计一个数的时间则是 CK_CLK的倒数等于1/TIMxCLK/(PSC1)产生一次中断的时间则等于1/CK_CLK * ARR。如果在中断服务程序里面设置一个变量time 用来记录中断的次数那么就可以计算出我们需要的定时时间等于1/CK_CLK* (ARR1)*time。三、高级定时器1、高级定时器框图2、高级定时器引脚分布3、高级定时器功能图1.时钟源高级控制定时器有四个时钟源可选内部时钟源CK_INT外部时钟模式1外部输入引脚TIxx1,2,3,4外部时钟模式2外部触发输入ETR内部触发输入(ITRx)内部时钟源(CK_INT)内部时钟CK_INT即来自于芯片内部等于72M一般情况下我们都是使用内部时钟。当从模式控制寄存器TIMx_SMCR的SMS位等于000时则使用内部时钟。外部时钟模式11时钟信号输入引脚当使用外部时钟模式1的时候时钟信号来自于定时器的输入通道总共有4个分别为TI1/2/3/4即TIMx_CH1/2/3/4。具体使用哪一路信号 由TIM_CCMRx的位CCxS[1:0]配置其中CCMR1控制TI1/2CCMR2控制TI3/4。2滤波器如果来自外部的时钟信号的频率过高或者混杂有高频干扰信号的话我们就需要使用滤波器对信号重新采样来达到降频或者去除高频干扰的目的具体的由TIMx_CCMRx的位ICxF[3:0]配置。3边沿检测边沿检测的信号来自于滤波器的输出在成为触发信号之前需要进行边沿检测决定是上升沿有效还是下降沿有效具体的由TIMx_CCER的位CCxP和CCxNP配置。4触发选择当使用外部时钟模式1时触发源有两个一个是滤波后的定时器输入1TI1FP1和滤波后的定时器输入2TI2FP2具体的由TIMxSMCR的位TS[2:0]配置。5从模式选择选定了触发源信号后最后我们需把信号连接到TRGI引脚让触发信号成为外部时钟模式1的输入最终等于CK_PSC然后驱动计数器CNT计数。 具体的配置TIMx_SMCR的位SMS[2:0]为111即可选择外部时钟模式1。6使能计数器经过上面的5个步骤之后最后我们只需使能计数器开始计数外部时钟模式1的配置就算完成。使能计数器由TIMx_CR1的位CEN配置。外部时钟模式21时钟信号输入引脚当使用外部时钟模式2的时候时钟信号来自于定时器的特定输入通道TIMx_ETR只有1个。2外部触发极性来自ETR引脚输入的信号可以选择为上升沿或者下降沿有效具体的由TIMx_SMCR的位ETP配置。3外部触发预分频器由于ETRP的信号的频率不能超过TIMx_CLK72M的1/4当触发信号的频率很高的情况下 就必须使用分频器来降频具体的由 TIMx_SMCR的位ETPS[1:0]配置。4滤波器如果ETRP的信号的频率过高或者混杂有高频干扰信号的话我们就需要使用滤波器对ETRP信号重新采样 来达到降频或者去除高频干扰的目的。具体的由TIMx_SMCR的位ETF[3:0]配置 其中的fDTS是由内部时钟CK_INT分频得到具体的由TIMx_CR1的位CKD[1:0]配置。5从模式选择经过滤波器滤波的信号连接到ETRF引脚后触发信号成为外部时钟模式2的输入最终等于CK_PSC然后驱动计数器CNT计数。具体的配置TIMx_SMCR的位ECE为1即可选择外部时钟模式2。6使能计数器经过上面的5个步骤之后最后我们只需使能计数器开始计数外部时钟模式2的配置就算完成。使能计数器由TIMx_CR1的位CEN配置。内部触发输入内部触发输入是使用一个定时器作为另一个定时器的预分频器。硬件上高级控制定时器和通用定时器在内部连接在一起 可以实现定时器同步或级联。主模式的定时器可以对从模式定时器执行复位、启动、停止或提供时钟。2.控制器高级控制定时器控制器部分包括触发控制器、从模式控制器以及编码器接口。触发控制器用来针对片内外设输出触发信号比如为其它定时器提供时钟和触发DAC/ADC转换。编码器接口专门针对编码器计数而设计。从模式控制器可以控制计数器复位、启动、递增/递减、计数。有关控制器部分只需熟练阅读寄存器描述即可。3.时基单元高级控制定时器时基单元功能包括四个寄存器分别是计数器寄存器(CNT)、预分频器寄存器(PSC)、自动重载寄存器(ARR)和重复计数器寄存器(RCR)。 其中重复计数器RCR是高级定时器独有通用和基本定时器没有。前面三个寄存器都是16位有效TIMx_RCR寄存器是8位有效。1. 预分频器PSC预分频器PSC有一个输入时钟CK_PSC和一个输出时钟CK_CNT。输入时钟CK_PSC就是上面时钟源的输出输出CK_CNT则用来驱动计数器CNT计数。 通过设置预分频器PSC的值可以得到不同的CK_CNT 实际计算为fCK_CNT等于fCK_PSC/(PSC[15:0]1)可以实现1至65536分频。2. 计数器CNT高级控制定时器的计数器有三种计数模式分别为递增计数模式、递减计数模式和递增/递减(中心对齐)计数模式。(1) 递增计数模式下计数器从0开始计数每来一个CK_CNT脉冲计数器就增加1直到计数器的值与自动重载寄存器ARR值相等 然后计数器又从0开始计数并生成计数器上溢事件计数器总是如此循环计数。如果禁用重复计数器在计数器生成上溢事件就马上生成更新事件(UEV) 如果使能重复计数器每生成一次上溢事件重复计数器内容就减1直到重复计数器内容为0时才会生成更新事件。(2) 递减计数模式下计数器从自动重载寄存器ARR值开始计数每来一个CK_CNT脉冲计数器就减1直到计数器值为0 然后计数器又从自动重载寄存器ARR值开始递减计数并生成计数器下溢事件计数器总是如此循环计数。如果禁用重复计数器 在计数器生成下溢事件就马上生成更新事件如果使能重复计数器每生成一次下溢事件重复计数器内容就减1直到重复计数器内容为0时才会生成更新事件。(3) 中心对齐模式下计数器从0开始递增计数直到计数值等于(ARR-1)值生成计数器上溢事件 然后从ARR值开始递减计数直到1生成计数器下溢事件。然后又从0开始计数如此循环。每次发生计数器上溢和下溢事件都会生成更新事件。3. 自动重载寄存器ARR自动重载寄存器ARR用来存放与计数器CNT比较的值如果两个值相等就递减重复计数器。可以通过TIMx_CR1寄存器的ARPE位控制自动重载影子寄存器功能 如果ARPE位置1自动重载影子寄存器有效只有在事件更新时才把TIMx_ARR值赋给影子寄存器。如果ARPE位为0则修改TIMx_ARR值马上有效。4. 重复计数器RCR在基本/通用定时器发生上/下溢事件时直接就生成更新事件但对于高级控制定时器却不是这样高级控制定时器在硬件结构上多出了重复计数器 在定时器发生上溢或下溢事件是递减重复计数器的值只有当重复计数器为0时才会生成更新事件。在发生N1个上溢或下溢事件(N为RCR的值)时产生更新事件。4.输入捕获入捕获可以对输入的信号的上升沿、下降沿或者双边沿进行捕获常用的有测量输入信号的脉宽测量PWM输入信号的频率和占空比这两种。输入捕获的大概的原理就是当捕获到信号的跳变沿的时候把计数器CNT的值锁存到捕获寄存器CCR中把前后两次捕获到的CCR寄存器中的值相减 就可以算出脉宽或者频率。如果捕获的脉宽的时间长度超过你的捕获定时器的周期就会发生溢出这个我们需要做额外的处理。1. 输入通道需要被测量的信号从定时器的外部引脚TIMx_CH1/2/3/4进入通常叫TI1/2/3/4在后面的捕获讲解中对于要被测量的信号我们都以TIx为标准叫法。2. 输入滤波器和边沿检测器当输入的信号存在高频干扰的时候我们需要对输入信号进行滤波即进行重新采样根据采样定律采样的频率必须大于等于两倍的输入信号。 比如输入的信号为1M又存在高频的信号干扰那么此时就很有必要进行滤波我们可以设置采样频率为2M 这样可以在保证采样到有效信号的基础上把高于2M的高频干扰信号过滤掉。滤波器的配置由CR1寄存器的位CKD[1:0]和CCMR1/2的位ICxF[3:0]控制。从ICxF位的描述可知 采样频率fSAMPLE可以由fCK_INT和fDTS分频后的时钟提供 其中是fCK_INT内部时钟fDTS是fCK_INT经过分频后得到的频率 分频因子由CKD[1:0]决定可以是不分频2分频或者是4分频。边沿检测器用来设置信号在捕获的时候是什么边沿有效可以是上升沿下降沿或者是双边沿具体的由CCER寄存器的位CCxP和CCxNP决定。3. 捕获通道捕获通道就是图中的IC1/2/3/4每个捕获通道都有相对应的捕获寄存器CCR1/2/3/4当发生捕获的时候计数器CNT的值就会被锁存到捕获寄存器中。这里我们要搞清楚输入通道和捕获通道的区别输入通道是用来输入信号的捕获通道是用来捕获输入信号的通道 一个输入通道的信号可以同时输入给两个捕获通道。比如输入通道TI1的信号经过滤波边沿检测器之后的TI1FP1和TI1FP2可以进入到捕获通道IC1和IC2 其实这就是我们后面要讲的PWM输入捕获只有一路输入信号TI1却占用了两个捕获通道IC1和IC2。当只需要测量输入信号的脉宽时候 用一个捕获通道即可。输入通道和捕获通道的映射关系具体由寄存器CCMRx的位CCxS[1:0]配置。4. 预分频器ICx的输出信号会经过一个预分频器用于决定发生多少个事件时进行一次捕获。具体的由寄存器CCMRx的位ICxPSC配置如果希望捕获信号的每一个边沿则不分频。5. 捕获寄存器经过预分频器的信号ICxPS是最终被捕获的信号当发生捕获时第一次计数器CNT的值会被锁存到捕获寄存器CCR中 还会产生CCxI中断相应的中断位CCxIF在SR寄存器中会被置位通过软件或者读取CCR中的值可以将CCxIF清0。 如果发生第二次捕获即重复捕获CCR寄存器中已捕获到计数器值且 CCxIF 标志已置 1 则捕获溢出标志位CCxOF在SR寄存器中会被置位CCxOF只能通过软件清零。5.输出比较输出比较就是通过定时器的外部引脚对外输出控制信号有冻结、将通道Xx1,2,3,4设置为匹配时输出有效电平、 将通道X设置为匹配时输出无效电平、翻转、强制变为无效电平、强制变为有效电平、PWM1和PWM2这八种模式 具体使用哪种模式由寄存器CCMRx的位OCxM[2:0]配置。其中PWM模式是输出比较中的特例使用的也最多。1. 比较寄存器当计数器CNT的值跟比较寄存器CCR的值相等的时候输出参考信号OCxREF的信号的极性就会改变其中OCxREF1高电平称之为有效电平 OCxREF0低电平称之为无效电平并且会产生比较中断CCxI相应的标志位CCxIFSR寄存器中会置位。 然后OCxREF再经过一系列的控制之后就成为真正的输出信号OCx/OCxN。2. 死区发生器在生成的参考波形OCxREF的基础上可以插入死区时间用于生成两路互补的输出信号OCx和OCxN 死区时间的大小具体由BDTR寄存器的位DTG[7:0]配置。死区时间的大小必须根据与输出信号相连接的器件及其特性来调整。 下面我们简单举例说明下带死区的PWM信号的应用我们以一个板桥驱动电路为例。在这个半桥驱动电路中Q1导通Q2截止此时我想让Q1截止Q2导通肯定是要先让Q1截止一段时间之后再等一段时间才让Q2导通 那么这段等待的时间就称为死区时间因为Q1关闭需要时间由MOS管的工艺决定。如果Q1关闭之后马上打开Q2 那么此时一段时间内相当于Q1和Q2都导通了这样电路会短路。带死区插入的互补输出 是针对上面的半桥驱动电路而画的带死区插入的PWM信号图中的死区时间要根据MOS管的工艺来调节。3. 输出控制在输出比较的输出控制中参考信号OCxREF在经过死区发生器之后会产生两路带死区的互补信号OCx_DT和OCxN_DT通道1~3才有互补信号通道4没有 其余跟通道1~3一样这两路带死区的互补信号然后就进入输出控制电路如果没有加入死区控制那么进入输出控制电路的信号就直接是OCxREF。进入输出控制电路的信号会被分成两路一路是原始信号一路是被反向的信号具体的由寄存器CCER的位CCxP和CCxNP控制。 经过极性选择的信号是否由OCx引脚输出到外部引脚CHx/CHxN则由寄存器CCER的位CxE/CxNE配置。如果加入了断路刹车功能则断路和死区寄存器BDTR的MOE、OSSI和OSSR这三个位会共同影响输出的信号。4. 输出引脚输出比较的输出信号最终是通过定时器的外部IO来输出的分别为CH1/2/3/4 其中前面三个通道还有互补的输出通道CH1/2/3N。更加详细的IO说明还请查阅相关的数据手册。6.断路功能断路功能就是电机控制的刹车功能使能断路功能时根据相关控制位状态修改输出信号电平。在任何情况下 OCx和OCxN输出都不能同时为有效电平这关系到电机控制常用的H桥电路结构原因。断路源可以是时钟故障事件由内部复位时钟控制器中的时钟安全系统(CSS)生成也可以是外部断路输入IO两者是或运算关系。系统复位启动都默认关闭断路功能将断路和死区寄存器(TIMx_BDTR)的BKE为置1使能断路功能。 可通过TIMx_BDTR 寄存器的BKP位设置设置断路输入引脚的有效电平设置为1时输入BRK为高电平有效否则低电平有效。发送断路时将产生以下效果TIMx_BDTR 寄存器中主输出模式使能(MOE)位被清零输出处于无效、空闲或复位状态根据相关控制位状态控制输出通道引脚电平当使能通道互补输出时会根据情况自动控制输出通道电平将TIMx_SR 寄存器中的 BIF位置 1并可产生中断和DMA传输请求。如果 TIMx_BDTR 寄存器中的 自动输出使能(AOE)位置 1则MOE位会在发生下一个UEV事件时自动再次置 1。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2425950.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!