基于定时器捕获测量脉宽的应用示例 |
您所在的位置:网站首页 › 测脉冲宽度的代码 › 基于定时器捕获测量脉宽的应用示例 |
我们知道,利用单片机定时器捕获功能测量脉冲信号宽度及占空比是种很常见的做法。这里以STM32的定时器为例来介绍基于其捕获功能实现对脉宽的测量的思路及过程。 一般来讲,使用STM32定时器的捕获功能来实现脉宽测量,我们可以选用一个通道、也可以使用两个通道。使用1个通道时,只需使用定时器基本的输入捕获功能结合中断或DMA即可实现;若使用两个通道时可以将捕获功能与定时器的从模式来相结合完成。这里就两种方案的实现示例都做个简单介绍。 不妨先介绍基于单个通道的输入捕获功能来实现对1路信号脉冲宽度及占空比的测量,并在测量过程中统计用于测量的定时器自身的溢出事件,以保障即使被测信号脉宽长于测量定时器自身的溢出周期时也能有效测量。 这里选用STM32F411 Nucleo 开发板 ,集成开发环境选用了ARM MDK IDE。 一、实现思路及步骤 1.1、使用STM32F411Nucleo板的板载芯片内的TIM3的通道1产生一个周期为5s,占空比为40%的PWM输出信号,然后将该信号连线到TIM4的定时器输入通道2,通过它对来自于TIM3的PWM输出信号进行脉宽及占空比的测量。 测量过程中,TIM4的通道2对外来信号的捕捉过程是这样的,TIM4的通道2对外来信号的一个完整周期实现 3次捕捉。每次捕捉事件时计数器的值会被装入CCR寄存器。 在初始状态0基于上升沿发起第一次捕捉,记录下第1次的捕捉值【Capture_1st】,并对TIM4定时器溢出事件计数器清零,同时将捕获极性切换为下沿捕捉。之后进入状态1,等待后续的下沿捕获。当发生下沿捕获时,记下第2次的捕捉值【Capture_2nd】,并将前面这段时间的定时器溢出次数也记录下来【Front_Num_OvEvent】,再次将极性切换为上沿捕捉,进入状态2,等待第3次捕获。在状态2的情况下,当发生上沿捕获时,记录下第3次的捕捉值【Capture_3rd】,并将整个测试周期内发生的定时器溢出次数记录下来【Total_Num_OvEvent】,然后进入状态3进行占空比【Signal_Duty】和脉宽【Signal_Cycle】的计算。完毕后回到初始状态,准备下次的测量。 另外,在TIM4的更新中断里对非初始状态的溢出事件累加统计,放在变量【Num_OvEvent】里。 示例代码里用到变量Measure_State来记录和表示当前测试状态。 1.2 、测量用到的算式 根据上面的介绍,一次完整的测量下来,测得的周期和占空比可以用下面算式求得。 【下面算式貌似复杂,只需把上面测试原理和那几个数据理清自然就会计算】 1.3 、基本配置准备 1.3.1、 实现TIM3 通道1【PA6】PWM输出,计数周期5s,占空比40%,用做被测信号。 A、选择定时器内部时钟作为时钟源,STM32F411芯片定时器内部时钟为100Mhz; B、设置分频比,选择计数模式、设置计数脉冲个数; 对时钟源20000分频,PSC=20000-1;选择向上计数模式up counting; 计数器基于分频后的脉冲每计数设置为25000个后,发生溢出并产生更新事件及中断。则:ARR=25000-1 按照上面参数来设计,定时器的定时周期或者说溢出周期就是5s. C、它需做PWM输出,这里选择PWM 模式1 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |