江科大/江协科技 STM32学习笔记P17

文章目录

  • 一、TIM输入捕获
    • 输入捕获与输出比较的关系
    • 频率测量
      • 测频法
      • 测周法
    • 输入捕获的电路
      • 异或门的执行逻辑
    • 输入捕获通道
    • 主从触发模式
    • 输入捕获基本结构
    • PWMI基本结构
    • 输入捕获模式测频率
      • main.c
    • 输入捕获模式测占空比
      • main.c


一、TIM输入捕获

在这里插入图片描述

输入捕获与输出比较的关系

在这里插入图片描述

在这里插入图片描述
在输出比较中,CNT和CCR作为比较电路的输入,根据CNT和CCR的大小关系,从通道引脚输出高低电平。
在这里插入图片描述
输入捕获,一旦左边的边沿信号产生,比如上升沿,输入滤波和边沿检测电路就会检测到上升沿,让输入捕获电路产生动作,控制后续电路,让当前CNT的值锁存到CCR寄存器中

频率测量

在这里插入图片描述
对于STM32测频率而言,只能测数字信号,如果要测正弦波,还需要搭建信号预处理电路,比如最简单的是用运放搭建一个比较器,把正弦波转换为数字信号输入给STM32,如果测量的信号电压非常高,需要考虑隔离的问题,比如用隔离放大器、电压互感器等元件隔离高压端和低压端,保证电路的安全。

测频法

适合测量高频信号,测量结果更新的慢,实际上是闸门时间内的平均频率

测周法

适合测量低频信号,测量结果更新的快,周期的倒数就是频率,用标准频率测一个周期,再取倒数

输入捕获的电路

在这里插入图片描述
左边是四个通道的引脚,通道1、2、3端口接了一个异或门。

异或门的执行逻辑

当三个输入引脚的任何一个有电平翻转时,输出引脚就产生一次电平翻转,之后输出通过数据选择器到达输入捕获通道1,数据选择器如果选择上面一个,输入捕获通道1的输入就是三个引脚的异或值,如果选择下面一个,异或门不起作用,四个通道各用各的引脚。异或门的作用是为三相无刷电机服务,无刷电机有3个霍尔传感器检测转子的位置,可以根据转子的位置进行换相,有了这个异或门就可以在前三个通道接上无刷电机的霍尔传感器,定时器就作为无刷电机的接口定时器,驱动换相电路工作。

在这里插入图片描述

接着输入信号来到了输入滤波器和边沿检测器,输入滤波器可以对输入信号进行滤波,避免高频毛刺信号误触发,边沿检测器可以选高电平或低电平触发,每一个通道都设计两套滤波和边沿检测电路, 第一套电路经过滤波和极性选择,得到TI1FP1,输入给通道一的后续电路,第二套电路经过另一套波和极性选择得到TI2FP2,输入给下面通道2的后续电路,下面同理。
就CH1和CH2来说,两个信号可以各走各的,也可以交叉让CH2引脚输入给通道1,或CH1引脚输入给通道2。这样做的目的第一可以通过数据选择器灵活切换后续捕获电路的输入,第二可以把一个引脚的输入同时映射到两个捕获单元,是PWMI模式的经典结构,PWMI模式简单来说第一个捕获通道使用上升沿触发,用来捕获周期,第二个通道用下降沿触发,用来捕获占空比,两个通道同时对一个引脚进行捕获,就可以同时测量频率和占空比了。
在这里插入图片描述

再接着看预分频器,每个通道各一个,可以选择对前面的信号进行分频,分频后的触发信号可以触发捕获电路进行工作,每来一个触发信号,CNT的值就会向CCR转运一次,转运的同时发生一个捕获事件,事件会在状态寄存器置标志位,同时也可以产生中断,如果需要在捕获的瞬间处理一些事,就可以开启这个捕获中断,这就是整个电路的工作流程。
举个例子,配置上升沿触发捕获,每来一个上升沿,CNT转运到CCR一次,又因为CNT计数器是由内部的标准时钟驱动的,所以CNT的数值可以用来记录两个上升沿之间的时间间隔(周期),取倒数就是测周法测量的频率了。另外注意每次捕获之后都要把CNT清零,这样下次上升沿再捕获时取出的CNT才是两个上升沿的时间间隔,这个操作可以用主从触发模式自动完成。

输入捕获通道

在这里插入图片描述
TI1就是CH1的引脚,TI1F就是滤波后的信号, f D T S f_{DTS} fDTS是滤波器的采样时钟来源,CCMR1寄存器里的ICF位可以控制滤波器的参数,滤波器的工作原理就是以采样频率对输入信号进行采样,当连续N个值都为高电平,输出才为高电平,连续N个值都为低电平,输出才为低电平,如果信号出现抖动导致连续采样N个值不全一样,输出则不变,达到滤波效果。采样频率越低,采样个数N越大,滤波效果越好。
滤波后的信号通过边沿检测器,捕获上升沿或下降沿,用CCER寄存器里的CC1P位,就可以选择极性了,最终得到TIFP1触发信号,通过数据选择器进入通道1后续的捕获电路,CC1S位可以对数据选择器进行选择,之后ICPS位可以配置分频器,最后CC1E位控制输出使能或失能,如果使能了输出,输入端产生指定边沿信号,经过层层电路到最后,让CNT的值转运到CCR里,而每捕获一次CNT的值,都要把CNT清零一下,便于下次捕获,如何自动清零CNT,首先TI1FP1信号和TI1的边沿信号都可以通向从模式控制器,比如TI1FP1信号的上升沿触发捕获,上面还可以同时触发从模式,从模式里有电路可以自动完成CNT清零

主从触发模式

在这里插入图片描述
主模式可以将定时器内部的信号,映射到TRGO引脚,用于触发别的外设
从模式就是接收其他外设或者自身外设的一些信号,用于控制自身定时器的运行,也就是被别的信号控制
触发源选择就是选择从模式的触发信号源,选择指定的一个信号得到TRGI,然后去触发从模式,如果想让TI1FP1信号自动触发CNT清零,触发源选择就可以选中TI1FP1,从模式执行的操作,可以选择执行Reset的操作
注意触发源选择只有TI1FP1和TI1FP2,没有TI3和TI4的信号,如果想用从模式自动清零CNT,就只能用通道1和通道2,对于通道3和通道4就只能开启捕获中断,在中断里手动清零

输入捕获基本结构

在这里插入图片描述
CNT是测周法中计数的东西,经过预分配后的时钟频率,就是驱动CNT的标准频率fc,标准频率=72M/预分频系数。下面是输入捕获通道1的GPIO口,输入一个左上角的方波信号,经过滤波器和边沿检测,选择TI1FP1为上升沿触发,之后输入选择直连的通道,分频器选择不分频,当TI1FP1出现上升沿之后,CNT的当前计数值转运到CCR1,同时触发源选择,选中TI1FP1为触发信号,从模式选择复位操作,这样TI1FP1的上升沿也会通过上面一路触发CNT清零,CNT的值转到CCR,0转移到CNT。电路工作时,CCR1的值始终保持为最新一个周期的计数值N, f c / n f_c/n fc/n就是信号的频率

PWMI基本结构

在这里插入图片描述
PWMI模式,使用两个通道同时捕获一个引脚,可以同时测量周期和占空比。首先TI1FP1配置上升沿触发,触发捕获和清零CNT,正常地捕获周期,再来一个TI1FP2,配置为下降沿触发,通过交叉通道触发通道2的捕获单元,就是在下降沿时CCR2捕获此时的CNT计数值(高电平期间的计数值),不触发CNT清零,这样一个周期后CCR1是一整个周期计数值,CCR2是高电平期间的计数值,CCR2/CCR1就是占空比

输入捕获模式测频率

main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "PWM.h"
#include "IC.h"int main(void)
{/*模块初始化*/OLED_Init();		//OLED初始化PWM_Init();			//PWM初始化IC_Init();			//输入捕获初始化/*显示静态字符串*/OLED_ShowString(1, 1, "Freq:00000Hz");		//1行1列显示字符串Freq:00000Hz/*使用PWM模块提供输入捕获的测试信号*/PWM_SetPrescaler(720 - 1);					//PWM频率Freq = 72M / (PSC + 1) / 100PWM_SetCompare1(50);						//PWM占空比Duty = CCR / 100while (1){OLED_ShowNum(1, 6, IC_GetFreq(), 5);	//不断刷新显示输入捕获测得的频率}
}

输入捕获模式测占空比

main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "PWM.h"
#include "IC.h"int main(void)
{/*模块初始化*/OLED_Init();		//OLED初始化PWM_Init();			//PWM初始化IC_Init();			//输入捕获初始化/*显示静态字符串*/OLED_ShowString(1, 1, "Freq:00000Hz");		//1行1列显示字符串Freq:00000HzOLED_ShowString(2, 1, "Duty:00%");			//2行1列显示字符串Duty:00%/*使用PWM模块提供输入捕获的测试信号*/PWM_SetPrescaler(720 - 1);					//PWM频率Freq = 72M / (PSC + 1) / 100PWM_SetCompare1(50);						//PWM占空比Duty = CCR / 100while (1){OLED_ShowNum(1, 6, IC_GetFreq(), 5);	//不断刷新显示输入捕获测得的频率OLED_ShowNum(2, 6, IC_GetDuty(), 2);	//不断刷新显示输入捕获测得的占空比}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PMP--冲刺--易混概念

文章目录 十大知识领域一、整合管理项目管理计划与项目文件的区分: 二、范围管理三、进度管理赶工与快速跟进的区分:赶工增加资源,以最小的成本代价来压缩进度工期;快速跟进,将正常情况下按顺序进行的活动或阶段改为至…

秋招突击——算法训练——8/1——用友集团笔试

文章目录 引言正文小友的生产线个人实现参考实现 小友策划游戏人物个人实现参考实现 最佳工作任务安排个人实现参考实现 大众评分最高的一次旅程 总结 引言 今天晚上七点钟到九点钟是用友集团的笔试,作为今天算法练习的主要内容!具体怎么样,…

Python练习2

文章目录 主要内容一.Python基础练习题1.密码验证合格程序代码如下(示例): 2.两数之和代码如下(示例): 3.字符个数统计代码如下(示例): 总结 主要内容 Python基础练习题 一.Python基础练习题 1.密码验证合…

频率的工程测量01 - Rif算法的构造

1.原始文档 《用于正弦波频率估计的修正I-Rife算法》,王哲文,2024 DOI: 10. 16337/j. 1004‑9037. 2024. 02. 019 1.1 这篇论文所属的自科基金U21A20500:近5年所承担的重要科研项目表-智能感知系统与安全教育部重点实验室&#…

lua学习(1)

vscode打开c或者lua文件 插件显示禁用,怎么开启插件。 1. lua 字符串 单个引号和双引号都可变量的定义默认是全局的删除一个变量将其赋值为nil即可 如: bnilnil还可以对表中的数据进行删除,也可删除一个表只要变量不是nil,变…

c语言第七天笔记

作业题: 设计TVM(地铁自动售票机)机软件。 输入站数,计算费用,计费规则,6站2元,7-10站3元,11站以上为4元。 输入钱数,计算找零(找零时优先找回面额大的钞票)&#xff0…

Nat网络地址转换实验

一、实验拓扑 二、实验要求 三、实验思路 四、实验展示 1.接口IP配置 telnet路由器 r1 r2 r3 pc2 2.全网可达(给边界路由器,私家路由器写上缺省 ,还要用到nat地址转换,多对多一对多,端口映射)因为左右…

华为LTC流程体系详解

LTC,全称Lead to Cash,中文翻译为从线索到现金,是一种企业运营管理思想,也是一个集成的业务流程。它涵盖了企业从接触客户到收到客户回款的整个流程,通过科学化管理,实现更高效地将线索客户转化为付费客户。…

说说ip地址和mac地址的区别

随着互联网的飞速发展,网络连接已成为我们日常生活中不可或缺的一部分。然而,在享受网络带来的便利时,你是否曾好奇过那些让设备能够相互通信的关键技术?IP地址与MAC地址,作为网络通信中的两大基石,它们各自…

3D生物打印咋实现?重组弹性蛋白来助力!

Human-Recombinant-Elastin-Based Bioinks for 3D Bioprinting of Vascularized Soft Tissues是发表于《ADVANCED MATERIALS》上的一篇文章,介绍了一种基于重组人原弹性蛋白的生物墨水,用于3D生物打印复杂软组织。该生物墨水由GelMA和MeTro组成&#xff…

[Docker][Docker Container]详细讲解

目录 1.什么是容器?2.容器命令1.docker creatre2.docker run3.docker ps4.docker logs5.docker attach6.docker exec7.docker start8.docker stop9.docker restart10.docker kill11.docker top12.docker stats13.docker container inspect14.docker port15.docker c…

设施农业“AutoML“时代:大模型自动调参,让农业算法模型更简单易用

(于景鑫 北京市农林科学院智能装备技术研究中心)设施农业是现代农业的重要发展方向,但在数字化、智能化的进程中仍面临诸多挑战。传统的农业算法模型虽然可以为设施农业提供一定的决策支持,但在实际应用中往往受限于参数调优复杂、模型泛化能力差等因素。…

实例分割-Yolact/Yolact++训练自己数据集

前言 本文主要用于记录实例分割模型yolact和yolact的环境配置,以及成功训练自己数据集的整个过程~ 注意:这里要重点提醒一下,DCNv2对RTX系列不友好,我第一次使用4090服务器,编译持续有问题,被迫放弃&#…

window安装elasticsearch和可视化界面kibana

ElasticSearch 官网下载zip安装包并解压 Elasticsearch:官方分布式搜索和分析引擎 | Elastic 修改配置文件 改选项是指定ssl访问还是普通http访问 不改的话使用http访问不了,得使用https 浏览器访问 localhost:9200 Kibana Download Kibana Free |…

Android Listview notifyDataSetChanged() 不起作用

private ArrayList<Map<String, String>> data new ArrayList<Map<String, String>>(); private ArrayList<Map<String, String>> delivered_data new ArrayList<Map<String, String>>(); 如果直接将arraylist 的数据直接…

机器学习-31-多变量异常检测LOF算法(实战)

一文读懂异常检测 LOF 算法(Python代码) 1 LOF算法 一个经典的异常检测算法:局部离群因子(Local Outlier Factor),简称LOF算法。 Local Outlier Factor(LOF)是基于密度的经典算法(Breuning et. al. 2000), 文章发表于SIGMOD 2000, 到目前已经有3000+的引用。 在LOF之前…

人大高瓴发布Think-on-Graph 2.0,基于知识图的大模型推理再升级!

经常参加高考的朋友可能会体会到&#xff0c;比起死记硬背知识点&#xff0c;将知识整理成脉络往往会获得事半功倍的效果。其实对于大模型来说也是如此&#xff0c;哪怕被允许“开卷作答”&#xff0c;即通过检索增强&#xff08;Retrieval-augmented generation&#xff0c;RA…

HCIP学习作业一 | HCIA复习

要求&#xff1a; R1-R2-R3-R4-R5 RIP 100 运行版本2 R6-R7 RIP 200 运行版本1 1.使用合理IP地址规划网络&#xff0c;各自创建环回接口 2.R1创建环回 172.16.1.1/24 172.16.2.1/24 172.16.3.1/24 3.要求R3使用R2访问R1环回 4.减少路由条目数量&#xff0c;R1-R2之间…

【AD域】搭建AD域服务器

环境 服务器&#xff1a;Windows Server 2016 Standard&#xff0c;版本1607 准备 1、设置主机名 2、配置静态IP地址 3、以本地管理员权限登录服务器 步骤 1、在服务器添加【Active Directory】域服务功能 2、AD域服务器配置

fastjson-小于1.2.47绕过

参考视频&#xff1a;fastjson反序列化漏洞3-<1.2.47绕过_哔哩哔哩_bilibili 分析版本 fastjson1.2.24 JDK 8u141 分析流程 分析fastjson1.2.25更新的源码&#xff0c;用JsonBcel链跟进 先看修改的地方 fastjson1.2.24 if (key JSON.DEFAULT_TYPE_KEY && !…