历史上的今天
返回首页

历史上的今天

今天是:2026年02月28日(星期六)

正在发生

2023年02月28日 | 【话说定时器系列】之九:定时器单通道测量脉宽和占空比

2023-02-28 来源:zhihu

STM32定时器是 ST MCU 内部最基础且常用的外设,实际应用尤为普遍。去年,电堂推出了《STM32 TIMER基础及常规应用介绍》,为大家梳理了 STM32 TIMER 的庞大内容,涵盖 TIMER 的基本应用原理、常规应用等。现在将课程内容整理为文章,针对STM32定时器有基本了解的用户,分享具体的应用实现环节及常见问题解决。


本文为【STM32定时器】系列第九篇分享文章,重点介绍通过定时器单个通道测量信号脉宽及占空比。


实验内容


一般来讲,通过STM32单片机对外来脉冲信号测量其脉冲宽度及占空比的方法较多,即使使用STM32定时器的捕获功能,我们可以使用一个通道、也可以使用两个通道;可以使用定时器基本的输入捕获功能实现、也可以利用PWM输入模式结合定时器的从模式来完成。这里使用支持输入捕获功能的定时器的单个通道,来实现对1路外来信号脉冲宽度及占空比的测量,并在测量过程中统计和计算用于测量的定时器自身的溢出事件

这里用到的开发板:STM32F411 Nucleo 板 【实验对开发板并无特别要求】,集成开发环境不限。这里用的是ARM MDK IDE。


实验目的


1、熟悉定时器时基单元的基本寄存器及相关数据的拟定。

2、了解通过STM32定时器实现PWM波形输出的配置与使用。

【因为这里要使用一个定时器的pwm输出产生一个待测量脉冲信号】

3、熟悉定时器输入捕捉的基本应用与实现,并熟悉相关事件或中断。

4、为后面的PWM输入模式测量脉宽及占空比实例做铺垫。


实验思路及步骤


3.1 测量的思路


这里使用32F411Nucleo板的板载芯片内的TIM3的通道1产生一个周期为5s,占空比为40%的PWM输出信号,然后用连线将该信号连接到TIM4的定时器输入通道2,通过对来自于TIM3的PWM输出信号进行脉宽及占空比的测量。

测量过程中,TIM4的通道2对外来信号的捕捉过程是这样的,TIM4的通道2对一个外来信号完整的测试过程实现 3次捕捉。


在初始状态【没进入测量的状态】下基于上升沿发起第一次捕捉,记录下第1次的捕捉值【Capture_1st】,并开启TIM4定时器溢出事件的统计,同时将捕获极性切换为下沿捕捉。之后进入状态1,等待后续的下沿捕获。


当发生下沿捕获时,记录下第2次的捕捉值【Capture_2nd】,并将前面这段时间的定时器溢出次数也记录下来【Front_Num_OvEvent】,再次将极性切换为上沿捕捉,进入状态2,等待第3次捕获。在状态2的情况下,当发生上沿捕获时,记录下第3次的捕捉值【Capture_3rd】,并将整个测试周期内发生的定时器溢出次数记录下来【Total_NuOvEvent】,然后进入状态3进行占空比【Signal_Duty】和脉宽【Signal_Cycle】的计算。完毕后回到初始状态,准备下次的测量。另外,在TIM4的更新中断里对非初始状态的溢出事件累加统计,放在变量【Num_OvEvent】里。实验代码里用到一个变量Measure_State来记录和表示当前测试状态。



3.2 测量用到的算式


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

Signal_Duty=(Capture_2nd+(Front_Num_OvEvent*(TIM4_PERIOD+1))-Capture_1st)/(Capture_3rd+(Total_Num_OvEvent*(TIM4_PERIOD+1))-Capture_1st)

Signal_Freq=Clk_Internal/((Capture_3rd+(Total_Num_OvEvent*(TIM4_PERIOD+1))-Capture_1st)*(TIM4_PSC+1));

因为:计数器时钟= Clk_Internal /(TIM4_PSC+1)

或者说:

Signal_Freq计数器时钟/(Capture_3rd+(Total_Num_OvEvent*(TIM4_PERIOD+1))-Capture_1st);


3.3 基本配置准备


3.3.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.3.2 实现TIM4通道2的输入捕获,假定计数器溢出周期为20ms.

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

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

先对时钟源100分频、即PSC=100-1; 选择向上计数模式up counting;计数器基于 分频后的脉冲每计数20000个,发生溢出并产生更新事件及中断。则:

ARR=20000-1

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

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




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


通过STM32CUBEMX依据上述参数完成配置,并开启TIM4的中断使能,然后生成工程。

再在工程里添加应用户代码。



TIM4中断处理代码说明:

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



实验结果验证


实验中tim4的时基参数保持不变,主要调整TIM3的PWM输出波形的脉宽和占空比,来看看实验结果。尤其看看当待测脉宽远长于TIM4定时器的溢出周期时的情况。

为了便于参数的修改和测试,这里针对TIM3和TIM4的时基参数定义了几个宏:

。。。。。。

我们选取几组数据,直接联机观察运行结果。

// pulse cycle = ((TIM3_PSC+1) * (TIM3_PERIOD+1))/100,000,000 【s】

// 5s ==>500,000,000 // 9s ==>900,000,000

//500ms ==>50,000,000 //80ms ==>8,000,000

//20ms ==>2,000,000 /////Same with measuring TIM4 cycle

//1ms ==>100,000 //100us ==>10,000

//10us ==>1000 //5us ==>500

…… 4 us?


小结


上面实验的实现思路及提到的代码,仅供参考,旨在抛砖引玉。

其它地方也有相关的例程,不过往往有个前提,待测信号的周期不能长于用来测量的定时器的溢出周期。如果按照上面的代码设计,就没有这个限制了。基于现有软硬件环境,我们可以对一定宽度以上的外来脉冲准确测量其脉冲宽度及占空比,当然这个一定宽度跟我们的软硬件境有关,比方时钟频率、计数脉冲精度、代码效率等。基于刚才的实验来看,5us以上时都能准确测得结果。


推荐阅读

史海拾趣

FASTRAX公司的发展小趣事

2012年,瑞士公司u-blox宣布以1300万欧元收购FASTRAX 100%的股权。这一并购事件引起了业界的广泛关注。u-blox看中了FASTRAX在GPS接收模块领域的领先地位和技术实力,希望通过并购加强其在定位市场的竞争优势。并购完成后,FASTRAX成为u-blox集团的重要一员,继续为全球客户提供优质的GPS产品和服务。

ASPEED Technology公司的发展小趣事

ASPEED与Audinate建立了合作伙伴关系,共同开发Dante AV-A。这一合作使得ASPEED的SoC能够支持Dante AV-over-IP芯片组,为专业AV行业的制造商提供了更加便捷、高效的解决方案。通过合作,ASPEED进一步巩固了其在专业AV市场的地位,并拓宽了公司的业务范围。

DLP Design公司的发展小趣事

DLP精工科技公司,一直秉承“品质至上”的经营理念,在DLP技术产品的设计和制造过程中严格把控品质。公司拥有一支专业的研发团队和先进的生产设备,确保每一件产品都符合高标准的质量要求。通过不断的技术创新和产品升级,DLP精工科技在电子行业中树立了良好的品牌形象,赢得了消费者的信赖和认可。

Boyd Corporation公司的发展小趣事

为了进一步扩大市场份额和提升技术实力,Boyd Corporation进行了一系列战略收购。其中,收购Aavid Thermalloy是其中的重要一环。Aavid在热管理领域拥有卓越的技术和工程团队,通过合并,Boyd Corporation成功将Aavid的技术和团队纳入旗下,进一步增强了其在热管理领域的市场地位。

Electromagnetic Industries Llp公司的发展小趣事

在技术创新的同时,EMI公司也注重市场拓展。公司根据市场需求和产品特点,制定了有针对性的营销策略。一方面,公司积极参加国内外各种电子展会和论坛,展示产品和技术实力;另一方面,公司加强与客户的沟通和合作,深入了解客户需求,提供个性化的解决方案。通过这些努力,EMI公司的市场份额不断扩大,品牌影响力也逐渐提升。

飞翼科技(FEIYI)公司的发展小趣事

在技术创新的同时,EMI公司也注重市场拓展。公司根据市场需求和产品特点,制定了有针对性的营销策略。一方面,公司积极参加国内外各种电子展会和论坛,展示产品和技术实力;另一方面,公司加强与客户的沟通和合作,深入了解客户需求,提供个性化的解决方案。通过这些努力,EMI公司的市场份额不断扩大,品牌影响力也逐渐提升。

问答坊 | AI 解惑

电脑知识培训体系-----硬件【转】

本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 一、 序篇 关于电脑知识学习的个人心得 电脑基础知识培训 二、正文 cpu 内存、硬盘 主板、芯片组 ...…

查看全部问答>

ALTERA Cyclone III 开发板的子板电路

我们这次示波器使用 的开发的原配子板的电路原理图资料 主要是音频,视频,液晶的接口,对从事这方面的设计的网友来说有参考意义。这些器件通过CPLD来分配端口连到HSMC接口和主板通讯,主板就是我们的示波器的主板。 实际上我们这次使用的开发板 ...…

查看全部问答>

求教wince开发PXA270,IRQ_ALARM无法关联EVENT的问题????

小弟初学wince,芯片为PXA270,需在驱动程序中使用RTC定时产生的中断IRQ_ALARM,已建立IRQ_ALARM对系统中断映射SYSINTR_RTC_ALARM。但创建线程等待中断产生时,SYSINTR_RTC_ALARM关联EVENT总是失败。 具体如下: 1.在OALInit中已建立映射:OALIntr ...…

查看全部问答>

如何将Oracle中的数据写入到SqlCE中.....

操作系统是wince4.2 客户端的数据是用的oracle.所以需要将oracle中的数据读出来,写到sqlce中. 能够在PC端操作就可以了. oracle中的表有3个,而且数据估计有几万条.. 在看了upto博客上的文章,他所讲的是将sql server中的数据写入到sqlce中.. 测 ...…

查看全部问答>

一个菜鸟问题,关于CONFIG.BIB的

IF IMGFLASH ! IF BSP_EP931X_COPY_FLASH_TO_RAM ! ;********************************************************************** ; ; Boot from RAM ; ;********************************************************************** MEMORY &nb ...…

查看全部问答>

香版救救急!!USART2和CAN能够同时在一个工程用吗

现在用的是V2.02的库。前面看到勘误表里面说USART2和其它外设有点冲突想在想问问USART2和CAN有没有冲突?…

查看全部问答>

101系列的36M时钟和103系列的72M时钟在哪里区分?

                                 不知道差别在哪里,好像我的101RBT6的PLL倍频后设置为72M是正常的…

查看全部问答>

2812采集模拟量的数值计算

怎么看到材料的计算公式为: Digital Value = 4095 **Input Analog Voltage -ADCLO)/3.0 但也看到 ((float)AdcRegs.ADCRESULT0)*3.0/65520.0 =输入模拟量数值 但为何就成了65520.0 .而不是4095呢? 请指点. …

查看全部问答>

本人拿出芯币奖励2011电设竞赛获奖坛友

各位坛友,由于本人工作原因,在电设期间也没怎么帮助各位坛友。现拿出一些芯币奖励获奖坛友。     一等奖每人奖励芯币66,二等奖每人奖励芯币33 。      由于获奖人数不少,而本人芯币又有限,故望各位不要嫌少啊 ...…

查看全部问答>

求推荐一款长焦距相机

有个15倍左右的变焦就行,普通家用,希望照片颜色比较鲜艳点就行,不追求手动功能,网上也看了很多,看的头晕。什么s2900,L110,L120...坛友们有没有推荐的,好用就行…

查看全部问答>