电平输入检测-定时器输入捕获

news2024/9/24 9:21:19

目录

一,引入

二,具体结构

三,实现步骤

四,PWM输入模式


一,引入

        上篇博客,我们对于定时器的计数核心——时基单元作了细致的了解。这篇博文,我们来介绍定时器的四大功能模块之一——输入捕获模块。

        输入捕获模块,顾名思义,当外界有电平输入MCU时,定时器的输入捕获模块能够捕获到电平,进而通过时基单元(计数器),记录捕获的电平的时间、占空比等数据。

        了解了大体功能后,我们来具体了解输入捕获功能的具体结构与实现步骤。

二,具体结构

        图 2.1 为输入捕获功能的框图:

图 2.1 输入捕获模块

        此处,我们以通道 1 为例。

        TIMx_CH1为外界电平输入引脚,TIMx_CHy的定义引脚可在数据手册中的引脚定义目录查看(图2.2)。

图 2.2 引脚定义表

        注意到,在通道1至3上,连接着一个异或门。异或门的功能机理为“相异出1,相同出0”——当异或门的两个(或多个)输入端口的逻辑值不同时(一个为0,另一个为1),输出端口将输出高电平(逻辑1);而当输入端口的逻辑值相同时(都为0或都为1),输出端口将输出低电平(逻辑0)。这个异或门是用来连接三相无刷电机的霍尔传感器的,在此处不作说明。

/*

        本人曾写过一篇博客,介绍无霍尔传感器控制无刷电机换相(无感控制),原文指路:

        四轴-无刷电机无感控制(BLDC)-CSDN博客

*/

        不看异或门:电平通过TIMx_CH1端口进入定时器,通过输入滤波器和边缘检测器后,通过边沿检测,到达预分频器,最后到达捕获/比较寄存器。当发生有效的电平转换时(通过通道1的电平发生翻转,被捕获/比较寄存器检测到),计数器中的值传到捕获/比较寄存器中(输入比较模块框图解释)

        由上述语段,可以发现,捕获/比较寄存器(TIMx_CCRy)既需要检测电平变化,又需要储存计数器中的值,且捕获比较寄存器也有影子寄存器。(关于影子寄存器的内容,可参考本人上一篇博客,指路:机器人是怎么计时的(通用定时器 - 时基单元)-CSDN博客

       

        介绍一下输入捕获的中断。

        当捕获事件发生时,相应的CCxIF标志(捕获比较中断标志,只在需要中断时才有用)被置’1’。如果使能了中断(CCxIE)或者DMA(CC1DE)操作,则将产生中断或者DMA。如果捕获事件发生时CCxIF标志已经为高,那么重复捕获标志CCxOF被置’1’。

        上述文字中所提及的“标志”,都是寄存器中所需  读/写的位  的名称。

        其中,重复捕获标志(CCxOF)的作用是,当捕获事件发生时(有电平进入定时器,CCxIF标志被置1),当正在发生此次事件的中断时,又发生了一次捕获事件。

        为了记录重新发生的捕获事件,提醒用户有一次新的捕获事件未被执行,便有了这个“重复捕获标志”,当然,如果CCxOF被置1后,又有新的捕获事件发生,第三次捕获的数据便会遮盖第二次的捕获数据,毕竟重复捕获标志只有一个。

        关于中断,就是框图上那个像闪电一样的箭头,上面写着“CCxI”。

        

        以上,便是输入捕获通道的具体结构。

        下面,我们介绍实现步骤。

三,实现步骤

        以下,是官方参考手册(不是数据手册)中关于  如何在TI1输入的上升沿时捕获计数器的值到TIMx_CCR1寄存器中:

1,选择有效输入端
        TIMx_CCR1 必须连接到 TI1 输入,所以写入 TIMx_CCR1 寄存器中的CC1S=01,只要 CC1S 不为 ’00’ ,通道被配置为输入,并且 TM1_CCR1 寄存器变为只读(图3.1,位介绍见参考手册)。
图 3.1 输入捕获模式设置寄存器
2,根据输入信号的特点,配置输入滤波器为所需的带宽 ( 即输入为 TIx 时,输入滤波器控制位是 TIMx_CCMRx寄存器中的 ICxF )
        假设输入信号在最多5 个内部时钟周期的时间内抖动,我们须配置滤波器的带宽长于5 个时钟周期。因此我们可以 ( f DTS 频率 ) 连续采样 8 次,以确认在TI1 上一次真实的边沿变换,即在 TIMx_CCMR1 寄存器中写入 IC1F=0011( 图3.1)。
        此处,“抖动”的意思是,一簇电平的长度为5个时钟(5个电平),边沿变换可能在第1个时钟处出现,也可能在第2个时钟处出现,也可以在第3个、第4个、第5个时钟长度处出现。“采样8次”是为了尽可能地捕获时钟的变换,当然,也可以设置更多的采样次数,就可以加大捕获时钟变换的概率。
3,选择 TI1 通道的有效转换边沿,在TIMx_CCER寄存器(图3.2)中写入 CC1P=0( 上升沿 )
图 3.2 捕获/比较使能寄存器
4,配置输入预分频器。
        在本例中,我们希望捕获发生在每一个有效的电平转换时刻,因此预分频器被禁止(写TIMx_CCMR1 寄存器的 IC1PS=00)
        如果不使用分频器的分频功能,在电平跳变的瞬间,捕获比较寄存器就能捕获到电平跳变的信号,而使用了分频功能,就会延迟捕捉信号,具体原理在下列博客中有介绍: 机器人是怎么计时的(通用定时器 - 时基单元)-CSDN博客
5,设置 TIMx_CCER 寄存器的 CC1E=1 ,允许捕获计数器的值到捕获寄存器中。
6,如果需要,通过设置 TIMx_DIER 寄存器(图3.3)中的 CC1IE 位允许相关中断请求,通过设置
TIMx_DIER 寄存器中的 CC1DE 位允许 DMA 请求。

图 3.3 DMA/中断使能寄存器

        通过配置所选寄存器中的特定位的数据,可以使输入捕获模块执行输入捕获的功能。

四,PWM输入模式

        在输入捕获框图中,我们可以看到如图4.1所示的图像:

图 4.1 PWM输入捕获

        此处,我们只介绍TI1FP2,它的功能是,通过通道1的电平,可以同时到达捕获/比较寄存器1和捕获/比较寄存器2。这样,一组含有高低电平的数据进入MCU时,MCU能够同时检测它的高低电平信号的时间数据,图 4.2 说明了双通道测量数据:

图 4.2 双通道测量数据

        通过时序图,我们可以看到通过IC1、IC2分别计数的过程,配置方法如下:

1,选择TIMx_CCR1的有效输入:置TIMx_CCMR1寄存器的CC1S=01(选择TI1)。
2,选择TI1FP1的有效极性(用来捕获数据到TIMx_CCR1中和清除计数器):置CC1P=0(上升沿
有效)。
3,选择TIMx_CCR2的有效输入:置TIMx_CCMR1寄存器的CC2S=10(选择TI1)。
4,选择TI1FP2的有效极性(捕获数据到TIMx_CCR2):置CC2P=1(下降沿有效)。
5,选择有效的触发输入信号:置TIMx_SMCR寄存器中的TS=101(选择TI1FP1)。
6,配置从模式控制器为复位模式:置TIMx_SMCR中的SMS=100。
7,使能捕获:置TIMx_CCER寄存器中CC1E=1且CC2E=1。

        可以看到,PWM输入模式需要配置从模式控制器为复位模式,在一轮计数完成后(计数值达到预设的周期匹配值),计数器中的数据会复位(如图4.2)。而两个输入信号分别配置为上升沿有效与下降沿有效,就能同时记录PWM的高低电平时间。

        以上,便是输入捕获模式的介绍,欢迎交流喔!

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

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

相关文章

无忧微服务:如何实现大流量下新版本的发布自由

作者:项良、十眠 微服务上云门槛降低,用好微服务才是关键 据调研数据显示,约 70% 的生产故障是由变更引起的。在阿里云上的企业应用如茶百道、极氪汽车和来电等,他们是如何解决变更引起的稳定性风险,实现了在白天高流…

如祺出行冲刺上市:三年被罚款270万元,销售费用远高于研发开支

3月26日,Chenqi Technology Limited(如祺出行)再次递交招股书,准备在港交所主板上市,中金公司、华泰国际、农银国际为其联席保荐人。据贝多财经了解,如祺出行曾于2023年8月递表。 相较于此前招股书&#xf…

稀碎从零算法笔记Day32-LeetCode:每日温度

算是引出“单调栈”这种数据结构,后面会用这个思想处理下接雨水问题 前言:单调栈模式匹配——题目中提到“求第一个最大/最小的元素” 题型:栈、单调栈、数组 链接:739. 每日温度 - 力扣(LeetCode) 来源…

企业数据资源入表全攻略:五步法助你轻松驾驭数据新时代

随着数字化浪潮的汹涌而至,企业数据资源已成为推动业务发展的核心动力。然而,如何将这些无形的数据资产转化为有形的企业价值,却是众多企业面临的难题。近日,有关部门发布的“企业数据资源‘五步法’入表路径解析暂行规定”&#…

YOLOv9 实战指南:打造个性化视觉识别利器,从零开始训练你的专属测试集

论文地址:YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information GitHub:WongKinYiu/yolov9: Implementation of paper - YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information (github.com)…

Unity 背包系统中拖拽物体到指定位置或互换位置效果的实现

在Unity中,背包系统是一种常见的游戏系统,可以用于管理和展示玩家所持有的物品、道具或装备。 其中的拖拽功能非常有意思,具体功能就是玩家可以通过拖拽物品图标来移动物品在背包中的位置,或者将物品拖拽到其他位置或界面中&…

Q-Day提前?IBM警告:「量子+AI」将触发巨大风险!

Q-Day,即量子计算机强大到足以破解当前加密方案的时刻,原本被视为一个从近期到长期可能面临的挑战,而非刻不容缓的现实问题。然而,最新的研究发现似乎加速了这一天的到来。 IBM的研究团队在一篇论文中提出,混合量子经典…

linux 区别:mount 一个目录到另外一个目录,目录软链接 (*)

Linux命令200例:mount将文件系统挂载到指定目录下(常用) https://blog.csdn.net/qq_21891743/article/details/132220283 Linux磁盘卸载 https://blog.csdn.net/Mcy7ycM/article/details/124347504 能否通俗易懂,深入浅出地解释…

【数据结构】顺序表的实现——静态分配

🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:数据结构 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进…

ZNB20罗德与施瓦茨ZNB20网络分析仪

181/2461/8938产品概述: 罗德与施瓦茨 ZNB20 矢量网络分析仪具有高达 140 dB 的宽动态范围(在 10 Hz IF 带宽时)、低于 0.004 dB RMS 的低迹线噪声(在 10 kHz IF 带宽时)以及高达 的高输出功率13 dBm,可在…

Zabbix-告警

基本概念 一、介绍 自定义的监控项默认不会自动报警 首页也不会提示错误 需要配置触发器与报警动作才可以自动报警 二、触发器 表达式,如内存不足300M,用户超过30个等 当触发条件发生后,会导致一个触发事件 触发事件会执行某个动作 …

网络编程综合项目-多用户通信系统

文章目录 1.项目所用技术栈本项目使用了java基础,面向对象,集合,泛型,IO流,多线程,Tcp字节流编程的技术 2.通信系统整体分析主要思路(自己理解)1.如果不用多线程2.使用多线程3.对多线…

ssh 公私钥(github)

一、生成ssh公私钥 生成自定义名称的SSH公钥和私钥对,需要使用ssh-keygen命令,这是大多数Linux和Unix系统自带的标准工具。下面,简单展示如何使用ssh-keygen命令来生成具有自定义名称的SSH密钥对。 步骤 1: 打开终端 首先,打开我…

vue前端工程化

前言 本文介绍的是有关于vue方面的前端工程化实践,主要通过实践操作让开发人员更好的理解整个前端工程化的流程。 本文通过开发准备阶段、开发阶段和开发完成三个阶段开介绍vue前端工程化的整体过程。 准备阶段 准备阶段我将其分为:框架选择、规范制…

AI智能分析网关智慧食安监管系统方案

3.15晚会刚过不久,淀粉肠的“屈辱”终于得以洗清,但某些品牌奶茶、梅菜扣肉、预制菜等等,生产过程仍是触目惊心。如何提升食品安全管理水平,保障食品从生产到消费环节的质量和安全?TSINGSEE青犀智利用智能分析网关V4Ea…

mysql--事务四大特性与隔离级别

事务四大特性与隔离级别 mysql事务的概念事务的属性事务控制语句转账示例 并发事务引发的问题脏读脏读场景 不可重复读幻读幻读场景 事务的隔离级别读未提交读已提交可重复读(MySQL默认) 总结 mysql事务的概念 事务就是一组操作的集合,他是一…

x86的内存分段机制

8086 是 Intel 公司第一款 16 位处理器,诞生于 1978 年,所以说它很古老。 一.8086 的通用寄存器 8086 处理器内部共有 8 个 16 位的通用处理器,分别被命名为 AX、 BX、 CX、 DX、 SI、 DI、 BP、 SP。如下图所示。 “通用”的意思是…

幻兽帕鲁服务器多少钱?可真便宜呀

2024年全网最全的幻兽帕鲁服务器租用价格表,阿里云幻兽帕鲁游戏服务器26元1个月、腾讯云32元一个月、京东云26元一个月、华为云24元1个月,阿腾云atengyun.com整理最新幻兽帕鲁专用4核16G、8核16G、8核32G游戏服务器租用价格表大全: 阿里云幻…

8、鸿蒙学习-HAR

HAR(Harmony Archive)是静态共享包,可以包含代码、C库、资源和配置文件。通过HAR可以实现多个模块或多个工程共享ArkUI组件、资源等相关代码。HAR不同于HAP,不能独立安装运行在设备上。只能作为应用模块的依赖项被引用。 一、创建…

【案例·增】获取当前时间、日期(含,SQL中DATE数据类型)

问题描述: 需要使用当前时间、日期,可以使用 SQL 中的 CURDATE() 、NOW()、CURTIME()运算符 案例: INSERT INTO table_name(current_time, column_name2,...) VALUES (NOW(),, ...)规则(Date 相关函数): 规则(Date数据类型)