当前位置:首页 > 公众号精选 > 嵌入式大杂烩
[导读]关注「嵌入式大杂烩」,星标公众号,一起进步!来源:茶话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出错中断重复出现的话题




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

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭