技术文档

单片机测脉宽 「话说定时器系列」之九:定时器单通道测量脉宽和占空比

小编 2025-06-21 技术文档 23 0

「话说定时器系列」之九:定时器单通道测量脉宽和占空比

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以上时都能准确测得结果。

单片机功能——PWM脉冲宽度调制

夏天在户外没有空调的庇护,小风扇就成了我们纳凉的重要工具。热了就把风速调大、凉了就把风扇的风速调小,总的来说风速得跟着体感舒适度走。小风扇的转速控制是利用PWM控制来调节,PWM驱动信号施加到连接至风扇的高侧或低侧的场效应晶体管(field-effect transistor,FET) 上。在特定频率k开关风扇,通过PWM信号的占空比(duty cycle)来控制风扇转速。

而这里说的小风扇风速控制就涉及到了接下来我们要说的单片机知识点——PWM脉冲宽度调制。

PWM是一种模拟控制方式,根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变。这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效的技术。

PWM脉冲宽度调制具有两个非常重要的参数:频率和占空比。频率和周期是互为倒数的,占空比是指一个周期内高电平所占的比例。PWM信号就是根据需求调节占空比的大小以实现负载端电压的线性变化。

PWM的优点之一是从处理器到控制系统的信号是数字形式的,并且不需要数模转换。只有当噪声强度足以将逻辑1转换为逻辑0或逻辑0转换为逻辑1时,噪声也会影响数字信号。

抗噪声能力的提高是PWM相对于模拟控制的另一个优点,也是PWM在某些时候用于通信的主要原因。从模拟信号切换到PWM可以大大延长通信距离。在接收端,通过适当的RC或LC网络将调制后的高频方波滤除,信号恢复为模拟形式。

芯海的CSU38F20H芯片中带有3路PWM输出,一路互补PWM输出,可适用于个人护理、电池管理、消防标志灯等领域。

相关问答

肿么用C语言编写51 单片机测脉宽 的程序~ 跪求完整程序!-ZOL问答

#includereg51.h#defineuintunsignedintuintwidth;sbitpulse=P3^2;main(){TMOD=0x09;//定时器0模式1...

单片机 三相逆变器正弦波 脉宽 控制程序?

PWM即脉宽调制,调矩形波占空比的,因此它直接输出的是矩形波,要想得到正弦波,需要让这个占空比按正弦波规律输出,然后再对PWM滤波,此时PWM相当于DA所以你用...

单片机 有多少PWM输出的引脚 - 懂得

不是哪,PWM简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。能够有PWM输出只是单片机的个别引脚,这些引脚能够配...

如何用 单片机 普通IO口采集外部信号的频率?

用单片机普通IO口采集外部信号的频率的方法:用TH0和TL0做计数器,再配合2个8位的软件计数器可以组成2个16位的计数器可以测2路频率,使用定时器1+软件计数器的方...

单片机 pwm是什么原理 - 149****8991 的回答 - 懂得

原发布者:大鹏799PWM的工作原理脉宽调制PWM是开关型稳压电源中的术语。这是按稳压的控制方式分类的,除了PWM型,还有PFM型和PWM、PFM混合型。脉宽宽...

单片机 有多少PWM输出的引脚 - 135****6478 的回答 - 懂得

有的单片机有内置的硬件pwm功能,它的输出可能只能在某几个管脚上选择;如果自己编写程序实现软件PWM,则没有这个限制,所有的引脚都可以作为PWM输出。...

单片机 中的P是什么?

单片机中单独的P指的是奇偶标标志位,是程序状态字PSW中的最低位。P1口和P2口以及P3口都可以做普通的I/O使用!其中P3口具有第二功能:P3.0RXD(串行输入口)...

什么是 单片机 ?它由哪几部分组成?什么是 单片机 应用系统?二者...

单片机是一种路芯片,模集成电路技术把具有数处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱...

单片机 中JNBTF0?

1.这是51单片机的一条汇编语言指令,其中J代表"跳转JUMP",N代表"非NO",B代表"位BIT";2.如果TF0为0,那就跳转到本句...

PIC 单片机 中PWM和比较器是怎么个意思啊! - 178****2886 的回...

PIC单片机里面自己带有比较器和PWM比较器是将一个模拟电压信号与一个基准电压相比较的电路。比较器的两路输入为模拟信号,输出则为二进制信号,当输...

猜你喜欢