当前位置:首页 > 公众号精选 > 嵌入式大杂烩
[导读]关注「嵌入式大杂烩」,星标公众号,一起进步!来源:茶话MCU我们知道,利用单片机定时器捕获功能测量脉冲信号宽度及占空比是种很常见的做法。这里以STM32的定时器为例来介绍基于其捕获功能实现对脉宽的测量的思路及过程。一般来讲,使用STM32定时器的捕获功能来实现脉宽测量,我们可以选...

关注「嵌入式大杂烩」,星标公众号,一起进步!

来源:茶话MCU


我们知道,利用单片机定时器捕获功能测量脉冲信号宽度及占空比是种很常见的做法。这里以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,占空比为40%

CCR=(ARR 1)*0.40 =10,000


使用STM32CubeMx图形化工具进行配置:


1.3.2 、实现TIM4通道2的输入捕获,假定TIM4的溢出周期为20ms.

A、选择定时器内部时钟为时钟源,32F411定时器内部时钟为100Mhz;

B、设置分频比,选择计数模式、设置计数脉冲个数;

先对时钟源100分频、即PSC=100-1;选择向上计数模式up counting;

计数器基于分频后的脉冲每计数20000个,发生溢出并产生更新事件及中断。

则:ARR=20000-1

按照上面参数来设计,定时计数周期或者说溢出周期就是20ms.

另外,通道2配置为输入捕捉初始捕捉极性位选择上升沿



1.4 、工程代码的生成、添加和整理

通过STM32CUBEMX依据上述参数完成配置,并开启TIM4的中断使能,然后生成工程。再在工程里添加应用户代码。

                 ......

     Measure_State= 0x00;   //测试初始态

     Num_OvEvent= 0x00;   //TIM4溢出次数初始值

部分处理代码的简要说明:

在TIM4通道2的捕获中断里做3次捕捉值的获取以及计算,在TIM4更新中断里对溢出事件进行统计。

二、本次示例的结果验证

实验中tim4的时基参数保持不变,可通过调整TIM3的PWM输出的脉宽和占空比,来看看实验结果。下面有一个视频剪辑,就是上面工程验证结果的部分内容,有兴趣可以观看。


上面简单介绍了基于单通道的定时器捕获实现对脉宽及占空比测量的过程,现在继续介绍使用双通道,基于定时器PWM输入模式测量脉宽及占空比同样,在测量过程中也统计用于测量的定时器自身的溢出事件。所用开发板和开发环境跟上面一致。

                 

三、实现原理、思路及步骤

3.1、同样,利用板载芯片内的TIM3的通道1产生一个周期为5s,占空比为40%的PWM输出信号,然后将该信号连线到TIM4的定时器通道2【TI2】,作为其直接输入。基于PWM输入模式对来自于TIM3的PWM输出信号进行脉宽及占空比的测量。


这里先简单介绍下PWM输入模式工作原理。

*它是基于输入捕获定时器从模式相结合的一个具体应用。

同一外部输入引脚【仅限于定时器的TI1/TI2】的输入滤波信号【TIxFPx】映射到内部2个捕捉通道【仅限于IC1/IC2】,且配置为相反的捕捉极性,即一个通道捕捉上沿,另一通道捕捉下沿。

*用于测量的定时器配置在复位从模式,外部输入信号的滤波信号TIxFPx作为定时器的触发信号,令定时器复位。

*经过两次连续的捕捉结合定时器的溢出事件统计可方便地测得信号的周期及占空比。

具体到这里,触发信号来自待测信号,即TIM3的PWM输出,与TIM4的TI2相连,经过边沿检测和滤波后的TI2FP2做为IC2的输入信号的同时担当TIM4的触发输入信号,其触发极性可以软件配置,此处配置为上沿触发。当TIM4收到触发信号时,定时器的计数器会被复位更新。当计数器配置为UP计数模式时,计数器会被清零并重新开始计数。


3.2、大致测量过程是这样的:TIM4配置在复位从模式。待测信号从TI2输入。



当从通道2出现信号的上升沿时,TIM4计数器被复位清零,同时产生更新事件触发事件相关标志位会被硬件置1.


初始状态下,将定时器从模式触发沿配置为上沿触发,捕捉通道1配置下沿捕捉,捕捉通道2配置为上沿捕捉。初始状态下,待测信号的上升沿使得TIM4的计数器被复位清零,并进入测量状态1,并开启定时器的溢出事件实时统计,代码里用到的变量是Num_OvEvent。当发生通道1的下沿捕捉时,记录下第1次的捕捉值【Vaule_1stCap】,并记录下自复位以来到下沿捕捉这段事件的溢出次数,放在变量Front_Num_OvEvent里。然后进入状态2。在状态2的情况下当发生通道2的上沿捕获时,记录下第2次的捕捉值【Vaule_2ndCap】,并将整个测试周期内定时器溢出次数记录在【Total_Num_OvEvent】,然后进入状态3进行占空比【Signal_Duty】和脉宽【Signal_Cycle】的计算。完毕后回到初始状态,准备下次的测量。

另外,在TIM4的更新中断里对非初始状态的溢出事件累加统计,放在变量【Num_OvEvent】里。


示例代码里用到一个变量Measure_State来记录和表示当前测试状态,大致流程如下。


整个测量过程中,我们使用触发脉冲产生的触发事件作为每次开启测量的起始。


3.3、 测量用到的算式

根据上面的介绍,1次完整的测量下来,测得的周期和占空比可以用下面算式求得:



 

3.4、基本配置准备

3.4.1 、实现TIM3 通道1的PWM输出,计数周期5s,占空比40%,用做被测信号。

A、选择定时器内部时钟作为时钟源,STM32F411芯片定时器内部时钟为100Mhz

B、设置分频比,选择计数模式、设置计数脉冲个数;

对时钟源20000分频,PSC=20000-1;选择向上计数模式up counting;

计数器基于分频后的脉冲每计数25000个后,发生溢出并产生更新事件及中断。则:ARR=25000-1

按照上面参数来设计,定时器的定时周期或者说溢出周期就是5s.

C、它需做PWM输出,这里选择PWM 模式1,占空比为40%,

则CCR=(ARR 1)*0.40 =10,000

CubeMx图形化配置界面:

3.4.2、 实现TIM4通道2做PWM模式输入测量,假定tim4计数器溢出周期为20ms。


先做时基参数的配置:

1、选择定时器内部时钟为时钟源,32F411定时器内部时钟为100Mhz;

2、设置分频比,选择计数模式、设置计数脉冲个数;

先对时钟源100分频、即PSC=100-1; 选择向上计数模式up counting;

计数器基于分频后的脉冲每计数20000个,发生溢出并产生更新事件及中断。则:ARR=20000-1。注意:TIM4工作在复位从模式

按照上面参数来设计,定时计数周期或者说溢出周期就是20ms.


再看看定时器TIM4的捕获配置:

TIM4输入捕捉通道2配置为直接输入捕捉,捕捉极性选择上升沿。

TIM4输入捕捉通道1配置为间接输入捕捉,捕捉极性选择为下降沿。

3.5、工程代码的生成、添加和整理

通过STM32CUBEMX依据上述参数完成配置,并开启TIM4的中断使能,然后生成工程。再在工程里添加应用户代码。【只列出部分直接有关的】


部分处理代码简要说明:

  发生触发事件时,进入测量状态:

在TIM4通道1发生下沿捕捉事件时,将前面时间段的溢出次数记录下来并切换测量状态。

在TIM4通道2发生上沿捕捉事件时,将整个测量周期发生的溢出次数记录下来,并转入计算处理状态。

    

另外,在测量状态下,基于TIM4的更新中断对溢出次数进行统计。

四、实验结果验证

同样,我们保持实验中tim4的时基参数保持不变,通过调整TIM3的PWM输出波形的脉宽和占空比,来看看实验结果。


五、小结

上面介绍了两种测量信号脉宽及占空比的方案,都用了捕获中断和更新中断。其中,在第2种方案中用触发事件作为每次测量的起始,这算是个关键点。顺便说下,我们在利用定时器测量脉宽涉及到更新事件次数统计时,比较容易出现多统计一次的问题。因为定时器初始化完成后会软件产生一次更新事件,所以建议在启动定时器更新中断前对该标志位做个清零操作。不过,在我上面两个方案的示例代码的初始化阶段,这个操作倒是可有可无,因为我的代码里对更新事件计数还要结合状态机,并非一有更新中断就累加。


上面提到的实现思路及代码仅供参考,旨在抛砖引玉。当你对原理把握得越清晰时,应用就越灵活。最后,就上面提到的两种测量方案基于个人的理解做个简单比较。



【注:2个通道并不意味着需要2个物理管脚,其实1个脚就够了。另外基于定时器捕获功能配合DMA,解码方面也能有很好的发挥。


 下方的小视频,是基于单通道模式测量信号占空比的验证部分的视频剪辑,有兴趣可以打开看下。

==================================

往期话题阅读链接[点击即可阅读]:

1、IAP代码与APP代码合并烧录示例

2、基于STM32 GUI应用的选型推荐

3、STM32H743从RAM启动异常的案例

4、PCB板边缘的敏感线为何容易ESD干扰

5、一个关于CAN出错中断重复出现的话题




本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

5G时代的到来改变了人类社会的生产和生活方式,但是5G基站AAU功耗大的问题不容忽视。目前华为、中兴、爱立信等主流设备的AAU功耗比4G网络设备中RRU的功耗增加许多,极大地增加了运营商的运营成

关键字: 5G网络 5G基站 4通道 中兴

泰克公司日前宣布,对其TBS1000示波器系列进行扩充,新增60 MHz、100 MHz和150 MHz带宽的三种4通道机型。泰克公司设计生产的TBS1000示波器附带5年保修,可在研发、教育、服务及制造应用中提供长期...

关键字: 4通道 泰克 示波器 HZ

致力于为各行业用户提供高品质测试测量解决方案和成套检测设备的北京泛华恒兴科技有限公司(简称:泛华恒兴)近日发布了最新数采板卡—PS PCI-3304 。PS PCI-3304是一款基于PCI总线的工业数字IO卡,单卡提供...

关键字: PCI总线 IO 4通道 PS

21ic讯 北京泛华恒兴科技有限公司(简称:泛华恒兴)近日发布了最新数采板卡—PS PCI-3304 。PS PCI-3304是一款基于PCI总线的工业数字IO卡,单卡提供64个双向数字IO通道,每一个IO...

关键字: PCI总线 IO 4通道 PS

21ic讯 日前,德州仪器 (TI) 宣布推出转换速率为 250 MSPS 的业界速度最快 4 通道 14 位模数转换器 (ADC)。该高密度 ADS4449 有助于接收器系统支持高达 125 MHz 的瞬时带宽,不...

关键字: ADC PS 4通道

21ic讯 北京泛华恒兴科技有限公司(简称:泛华恒兴)近日发布了PS PXI-3305 64通道隔离双向数字IO卡。PS PXI-3305是一款基于PXI的数字IO量控制或采集卡,单块可提供64个双向数字IO通道,每个...

关键字: 隔离 IO 4通道 PS

致力于为各行业用户提供高品质测试测量解决方案和成套检测设备的北京泛华恒兴科技有限公司(简称:泛华恒兴)近日发布了PS PXI-3305 64通道隔离双向数字IO卡。PS PXI-3305是一款基于PXI的数字IO量控制或...

关键字: 隔离 IO 4通道 PS

北京时间4月11日早间消息,作为TD-LTE阵营的先行军,巴帝电信的TD-LTE网络部署可以给产业界带来很多参考和借鉴。让我们首先回顾一下巴帝电信的LTE之旅:2010年6月,巴帝电信在印度2.3GHz频段宽带无线接入(...

关键字: 电信 TD-LTE LTE网络 4通道

21ic讯 百利通半导体公司(Pericom Semiconductor Corp)日前宣布:公司将推出一个新的视频解码器芯片产品系列。该系列的首批新产品定位于快速增长的基于PCIe的硬盘录像机(DVR)和视频监控系统,...

关键字: 4通道 视频解码器 PERICOM

在多通道设计中,独立驱动每一条通道都会消耗更多的功率、更多的元件,并占用更大的电路板空间。结果导致温度相关设计复杂化,并且在更高的成本下声音质量和可靠性却较低。因此,为尽可能减少高性能多通道音频系统的

关键字: 4通道 RS D类音频放大器 BSP
关闭
关闭