重温STM32基础:定时器(9)- 输入捕获电路和测频方法

发布时间:2026/10/26 18:20:00

重温STM32基础:定时器(9)- 输入捕获电路和测频方法 文章目录输入捕获简介通用定时器电路概览输入捕获电路在哪儿定义STM32F103输入捕获资源分布可配置模式频率测量频率测量方法测频法测周法两种方法比较中介频率代码实现preview输入捕获具体电路分析预告摘要本文围绕 STM32 定时器的输入捕获功能展开先说明输入捕获电路在定时器中的位置、基本定义与 STM32F103 的资源分布再系统梳理频率测量的两种方法——测频法与测周法比较二者在精度、更新速度与抗噪性上的差异并推导出用于选择方法的中介频率 fm。最后结合数据选择器、TIxFPy 信号命名与捕获比较通道电路分析输入捕获的具体工作过程并引出主从触发模式这一后续话题。输入捕获简介通用定时器电路概览输入捕获电路在哪儿下面是STM32F103C8T6的通用定时器TIM2~TIM5定时器的电路图。4个输入捕获和输出比较通道共用了4个CCR 寄存器下图中红框和绿框中间重叠而且它们的通道都是共用的。对于“通道共用”开始我还有点疑惑从图上看输入捕获应该用的是左边的 TIMx_CH1 ~ 4而输出比较用的是右边的TIMx_CH1~4啊为什么说是“共用”上图中左右两边的 CH1指的是同一个物理引脚CH2~4也是如此。这个引脚既可以当输出比较的输出也可以当输入捕获的输入引脚。课程中老师说“对于同一个定时器输入捕获和输出比较中只能有一个功能工作”。这句话似乎不太准确。一个定时器的不同通道应该是可以配置成不一样的功能的只要时基单元兼顾两者因为所有通道的时间基准和ARR是一样的。当然对于一同一个定时器的一个通道同一时刻当然只能用作一个功能。定义来自PPT输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中,可用于测量PWM波形的频率脉冲间隔、占空比电平持续时间等参数输入捕获检测的是跳变有点类似“中断检测”。但是中断检测到之后是通知NVIC向CPU申请中断这里是控制后面的电路把当前CNT的值锁存到CCR寄存器中STM32F103输入捕获资源分布基本定时器没有输入捕获功能通用和高级定时器的通道都具备捕获功能可配置模式来自PPT可配置为PWMI模式,同时测量频率和占空比可配合主从触发模式,实现硬件全自动测量这两个模式配合软件不需要任何干预硬件全自动执行也不需要进中断极大减轻软件压力频率测量这里测量的都是数字信号。如果要测量模拟信号则需要先处理一下把它变成数字信号才能给STM32来比较。处理的方法就是用一个电压比较器我们给电压比较器设置一个参考电压refV当输入电压大于这个refV时比较器输出1当输入电压低于这个refV时比较器输出0这样模拟信号就“数字化”了。当然还要考虑输入电压的大小要在STM32可接受的安全电压范围内。频率测量方法测频法在闸门时间T内对上升沿/下降沿进行计次得到N则频率为 N/T闸门时间一般设置为1s符合“频率”的定义1s内有多少个周期T1这样的话频率就是N但也可以设置为2s或者0.5s等测周法也就是“测量周期的方法得到频率”两个上升沿/下降沿一个周期内以标准频率fc一个频率为fc的定时器计次也就是每1/fc秒为1次得到N次。则两个上升沿的时间为N/fc也就是一个周期是N/fc则频率就是fc/N。两种方法比较下面描述都以上升沿为例也可以是下降沿什么时候用哪个方法取决于这两种方法在什么条件下能够更加可靠。上面的两个方法中N都可能出现正负1的误差。测频法中T内并不是每个周期信号都是完整的。T的结束可能是在两个上升沿之间如上图红线测周法中待测信号的结束上升沿在计次器的两个计次之间如上图右侧绿线正负1的误差是这两种方法固有的误差。所以我们希望它们的公式里的N比较大减小这种这种误差的影响。测频法测频法适合测高频信号希望在闸门时间T内能够捕获多个上升沿数量越多频率估计越准确“极端例子”如果在闸门时间内一个上升沿都没有难道我们认为频率是0么大部分情况不是所以希望被测信号频率尽可能的高让T时间内有更多的上升沿捕获每个闸门时间T才会更新一次频率更新速度比较慢结果值变化比较平滑。而且这个方法自带一个“均值滤波”得到的频率是一个T内的平均频率。测周法测周法适合测低频信号我们希望fc定时器计数器能够有更多的计次那就最好是两个上升沿之间时间长一些也就是周期长一些所以希望被测信号是一个低频信号“极端例子fc为1000Hz待测信号为500Hz那么两个上升沿之间只能计1~2个数如果待测信号为1000Hz可能一个数都计不到。根据公式N0fc/O频率无穷大显然是不对的只测一个周期就可以出一次结果所以测量周期取决于待测频率。每个待测信号周期就会更新结果波动会比较大容易受噪声的影响。中介频率上面说了两种方法的区别高频用测频法低频用测周法。那多高算高多低算低看起来有个“门槛”在这个门槛两边两种方法的精度优势会反转决定用哪个方法的频率门槛怎么算前面提到了N在两个方法中对最终结果误差的影响。可以认为N就是“误差”的一个衡量。我们可以让两个方法的“误差相等”看看这个时候的结果频率是多少那么这个结果频率点就可以认为是这个门槛。把上面公式中的N提取测频法N T × f x N T \times f_xNT×fx​测周法N f c f x N \frac{f_c}{f_x}Nfx​fc​​相等T × f x f c f x T \times f_x \frac{f_c}{f_x}T×fx​fx​fc​​设此时的fx为fm这就是两个方法误差相等的点f m f c T f_m \sqrt{\frac{f_c}{T}}fm​Tfc​​​当待测频率 fm选择测频法当待测频率 fm选择测周法代码实现preview对于两种方法的代码实现测频法可以用外部中断定时器计算外部中断在一段时间内的次数来实现。之前写过类似的代码。测周法会用到输入捕获。后面会具体写这个方法的代码输入捕获具体电路分析数据选择器上图左边橙色如果选择上面的XOR输出则CH1~3任何一个由电平翻转XOR输出就是电平翻转用于三相电机。如果选择器选择下面的则XOR就类似没有用CH1 ~ 3各种输出到各自的输入滤波和边沿检测TRC也是为了三相电机的应用老师在课程中提到一个“input filter edge detector”是有两套输入滤波和边沿检测分别产生TI1FP1和TI1FP2。问了一下AI以及根据后面设置的理解TI1FP1和TI2FP2应该用的是一套滤波器但是在边沿捕获/极性选择中可以设置不同的极性。先解释一下名字TIxFPyTI: timer inputFP: filtered and polarity-selectedx输入通道y准备送向的通道所以名字的解释是由通道x捕获到并经过滤波和极性选择的、送向通道y的信号观察上图的输入的通道可以发现一个通道的信号通过滤波和边沿检测模块应该可以得到极性不同的两个信号这两个信号可以分别进入不同通道的prescalarCCR如红色箭头比如TI1FP1和TI1FP2。这主要目的是一个prescalarCCR通道算周期另一个算占空比。一个通道的prescalarCCR可以接收来自两个通道的信号如紫色箭头比如TI1FP1和TI2FP1。但是这里并不是同时送到被一个prescalarCCR同时使用只是多给一个选择通道1的prescalrCCR可以选择接收CH1的输入也可以另外选择CH2的输入。这样可以带来一些灵活性。当一个输入通道的上升沿被捕获之后会进入prescalar。分频之后的触发信号就可以触发捕获电路工作了每来一个信号CNT的值就会向CCR转运一次。转运的同时会发生一个捕获事件这个事件会在状态寄存器置标志位同时也可以产生中断。如果我们需要在捕获的时候做一些什么事情可以开启这个中断在相应中断回调函数里面做。下图是RM中“捕获比较通道”的示意图里面也注明了哪些寄存器控制哪些模块。测周法的做法输入信号的两个上升沿都会触发CNT向CCR转运一次两次之间的差值就是N。而CNT的频率是我们设置的频率已知就可以根据公式估计输入信号的频率。刚才说到“用两次CNT的差值来算N”但其实还有更简单的做法每次捕获之后清零CNT。做法就是用主从触发模式。预告具体什么是主从触发模式且听下回分解吧。本来想一篇记录完的发现其中有些其他问题。搞一篇有点长。。。
延伸阅读

更多相关文章

2026/10/26 18:20:00

论文的核心概念怎么界定:内涵、外延与相近概念的划界方法

核心概念界定不清,是论文被说"概念混乱"的常见根源。有人写了一段定义就往下走,读者仍不知道这个概念包含哪些、不包含哪些;有人把几个相近概念混着用,前半篇说一个意思、后半篇说另一个意思。界定不是抄一条定义&#…

2026/10/26 18:15:00

《为什么 MySQL 三层 B+ 树能存两千万条数据?》

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 18:15:00

当AI手机普及之后,我们的生活会变成什么样

计划发布:2026年10月25日。资料核验截至2026年10月17日。产品能力按官方披露介绍,不冒充实测;生活与商业变化为有条件的情景分析,不是已经发生的结果。 AI手机普及之后,我们得到的可能不只是一部更好用的手机&#xf…

2026/10/26 19:15:34

YOLOv8检测框绘制:PIL/numpy输入与RGB/BGR坐标还原

做视觉项目时,最容易被低估的往往不是模型推理,而是“把结果画回去”这一步。标题里这个需求很具体:YOLOv8 接受一个 numpy 数组(cv2 风格)或 PIL 图像,在输入的 RGB 图像上绘制检测结果。听起来只是调个画…

2026/10/26 19:15:34

13岁少年AI Coding夺冠:开源数据库与AI编程新趋势

1. 社区嘉年华现场观察:当13岁少年遇上AI Coding那天下午的社区嘉年华主舞台,当主持人宣布AI Coding挑战赛第二名得主是位初中生时,现场爆发的掌声持续了近两分钟。这个穿着校服、身高不足1米6的男孩站在领奖台上,手里紧握着的奖状…

2026/10/26 19:15:34

SpringBoot智能排考系统设计与实现

1. 项目概述:SpringBoot期末考试智能安排系统 期末考试安排一直是高校教务管理中的痛点问题。传统人工排考方式需要教务人员手动协调教室、时间、监考教师等多重因素,不仅耗时耗力,还容易出现考场冲突、资源分配不均等问题。这个基于SpringBo…

2026/10/26 19:15:34

STM32F103内部FLASH数据存储实战:掉电保存与寿命管理

简介:本资源是一套面向嵌入式初学者与STM32开发者的完整FLASH读写实践工程,聚焦STM32F103系列芯片内部Flash的非易失性数据存储实现,解决程序运行中配置参数保存、断电记忆等典型应用痛点。压缩包共156个文件,以70个.h头文件和60个…

2026/10/26 19:15:34

rea架构实践:React生态下的前端工程化解决方案

很多前端项目写着写着就会变得特别拧巴,组件之间互相传参像抛接力棒,状态散落在各个文件里,改一个全局需求得翻遍整个代码库。我这次复盘的项目代号叫 rea,取自 React Ecosystem Architecture,是我基于某个前端框架生态…

2026/10/26 19:10:33

Flutter与OpenHarmony集成开发教育百科图书列表实战

1. 项目概述 Flutter for OpenHarmony 教育百科实战项目中的"图书列表"功能模块,是一个典型的跨平台移动应用开发案例。这个模块需要同时兼顾Flutter框架的跨平台特性与OpenHarmony操作系统的原生能力,实现高性能、高兼容性的教育资源展示界面…

2026/10/26 0:20:20

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/26 1:53:47

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/26 0:20:17

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/26 0:00:48

Nested Learning:解决AI灾难性遗忘的分层记忆架构

1. 为什么AI需要"记忆"能力?在传统深度学习模型中,我们常遇到一个根本性问题:模型在处理新任务时,往往会完全遗忘之前学到的知识。这种现象被业界称为"灾难性遗忘"(Catastrophic Forgetting)。想象一下&#…

2026/10/26 0:00:48

企业级大模型应用:OCR预处理、Dify编排与DeepSeek落地实战

1. 这不是“用大模型”,而是重构工作流的起点“大模型的应用和工具”——这八个字现在被贴在无数技术分享、招聘JD、内部立项书的标题栏里,但绝大多数人点进去后看到的,是零散的API调用示例、几个开源UI截图、或者一句“接入LLM就能降本增效”…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑