STM32 |
您所在的位置:网站首页 › io口中断原理 › STM32 |
在前面文章《STM32-定时器系统原理》已经详细介绍了定时器的系统最基本的计数单元,这边文章来写定时器系统的两个主要应用单元——捕获/比较通道。 目录 捕获和比较 捕获 什么是捕获 捕获的应用 比较 什么是比较 比较的应用 捕获/比较通道概述 输入通道 输出通道 捕获/比较相关寄存器 捕获/比较模式寄存器 1 (TIMx_CCMR1) 输入捕获相关寄存器 捕获/比较使能寄存器 (TIMx_CCER) DMA/中断使能寄存器 (TIMx_DIER) 控制寄存器 1 (TIMx_CR1) 捕获/比较寄存器 1~4 (TIMx_CCR1~4) PWM输出相关的寄存器 捕获和比较 捕获 什么是捕获所谓捕获就是通过检测捕获通道上的边沿信号。在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)存放到对应的通道的捕获/比较寄存器(TIMx_CCR)里面,完成一次捕获。 捕获的应用STM32支持一下捕获模式: 输入捕获模式PWM输入模式输入捕获模式可以用来测量脉冲宽度或者测量频率。下图是输入捕获测量高电平脉宽的原理,假定定时器工作在向上计数模式,图中 t1~t2 时间,就是需要测量的高电平时间。 测量方法如下:首先设置定时器通道 x 为上升沿捕获,这样,t1 时刻,就会捕获到当前的 CNT 值,然后立即清零 CNT,并设置通道 x为下降沿捕获,这样到 t2 时刻,又会发生捕获事件,得到此时的 CNT 值,记为 CCRx2。这样,根据定时器的计数频率,我们就可以算出 t1~t2 的时间,从而得到高电平脉宽。 比较 什么是比较所谓比较就是计数器的值和与装载的值进行比较。 比较的应用STM32支持一下比较模式: 强置输出模式输出比较模式PWM模式单脉冲模式最近本的应用就是PWM模式了! 上图是输出PWM的原理,假定定时器工作在向上计数 PWM模式,且当 CNT=CCRx 时输出 1。当 CNT 达到 ARR 值的时候,重新归零,然后重新向上计数,依次循环。改变 CCRx 的值,就可以改变 PWM 输出的占空比,改变 ARR 的值,就可以改变 PWM 输出的频率。 捕获/比较通道概述捕获/比较通道与定时器密切相关,密不可分,水乳交融,使用不同的功能要使用到不同的寄存器,这里只列举与输入捕获、PWM相关的寄存器。如果使用到其他功能,详细的相关的寄存器在《STM32中/英文参考手册》的14.4章节。通用定时器框图如下所示,红色框是计数器部分,在计数器的基础上,还有下方的4个独立的捕获/比较通道,主要用于 输入捕获输出比较PWM生成(边缘或中间对齐模式) 单脉冲模式输出每一个捕获/比较通道都是围绕着一个捕获/比较寄存器,包括捕获的输入部分(数字滤波、多路复用和预分频器),和输出部分(比较器和输出控制)。捕获/比较通道的的主电路如下图所示(通道1为例) 捕获/比较模块由一个预装载寄存器和一个影子寄存器组成。读写过程仅操作预装载寄存器。 在捕获模式下,捕获发生在影子寄存器上,然后再复制到预装载寄存器中。 在比较模式下,预装载寄存器的内容被复制到影子寄存器中,然后影子寄存器的内容和计数器进行比较。 输入通道捕获/比较通道的输入通道1如下图所示。 捕获/比较通道的输出通道1如下图所示。 通道可用于输入(捕获模式)或输出(比较模式),通道的方向由相应的CCxS[1:0]定义。以CC1S[1:0]为例 CC1S[1:0]:捕获/比较1 选择,这2位定义通道的方向(输入/输出),及输入脚的选择: 00:CC1通道被配置为输出; 01:CC1通道被配置为输入,IC1映射在TI1上; 10:CC1通道被配置为输入,IC1映射在TI2上; 11:CC1通道被配置为输入,IC1映射在TRC上。此模式仅工作在内部触发器输入被选中时(由 TIMx_SMCR寄存器的TS位选择)。 注:CC1S仅在通道关闭时(TIMx_CCER寄存器的CC1E=’0’)才是可写的。 其中IC1和TI1的关系在上面系统图中可以看到,下图可见,IC1是可以接到TI1或TI2或TRC上的,这个位就是配置这里的! 该寄存器其它位的作用在输入和输出模式下不同,OCxx(第一行)描述了通道在输出模式下的功能,ICxx(第二行)描述了通道在输出模式下的功能。该寄存器是针对 2 个通道的配置,低八位[7:0]用于捕获/比较通道 1 的控制,而高八位[15:8]则用于捕获/比较通道 2 的控制。CCMR2 是用来控制通道 3 和通道 4。 输入模式 每个通道的位相同,这里是看其中一个通道的相关位
另外关于滤波器的长度要特别解释一下,我们知道边沿信号的跳变可能不是完美的。比如我们在处理按键的跳变信号的时候都有一个“消抖”的过程,而消抖有两种方式:1.等待稳定 2.数字滤波;第一种方式就是所谓的“延时消抖”,第二种方式就是在定时器中断的方式获取按键的状态(以采样周期T对按键状态进行采样),如果连续采集到N次按键的状态是“按下”的状态就认为是按下的状态,如果连续的N次采集中至少有一次不是“按下”的状态就不认为按键被按下,也就是说只有等按键按下之后的波形稳定之后才能被连续采集到N次“按下”状态,以此达到滤波的目的。 举个栗子:假设一个包含毛刺的上升沿跳变信号的采样如下(时间从左到右) 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 如果我们用N=4进行滤波的话,红色部分就会被认为没有上升沿跳变,绿色部分才被认为跳变! 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 如果用N=2进行滤波的话,红色部分会被认为没有上升沿跳变,绿色部分被认为有上升沿跳变!但是由于这个边沿信号抖动太厉害,N=2的滤波没能有效滤波,误认为有两次跳变!因此,对不同的跳变信号,要选用合适的滤波长度,滤波长度要能覆盖最长的边沿信号抖动! 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 输出模式 这三位定义了输出参考信号OC1REF的动作,而OC1REF决定了OC1的值。OC1REF是高电平有效,而OC1的有效电平取决于捕获/比较使能寄存器TIMx_CCER的CC1P位。 共可以配置成 7 种模式,为110或111时为PWM模式。这两种 PWM 模式的区别就是输出电平的极性相反。其中有效电平可以设置为高电平有效或者低电平有效。 电路中的极性就是电压的方向,两个PWM的一个周期的电平正好相反(0和非0)就是极性相反。 输入捕获相关寄存器需要用到的寄存器有:TIMx_ARR、TIMx_PSC、TIMx_CCMR1、TIMx_CCER、TIMx_DIER、TIMx_CR1、TIMx_CCR1等 TIMx_ARR 和 TIMx_PSC用来设定时器x的自动重装载值和 TIMx 的时钟分频,在《STM32-定时器系统原理》中已经说到,TIMx_CCMR1和TIMx_CCMR2前文已经说到,不再赘述。 捕获/比较使能寄存器 (TIMx_CCER)这个寄存器包含了4个通道,每个通道两个(CCxE和CCxP)的使能位。 以第一个通道为例 要使能输入捕获,必须设置 CC1E=0,而 CC1P 则根据自己的需要来配置。 DMA/中断使能寄存器 (TIMx_DIER)CCxIE:允许捕获/比较x中断 (Capture/Compare 1 interrupt enable) 0:禁止捕获/比较x中断; 1:允许捕获/比较x中断。 如果用到中断来处理捕获数据,必须开启通道 1 的捕获比较中断,即 CC1IE 设置为 1。 控制寄存器 1 (TIMx_CR1)前文《STM32-定时器系统原理》介绍过这个寄存器,所有与定时器相关的应用都要通过置位它的最低位来使能定时器。 捕获/比较寄存器 1~4 (TIMx_CCR1~4)这四个寄存器分别是四个通道的,功能相似!这里仅以通道1的为例。 若CC1通道配置为输出: CCR1包含了装入当前捕获/比较1寄存器的值(预装载值)。 如果在TIMx_CCMR1寄存器(OC1PE位)中未选择预装载特性,写入的数值会被立即传输至当前寄存器中。否则只有当更新事件发生时,此预装载值才传输至当前捕获/比较1寄存器中。当前捕获/比较寄存器参与同计数器TIMx_CNT的比较,并在OC1端口上产生输出信号。若CC1通道配置为输入: CCR1包含了由上一次输入捕获1事件(IC1)传输的计数器值。 PWM输出相关的寄存器所有PWM相关寄存器都在上文提到,PWM输出一般不需要触发中断,因此用不到DMA/中断使能寄存器 (TIMx_DIER)。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |