使用定时器外设的输入捕捉功能及测量脉冲宽度
文章目录
Introduction
在汽车电子系统中,经常需要通过编码器反馈机械结构的位置信息,微控制器芯片解析编码器的信号时,会使用到定时器的输入捕获功能测量编码器输出的脉冲宽度。绝大多数带有多通道输入输出的定时器,都设计了输入捕获功能。基本的硬件输入捕获功能只是对外部的触发事件(通道引脚上的上升沿、下降沿)进行响应,将定时器当前的计数值快照到通道的输入数据寄存器中,还需要配合少量软件和硬件中断服务进行计算,才能得到表示脉冲宽度的量化值。
本文以国产云途半导体的YTM32B1ME05微控制器为例,介绍使用硬件定时器eTMR外设的输入捕获功能,实现测量脉冲宽度的方法。特别地,eTMR外设在硬件上还设计了专门测量脉冲宽度的功能,以简化软件处理的过程。
硬件定时器外设输入捕获功能的机制
在《YTM32的增强型定时器eTMR外设模块详解》一文中曾介绍过,硬件定时器功能的核心,是一个在选定时钟源驱动下的计数器。其中,若配置某个定时器的通道为输入捕获模式,软件可预设检测通道引脚上的信号变化边沿触发事件(上升沿、下降沿),当定时器硬件捕获到对应的触发信号时,会自动将定时器计数器当前的计数值写入到该通道对应的输入捕获数据寄存器中,记录该值作为预设触发信号的时间戳。
在YTM32B1ME05
微控制器芯片中集成的eTMR模块,最多支持8个通道,并且每个通道可以配置成输入捕获模式(设置寄存器eTMR_CHn_CTRL[CHMODE]
),并且可以检测通道引脚上的单独的上升沿、单独的下降沿或是任一边沿(设置寄存器eTMR_CHn_CTRL[CAPEDGE]
),每个通道设计有专门的eTMR_CHn_CVAL
寄存器,专用于存放最近一次捕获到的触发事件的时间戳。
图x中描述的信号时序,解释了eTMR通道的输入捕获模式的工作机制。其中:
clock
是驱动计数器的时钟源信号,counter
对每个时钟源的脉冲进行计数。valid input
是通道引脚上的电平信号。positive edge flag
和negative edge flag
分别为eTMR检测到valid input
信号上的上升沿和下降沿的事件标志。注意,这两个标志存在于芯片电路系统的内部,使用脉冲的方式传递信号。
- 若使用单独检测上升沿,产生
positive edge flag
信号时(上升沿),当前counter
的值CNT0
被载入到CHXCVAL
寄存器中,保持,直到下一个上升沿到来。在下降沿时不做更新。 - 若使用单独检测下降沿,产生
negative edge flag
信号时(下降沿),当前counter
的值CNT1
被载入到CHXCVAL
寄存器中,保持,直到下一个下降沿到来。在上升沿时不做更新。 - 若使用检测双边沿,产生
positive edge flag
或negative edge flag
任一信号时,当前counter
的值都会被载入到CHXCVAL
寄存器中。
使用两个通道(引脚)的单边沿触发输入捕获
测量脉冲的宽度,具体就是分别捕获脉冲方波的上升沿和下降沿的时刻(若是测量负脉冲则先捕获下降沿再捕获上升沿),然后使用后一个时刻减去前一个时刻,即可得到脉冲的时间长度。这里面还有个情况需要考虑,输入捕获记录的一个周而复始的计数器,在未能限定输入脉冲宽度的最大范围的场景下,第二次捕获的时刻可能会出现在后续的计数“轮回”中,因此还需计入脉冲宽度中计数器绕圈的次数。
这里有计算公式如下:
脉冲宽度 = 计数器周期的时间长度 * 计数器周期的次数(从捕获第一边沿开始至捕获第二边沿结束中间)
+ 捕获第二边沿的时刻 - 捕获第一边沿的时刻
通常,定时器输入捕获通道都只设计了一个输入捕获数据寄存器,但软件可以配置在捕获上升沿或者下降沿的时刻。此时,若要测量脉冲宽度,可以在芯片外面(PCB板电路)将两个输入捕获的通道连在一起接入即将捕获的信号,然后分别配置两个输入捕获的通道事件,一个是上升沿,一个是下降沿。因为两个引脚的信号方向都是输入,不会相互影响。还要记得启用计数器溢出中断,并在中断程序中设计一个软件计数器,记录测量脉冲宽度中可能包含的溢出周期的个数pulse_width_period_count
。若正脉冲到来:
- 预先配置捕获上升沿信号的通道硬件将自动先记录第一个边沿的时刻,存入通道输入捕获数据寄存器
eTMR_CH0_CVAL
,同时触发本通道的中断,在服务程序中,将pulse_width_period_count
计数器清零。 - 如果脉冲宽度很长,计数器的溢出中断会持续到来,在对应的中断服务程序中,
pulse_width_period_count
计数器将被累加。这里还可以加入超时判断,即软件设计判定,若pulse_width_period_count
计数器的值被递增至某个预设值时,即可为判定脉宽过长,然后向应用逻辑反馈。 - 预先配置捕获下降沿信号的通道硬件再记录第二个边沿的时刻,存入通道输入捕获数据寄存器
eTMR_CH1_CVAL
,同时触发本通道的中断,在服务程序中,将使用上述计算公式计算测量的脉冲宽度,然后向应用逻辑反馈。
分析测量脉冲宽度的实现过程可知&#x