硬汉嵌入式论坛

 找回密码
 立即注册
查看: 162|回复: 7
收起左侧

[TIMER] 定时器如何测高频 PWM 频率?

[复制链接]

7

主题

171

回帖

192

积分

初级会员

积分
192
发表于 前天 11:49 | 显示全部楼层 |阅读模式
使用 STM32 定时器的 PWMI 功能,通过在一个 PWM 周期内以高频(定时器核频率)计数,获得中低频 PWM 的周期和脉宽,进而获得频率和占空比。以 TIM2 为例,其信号流向为:
1)待测 PWM 信号由 TIM2_CH1 (tim_ti1_in0) 输入,按手册命名为 tim_ti1;
2)tim_ti1 经输入滤波与边沿检测器生成两路信号,tim_ti1fp1 识别上升沿作为 tim_ic1,tim_ti1fp2 识别下升沿作为 tim_ic2;
3)配置 从模式为复位模式(SMS[3:0] = 0100),触发源为 TI1FP1(TS[4:0] = 00101);
4)手册指出,检测到复位触发信号时,CNT 值先锁存至 CCR 寄存器后再清零,故 TIM2_CCR1 存放周期数,TIM2_CCR2 存放脉宽数;
5)PWM 信号频率 = 定时器核频率 / (TIM2_CCR1 + 1),PWM 信号占空比 = (TIM2_CCR2 + 1) / (TIM2_CCR1 + 1)。
[RM0440] STM32G4 参考手册 30.4.7 节
When an input capture occurs:
• The TIMx_CCR1 register gets the value of the counter on the active transition.

那么,如果需要测量高频 PWM 的频率,可以使用 ETR 引脚输入待测信号,通过在一段已知时间内计 PWM 信号上升沿的个数,获得频率。
但我不希望“一段已知时间”通过其他定时器的中断实现,即希望有 纯硬件检测方法,实现与 PWMI 类似地,可以随时读取某一锁存寄存器计算,请问有实现方法吗?
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
121348
QQ
发表于 前天 12:54 | 显示全部楼层
定时输入捕获+DMA,  看看满足需求不

STM32H7的定时器输入捕获可以实现12MHz方波的双边沿捕获,单边沿可以做到24MHz
https://forum.anfulai.cn/forum.p ... 1283&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

7

主题

171

回帖

192

积分

初级会员

积分
192
 楼主| 发表于 前天 13:49 | 显示全部楼层
eric2013 发表于 2026-3-6 12:54
定时输入捕获+DMA,  看看满足需求不

STM32H7的定时器输入捕获可以实现12MHz方波的双边沿捕获,单边沿可 ...

我需要获得待测信号的频率数值(即频率计),这种方法应该是用于每若干个待测信号周期后执行代码吧
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
121348
QQ
发表于 昨天 09:40 | 显示全部楼层
Penguins 发表于 2026-3-6 13:49
我需要获得待测信号的频率数值(即频率计),这种方法应该是用于每若干个待测信号周期后执行代码吧

对,这样才能速度最大化,若干脉冲后求平均也准确。
回复

使用道具 举报

7

主题

171

回帖

192

积分

初级会员

积分
192
 楼主| 发表于 昨天 16:25 | 显示全部楼层
eric2013 发表于 2026-3-7 09:40
对,这样才能速度最大化,若干脉冲后求平均也准确。

哈?那然后怎么获得待测信号的频率呢?我不需要每多少个周期执行代码啊
回复

使用道具 举报

5

主题

185

回帖

200

积分

高级会员

积分
200
发表于 昨天 18:58 | 显示全部楼层
Penguins 发表于 2026-3-7 16:25
哈?那然后怎么获得待测信号的频率呢?我不需要每多少个周期执行代码啊

直接通过你定时器的输入捕获,输入捕获是可以触发DMA的,让输入捕获在循环模式下,你需要频率数据的时候 直接去读MDA输出的位置就行了 全程不需要关心中间的过程,也不需要开定时器中断 dma中断这些东西。
回复

使用道具 举报

7

主题

171

回帖

192

积分

初级会员

积分
192
 楼主| 发表于 昨天 19:17 | 显示全部楼层
2859932063 发表于 2026-3-7 18:58
直接通过你定时器的输入捕获,输入捕获是可以触发DMA的,让输入捕获在循环模式下,你需要频率数据的时候  ...

问的就是要怎么配置啊,待测高频信号从 ETR 引脚输入,定时器时钟源配置为 ETR2 模式,由谁、如何触发输入捕获呢?
回复

使用道具 举报

7

主题

171

回帖

192

积分

初级会员

积分
192
 楼主| 发表于 7 小时前 | 显示全部楼层

参考测量 低频 信号频率的方法:内部时钟源+PWMI 捕获待测信号
提出测量 高频 信号频率的方法:待测信号作为时钟源+PWMI 捕获已知频率方波
其中已知频率方波由其他定时器输出 PWM 至引脚,短接至测量用定时器的 CH1,
该方法已验证可用,例如生成的已知 PWM 频率为 1 kHz,根据 CCR 值即可确定 1 ms 内待测信号的周期数,即为其频率的 kHz 数,每 1 ms 刷新一次结果。

是否有更优方案,以避免外部硬件连接,使用片内互联实现?

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2026-3-8 07:27 , Processed in 0.406219 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表