使用定时器外设的输入捕捉功能及测量脉冲宽度

本文介绍了如何利用YTM32B1ME05微控制器的eTMR定时器外设进行输入捕捉,测量脉冲宽度,包括双边沿触发、单边沿触发以及专用硬件测量方法,强调了硬件在提高实时性和简化软件处理中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用定时器外设的输入捕捉功能及测量脉冲宽度

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 flagnegative edge flag分别为eTMR检测到valid input信号上的上升沿和下降沿的事件标志。注意,这两个标志存在于芯片电路系统的内部,使用脉冲的方式传递信号。

在这里插入图片描述

图x 输入捕获的时序图
  • 若使用单独检测上升沿,产生positive edge flag信号时(上升沿),当前counter的值CNT0被载入到CHXCVAL寄存器中,保持,直到下一个上升沿到来。在下降沿时不做更新。
  • 若使用单独检测下降沿,产生negative edge flag信号时(下降沿),当前counter的值CNT1被载入到CHXCVAL寄存器中,保持,直到下一个下降沿到来。在上升沿时不做更新。
  • 若使用检测双边沿,产生positive edge flagnegative 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值