32单片机基础:TIM输入捕获

news2024/12/25 13:34:18

指定的电平跳变,就是上升沿或者下降沿,可以通过程序设置 

PWMI模式,就是PWM的输入模式,是专门为测量PWM频率和占空比设计的,

可配合主从触发模式

这两个功能结合起来,测量频率占空比就是硬件全自动运行的,如今不需要进行任何干预,也不需要进中断,需要测量的时候,直接读取CCR寄存器就行了。使用非常方便,极大地减轻了软件的压力。

对应定时器的电路部分如下图所示 

四个输入捕获和输出比较通道,共用4个CCR寄存器另外它们的CH1到CH4,4个通道1的引脚,也是共用的。所以对应同一个定时器,输入捕获与输出比较,只能使用其中一个,不能同时使用。

对比一下输入捕获和输出比较:

输出比较,引脚是输出端口,输入捕获,引脚是输入端口

输出比较,是根据CNT与CCR的大小关系来执行输出动作

输入捕获,是接收到输入信号,执行CNT锁存到CCR的动作 

OK,如何配置输入捕获电路来测量这些参数,这就是我们的任务。

我们先了解频率测量的相关知识:32单片机只能测量数字信号,所以其他的信号要通过电路转换为数字信号才行。

闸门时间T通常为1S,在1s时间内,对上升沿计次,每来一个上升沿,计次加1,每来一个上升沿,就是来了一个周期的信号,所以在1s时间内,来了多少个周期,那它的频率就是多少hz。与频率的定义一样。

测周法的基本原理就是,周期的倒数就是频率,如果我们能取出一个周期的时间,取个倒数,就是频率。但是,实际上,我们没有一个精度无穷大的秒表来测时间,测量时间的方法,实际也是定时器计次。我们使用一个已知标准频率fc的计次时钟,来驱动计数器。从一个上升沿开始计,计数器从0开始,一直计到下一个上升沿,停止。计一个数的时间是1/fc,计N个数,时间就是N/fc.N/fc就是周期,再取个倒数,就是频率的计算公式。

对比这两种方法的适用范围:

测频法适合测量高频信号,测周法适合测量低频信号。

测频法测量的是在闸门时间内多个周期,所以自带一个均值滤波。如果在闸门时间内波形频率有变化,那得到的其实是这一段的平均频率,所以测评法结果更新慢,测量结果是一段时间的平均值,值比较平滑

反观测周法,它只测量一个周期,就能测出一次结果,所以出结果的速度取决于待测信号的频率。所以测周法更新速度快。由于只测量一个周期,所以结果值会受噪声的影响,波动比较大。

高频适合使用测频法,低频适合测周法,那多高算高,多低算低呢?这就与中界频率有关了。如上图所示。计算公式也给出来。

测频法如何实现呢?这个用我们之前学过的外设就可以实现,我们之前写过,对射式红外传感器计次,定时器外部时钟。这些代码,稍加改进,就是测频法。比如对射式红外传感器计次,每来一个上升沿,计次加1.那我们再来用一个定时器,定一个1s的定时中断。在中断里,每隔1s取一下计次值。同时清零计次,为下一次做准备。这样每次读取的计次值就直接式频率。对应定时器外部时钟的代码。也是如此,每隔1s取一下计次。就能实现测频法测量频率的功能了,

我们本次使用测周法测量输入捕获频率。

我们再来详细看一下输入捕获的各部分电路。

上图是四个通道的引脚,参考引脚定义表,就能知道这个引脚是复用在哪个位置。引脚进来,就有一个三输入的异或门,这个三输入的异或门接在了通道1,2,3端口。异或门的执行逻辑是,当三个输入引脚有任何一个电平翻转时,输出引脚就产生一次电平翻转,之后通过数据选择器,到达输入捕获通道1.数据选择器选择上面一个,那输入捕获通道1的输入,就是三个引脚的异或值。选择下面一个,那异或门就没有用,4个通道各用各的引脚。设计这个异或门,其实还是为了三相无刷电机服务的。无刷电机有三个霍尔传感器检测转子的位置。可以根据转子的位置进行换相。有了这个异或门。就可以在前三个通道接上无刷电机的霍尔传感器,然后这个定时器就作为无刷电机的接口定时器去驱动换相电路工作。

信号来到输入滤波器和边沿检测器,输入滤波器可以对信号进行滤波。避免一些高频的毛刺信号误触发,然后是边沿检测器,这就和外部中断那里是一样的,可以选择高电平触发,或者低电平触发,当出现指定的电平时,边沿检测电路就会触发后续电路执行动作。 

 这个电路图是设计了两套滤波和边沿检测电路。第一套电路得到TI1FP1(TI1 Filter Polarity 1),输入给通道1的后续电路,。第一套电路得到TI1FP2(TI1 Filter Polarity 2)输入给下面通道2的后续电路。

同理,下面TI2信号进来,也经过两套滤波和极性选择,在这里,两个信号可以选择各走各的,也可以选择进行一个交叉,让CH2引脚输入给通道1,或者CH1引脚输入给通道2,为啥要进行一个交叉选择呢?这样做的目的,主要有两个:第一个目的,可以灵活切换后续捕获电路的输入,比如你一会想以CH1作为输入,一会儿想以CH2作为输入,这样就可以灵活的选择。第二个目的,就是可以把一个引脚的输入,同时映射到两个捕获单元,这也是PWMI模式的经典结构,比如让第一个捕获通道,使用上升沿触发,用来捕获周期,第二个通道,使用下降沿触发,用来捕获占空比。两个通道对同一个频率进行捕获,就可以用来测量频率和占空比,这就是PWMI模式。

TRC信号也可以作为捕获部分的输入,来源是下图,这样设计,也是为了无刷电机的驱动。

进入分频,分频后的触发信号就可以触发捕获电路进行工作了,每来一个信号,CNT的值,就会向CCR转运一次,转运的同时,会发生一个捕获事件,这个事件会在状态寄存器置标志位,同时也可以产生中断,如果需要在捕获的瞬间,处理一些事情的话,就可以开启这个捕获中断 

 

这就是整个电路的工作流程,比如我们可以配置上升沿触发捕获,每来一个上升沿CNT转运到CCR一次,又因为CNT计数器是有内部的标准时钟驱动的,所以CNT的数值,就可以用来记录两个上升沿之间的时间间隔,这个时间间隔,就是周期, 

这样与测周法的操作步骤是一样的,上升沿用于触发输入捕获,CNT用于计数计时,每来一个上升沿,取一下CNT的值,自动存在CCR里,CCR捕获得到的值,就是计数值N,CNT的驱动时钟,就是fc,fc/N就得到了待测信号的频率,另外还有个细节问题,就是每次捕获之后,我们都要把CNT清零一下,这样下次上升沿再捕获时,取出的CNT才是两个上升沿的时间间隔。这个在一次捕获后自动将CNT清零的步骤,我们可以使用主从触发模式,自动来完成。 

 

下图是输入捕获通道1的一个更详细的框图

 

引脚进来,先经过一个滤波器,滤波器的输入是TI1,就是CH1的引脚,输出的TI1F,就是滤波后的信号。fDTS是滤波器的采用时钟来源,下面CCMR1里的ICF位可以控制滤波器的参数,

滤波之后的信号,经过边沿检测器,捕获上升沿和下降沿,可以用这个CCER寄存器的CC1P位就可以选择极性了,最终得到TI1FP1触发信号,通过数据选择器,进入通道1后续的捕获电路 ,CC1S位可以选择数据选择器,ICPS位可以选择分频,CCIE位,控制输出使能或失能。如果使能了输出,输出端产生指定边沿信号,经过层层电路,就可以让CNT的值,转运到CCR里面去。

我们之前说过,每捕获一样CNT的值,都要把CNT清零一下,以便下一次的捕获,在这里硬件电路就可以在捕获之后自动完成CNT清零工作,如何自动清零CNT呢?我们看一下TI1FP1和TI1F_ED信号,都可以通向从模式控制器,从模式里,就有自动完成CNT的清零,

这个滤波器具体是如何工作的呢?我们看一下手册。

 

简单来理解的话,以采样频率对输入信号进行采样,当连续N个值都为高电平,输出才为高电平 

 连续N个值都为低电平,输出才为低电平。如果你信号出现高频抖动,导致连续采用N个值不全都一样,那输出就不会变化,这样达到了滤波的效果,采样频率越低,采样个数N越大,滤波效果越好,下图的这些描述,就是每个参数对应的采用频率和采用个数,实际应用中,如果波形噪声比较大,就可以把这些参数设置大一些,这样就可以滤除过滤噪声了。

我们研究一下主从触发模式:

主从触发模式有什么用,如何完成硬件自动化的操作。

 

 主模式可以将定时器内部的信号,映射到TRGO引脚,用于触发别的外设,

从模式就是接收其他外设或者自身外设的一些信号,用于控制自身定时器的运行,也就是被别的信号控制。

触发源,就是选择从模式的触发信号源的,触发源选择,选择指定的一个信号,得到TRGI,TRGI去触发从模式,从模式可以选择一项操作来自动执行。

我们要CNT自动清零,就可以选择TI1FP1.从模式执行的操作,就可以选择执行Reset的操作。

 

敲代码的思路图:

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1490900.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

奥维云网权威发布 智能水洗集成灶是第四代集成灶

近日,奥维云网权威发布了《2024智能水洗蒸烤集成灶行业发展趋势白皮书》,自此,集成灶行业产品正式进入4.0水洗蒸烤时代! 冠军实力助力行业迭新换代 据《2024智能水洗蒸烤集成灶行业发展趋势白皮书》分析,国内集成灶产…

【Linux实践室】Linux常用命令

🌈个人主页:聆风吟 🔥系列专栏:Linux实践室、网络奇遇记 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 一. ⛳️任务描述二. ⛳️相关知识2.1 🔔Linux文件操作2.1.1 👻创建文件2…

Java对接快递100实时快递单号查询API接口

目录 1.引入依赖 2.定义配置信息 3.模块结构 4.Controller 5.Service实现类 6.返回数据dto以及dto中的数据dto 7.测试运行 今天也是接到了这个任务,官网有小demo,可以下载下来参考test中代码 官方文档地址: 实时快递查询接口技术文档…

探索Python编程世界:从入门到精通

一.Python 从入门到精通 随着计算机科学的发展,编程已经成为了一种必备的技能。而 Python 作为一种简单易学、功能强大的编程语言,越来越受到人们的喜爱。本文将为初学者介绍 Python 编程的基础知识,帮助他们踏入 Python 编程的大门&#xf…

Nexus Repository的搭建

一、前言 Nexus Repository用于管理maven的jar包。java开发程序员每天都在使用,但是自己搭建或者管理的就很少。除非你是系统架构师。因为这一套东西,基本是搭建一次就不需要人来搭建了,日后打开界面维护的机会也很少,我们只需要…

【QT】在窗口中添加按钮

在窗口中添加按钮 创建一个QT程序,首先要做什么? 先创建一个应用程序类创建一个窗口类 在窗口中添加按钮 添加头文件:#include 没有设置按钮标题的函数,是因为它继承了父类,设置标题的函数在父类中。 因为好多子类…

低代码平台开发——基于React(文末送书)

目录 小程一言适用对象本书达成 书籍介绍作者简介内容介绍书籍目录阅读指导 小程送书 小程一言 《低代码平台开发——基于React》这本书主要围绕低代码平台和React技术的结合展开,为读者提供了关于低代码平台开发的理论和实践知识。 ## 书中内容简介 书中内容分为…

[前端][死循环]问题发现[easyui]

文章目录 问题描述问题细节 解决思路综合分析 解决办法 问题描述 页面点击按钮跳转弹窗页面回显出数据 此弹窗页面中有年份,类型等,当选中年份/类型会重新触发回显方法(onSelect 中调用方法),回显对应年份/类型得数据 问题细节 最开始调试…

4G/5G执法记录仪、智能安全帽走国标GB28181接入海康、宇视等大平台,也可走平台与平台对接,以下级平台级联到上级大平台

AIoT万物智联,智能安全帽生产厂家,执法记录仪生产厂家,智能安全帽、智能头盔、头盔记录仪、执法记录仪、智能视频分析/边缘计算AI盒子、车载DVR/NVR、布控球、智能眼镜、智能手电、无人机4G补传系统等统一接入大型融合通信可视指挥调度平台VM…

RabbitMQ如何保证消息不丢

如何保证Queue消息能不丢呢? RabbitMQ在接收到消息后,默认并不会立即进行持久化,而是先把消息暂存在内存中,这时候如果MQ挂了,那么消息就会丢失。所以需要通过持久化机制来保证消息可以被持久化下来。 队列和交换机的…

WebGIS开发0基础必看教程:地图显示——通过行列号来换算出多种瓦片的URL之离线地图

1.前言 在前面我花了两个篇幅来讲解行列号的获取,也解释了为什么要获取行列号。在这一章,我将把常见的几种请求瓦片时的URL样式罗列出来,并且给出大致的解释。 我在这里将地图分为离线地图和在线地图。所谓离线地图,即保存在本地…

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:文本通用)

文本通用属性目前只针对包含文本元素的组件,设置文本样式。 说明: 从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 属性 名称参数类型描述fontColorResourceColor设置字体颜色。 从API version 9开…

亚信安慧AntDB:数据库自主创新的缩影

AntDB作为一款自主研发的数据库系统,具备了国产化升级改造的核心能力。这款数据库系统通过不懈努力和持续探索,实现了从跟随他人到引领潮流的华丽转身。AntDB不仅仅是一种技术产品,更是体现了自主研发能力的缩影,体现了科技企业在…

动态规划:LeetCode第10题 正则表达式匹配

题目: 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 . 和 * 的正则表达式匹配。 . 匹配任意单个字符* 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。 示例 1: …

express+mysql+vue,从零搭建一个商城管理系统10--添加商品

提示:学习express,搭建管理系统 文章目录 前言一、新建models/goods.js二、新建routes/goods.js三、添加goods表四、添加商品总结 前言 需求:主要学习express,所以先写service部分 一、新建models/goods.js models/goods.js con…

(二十一)从零开始搭建k8s集群——kubernates核心组件及功能介绍

前言 Kubernetes是一个可移植、可扩展、开源的平台,用于管理容器化的工作负载和服务,它促进了声明性配置和自动化。Kubernetes容器可以持续开发、集成和部署:可靠且频繁地构建和部署容器镜像,快速有效地回滚;开发与运…

【MGR】MySQL Group Replication快速开始

目录 17.2 Getting Started 17.2.1 Deploying Group Replication in Single-Primary Mode 17.2.1.1 Deploying Instances for Group Replication 17.2.1.2 Configuring an Instance for Group Replication Storage Engines Replication Framework Group Replication Sett…

【Git】项目源码迁移到另一个gitlab(保留原来提交历史记录)

目录 前情提要迁移方案IDEA远程仓库管理团队其他成员切换gitgit命令操作界面 前情提要 公司原来是自己私有部署的gitlab。有了研发云后就希望将代码推送到研发云的代码仓库上。这时候需要迁移并保留原来提交的历史记录。 迁移方案 登录新的gitlab(代码仓库)新建空白项目获取…

hive sql无法停止

排查流程 hive任务停止是调用org.apache.hive.jdbc.HiveStatement的close()方法实现的 其底层是委托给org.apache.hive.service.cli.thrift.TCLIService.Iface客户端实例来实现。 同时,通过JDK动态代理为其织入了synchronized同步机制:其底层是委托给…

进入软件测试行业,这些问题你一定要知道!

很多转行的朋友都会选择进入软件测试开发行业,如果确定进入软件测试开发行业,那么这些问题你一定要知道! 一、软件测试发展前景 1、测试人员与开发人员的配比已经从最初的1:10、1:8,发展到如今的1:3、1:2。未来会继续趋于平衡&…