首页 » 科学 » 「话说准时器系列」之九:准时器单通道测量脉宽和占空比_准时器_暗记

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

admin 2025-01-21 21:30:32 0

扫一扫用手机浏览

文章目录 [+]

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

相关文章