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

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

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的操作。

 

敲代码的思路图:

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电脑如何进行屏幕录制?轻松成为视频大咖!

随着电脑的普及以及互联网技术的发展,屏幕录制成为了人们在工作和生活中经常需要面对的问题。无论是录制游戏过程、软件操作教程,还是网络教学视频,都需要进行屏幕录制。可是电脑如何进行屏幕录制呢?本文将介绍两种常见的电脑屏幕…

蓝桥杯-大小写转换

转换方法 toLowerCase() String类的toLowerCase()方法可以将字符串中的所有字符全部转换成小写,而非字母的字符不受影响,语法格式如下: 字符串名.toLowerCase() //将字符串中的字母全部转成小写,非字母不受影响。 package chap…

【vue.js】文档解读【day 1】 | 模板语法1

如果阅读有疑问的话,欢迎评论或私信!! 本人会很热心的阐述自己的想法!谢谢!!! 文章目录 模板语法前言文本插值原始HTML属性Attribute绑定动态绑定多个值 模板语法 前言 Vue 使用一种基于 HTML…

MATLAB2020a安装编译器mingw-64(6.3.0)

MATLAB2020a指定安装mingw-64(6.3.0)版本编译器 记录一下几个要点 mingw-64(6.3.0) 找到对应的mingw-64安装包 设置mingw的bin文件路径到环境变量 变量名:MW_MINGW64_LOC MATLAB设置路径

微信小程序接入百度地图(微信小程序插件)使用文档

第一步配置域名 :在微信公众平台登录后配置服务域名称:https://apis.map.qq.com 第二步申请密钥 申请开发者密钥申请地址 第三步使用插件 选择添加插件 搜索腾讯位置服务地图选点 选择要授权的小程序 授权完毕会在这里显示插件信息 第四步查看使用文档 跳转至文…

【Linux C | 网络编程】广播概念、UDP实现广播的C语言例子

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

关于出国留学和考研比较----以本人双非跨考计算机为例

文章目录 中心论点国内就业现状勿让旧认知害了自己那出国留学真的一无是处了吗?1. 藤校仍旧是具有极高价值2. 时间成本低3. 研究生一定比单纯的本科找工作强!4. 很多人说出国读博好,可以无脑入,真是这样吗? 中心论点 如果在选择出国留学还是国内考研的最终核心诉求都是有更好…

LSTM长短期记忆网

笔记来源—— 【重温经典】大白话讲解LSTM长短期记忆网络 如何缓解梯度消失,手把手公式推导反向传播 LSTM网络结构 RNN结构 下面拉出一个单元结构进行讲解 :记忆细胞,t-1时刻的记忆细胞 :表示状态,t-1时刻的状态 正是这样经过了一个单元&a…

Oracle.xs.dll‘ for module DBD::Oracle: load_file:找不到指定的模块

安装Ora2pg时,碰到 异常现象 D:\ProgramFiles\ora2pg>ora2pg -t show_report --estimate_cost -c ora2pg_conf.dist install_driver(Oracle) failed: Cant load D:/ProgramFiles/strawberry/perl/site/lib/auto/DBD/Oracle/Oracle.xs.dll for module DBD::Oracle: load_fil…

Nginx使用—基础知识

Nginx简介 Nginx优点 高性能、高并发 支持很高的并发,在处理大量并发的情况下,比其他web服务器要高效 轻量且高扩展 功能模块少(源代码仅保留http与核心模块代码,其余不够核心代码会作为插件来安装) 代码模块化(易读&#xff0…

win10虚拟机安装驱动教程

在虚拟机菜单栏中选择安装VMware Tools: 安装好后,在虚拟机中打开此电脑,双击DVD驱动器进行安装: 一直点击下一步: 安装完成: 此时重启虚拟机,发面小屏幕页面的虚拟机自动占满了全部屏幕&#x…

Docker常用基础指令

目录 1 前言 2 常用指令 2.1 获取帮助 2.2 拉取镜像到本地 2.3 对本地镜像进行打包 2.4 对本地镜像的删除 2.5 通过tar包加载本地镜像 2.6 查看所有镜像 2.7 创建新的容器 2.8 查看容器 2.9 停止容器运行 2.10 运行容器 2.11 删除容器 2.12 查看容器日志 2.13 进…

ImportError: Could not import docarray python package解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

springcloud和基础服务的搭建以及封装

代码仓库地址:https://github.com/zhaoyiwen-wuxian/springcloud-common page分页也进行了封装,只需要添加到pom中,将会自动进行分页,并且后端不需要写任何的分页数据。只需要前端自己传分页参数即可,并且里面封装了很…

Clickhouse: 数据基本知识

产品概述 ClickHouse是一个开源的列式数据库管理系统,专门用于在线分析处理(OLAP)场景。它具有高性能、高可靠性、高可扩展性和低成本等优点,被广泛应用于大数据领域。 以下是ClickHouse的主要特点: 高性能&#xff…

挑战杯 基于深度学习的人脸表情识别

文章目录 0 前言1 技术介绍1.1 技术概括1.2 目前表情识别实现技术 2 实现效果3 深度学习表情识别实现过程3.1 网络架构3.2 数据3.3 实现流程3.4 部分实现代码 4 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的人脸表情识别 该项目较…

Unity角色动画变成半跪\半蹲\下沉 的问题

导入的人物动画发生如图形态 解决方法:找到动画模型,Rig - AnimationType 改为Humanoid ,然后Apply一下

Vue+OpenLayers7入门到实战目录

前言 本篇作为《VueOpenLayers7入门到实战》所有文章的二合一汇总目录,方便查找。 本专栏源码是由OpenLayers7.x版本结合Vue框架编写。 本专栏从Vue搭建脚手架到如何引入OpenLayers7依赖的每一步详细新手教程,再到通过各种入门案例和综合性的实战案例&a…

【MySQL】视图、索引

目录 视图视图的用途优点视图的缺点创建视图查看视图修改视图删除视图注意事项 索引索引的原理索引的数据结构二分查找法Hash结构Hash冲突!!! B树二叉查找树 存在问题改造二叉树——B树降低树的高度 B树特点案例继续优化的方向 改造B树——B树…

项目管理工具及模板总结|甘特图|OKR周报|任务管理|头脑风暴

项目管理常用模板大全: 1. 项目组OKR周报 2. 项目组传统周报工作法 3. 项目甘特图 4. 团队名单 5. 招聘跟进表 6. 出勤统计 7. 年度工作日历 8. 项目工作年计划 9. 版本排期 10. 项目组任务管理 11. 项目规划模板 12. 产品分析报告 13. 头脑风暴 软件开发管理全套标…