一、简介:

1.名称:

IC,输入捕获

2.电路:

如图为通用定时器框图,下半部分的左半模块,与输出比较部分共用捕获/比较寄存器引脚

3.功能:

当通道输入引脚出现电平跳变时,当前CNT的值,写入CCR中。

4.框图:

信号先进入滤波器,其中ICF寄存器为滤波器参数,数值越大,滤波效果越好

随后进入边沿检测器,用于检测上升沿和下降沿,随后CC1P寄存器,可控制极性。

随后信号来到一个数据选择器,可选择输出到捕获/比较寄存器1的信号来自通道1还是通道2,实际上,输入通道1.2与寄存器1.2是交叉的,即通道1的信号可以同时传给寄存器1和2,通道2也可以。

寄存器ICPS位,用于控制分频器,CC1E位,用于控制输出使能或失能。

主从触发模式:注意到TI1FP1信号,可以链接到从模式控制器,接下来介绍。

5.主从触发模式:

主模式:定时器信号,通过TRGO引脚,控制其他外设。

从模式:外来信号,通过TRGI引脚,控制定时器。

二、频率测量方法:

1.测频法:在闸门时间T内,对上升沿计次为N,f = N/T,适用高频信号

2.测周法,在两个上升沿内,以标准频率fc计次,得到N,f = fc/N,适用低频信号

三、实战:频率测量

1.思路:

运用测周法测频率,让CNT以一定频率计数,当上升沿到来后,CNT的数值记录到CCR中,随后将CNT清零(使用主从触发模式,触发源选择TI1FP1,从模式选择Reset功能)。

CCR的值,就是N,CNT的时钟频率,就是fc,f = fc/N。

2.功能图:

3.代码:IC.c

用PA0输出PWM信号,用PA6(定时器3的通道1)做输入捕获。

#include "stm32f10x.h"                  // Device header/*** 函    数:输入捕获初始化* 参    数:无* 返 回 值:无*/
void IC_Init(void)
{/*开启时钟*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);			//开启TIM3的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);			//开启GPIOA的时钟/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);							//将PA6引脚初始化为上拉输入/*配置时钟源*/TIM_InternalClockConfig(TIM3);		//选择TIM3为内部时钟,若不调用此函数,TIM默认也为内部时钟/*时基单元初始化*/TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;				//定义结构体变量TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;     //时钟分频,选择不分频,此参数用于配置滤波器时钟,不影响时基单元功能TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //计数器模式,选择向上计数TIM_TimeBaseInitStructure.TIM_Period = 65536 - 1;               //计数周期,即ARR的值,越大越好TIM_TimeBaseInitStructure.TIM_Prescaler = 72 - 1;               //预分频器,即PSC的值,此处1MHzTIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;            //重复计数器,高级定时器才会用到TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStructure);             //将结构体变量交给TIM_TimeBaseInit,配置TIM3的时基单元/*输入捕获初始化*/TIM_ICInitTypeDef TIM_ICInitStructure;							//定义结构体变量TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;				//选择配置定时器通道1TIM_ICInitStructure.TIM_ICFilter = 0xF;							//输入滤波器参数,可以过滤信号抖动TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;		//极性,选择为上升沿触发捕获TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;			//捕获预分频,选择不分频,每次信号都触发捕获TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;	//输入信号交叉,选择直通,不交叉TIM_ICInit(TIM3, &TIM_ICInitStructure);							//将结构体变量交给TIM_ICInit,配置TIM3的输入捕获通道/*选择触发源及从模式*/TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1);					//触发源选择TI1FP1TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);					//从模式选择复位//即TI1产生上升沿时,会触发CNT归零/*TIM使能*/TIM_Cmd(TIM3, ENABLE);			//使能TIM3,定时器开始运行
}/*** 函    数:获取输入捕获的频率* 参    数:无* 返 回 值:捕获得到的频率*/
uint32_t IC_GetFreq(void)
{return 1000000 / (TIM_GetCapture1(TIM3) + 1);		//测周法得到频率fx = fc / N,这里不执行+1的操作也可
}

四、实战:占空比测量

1.PWMI模式:

两个通道,同时捕获一个引脚,一个配置为上升沿触发, 另一个配置为下降沿触发,即可同时测量频率与占空比,占空比=CCR1/CCR2。

2.功能图:

3.代码:新IC.c

#include "stm32f10x.h"                  // Device header/*** 函    数:输入捕获初始化* 参    数:无* 返 回 值:无*/
void IC_Init(void)
{/*开启时钟*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);			//开启TIM3的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);			//开启GPIOA的时钟/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);							//将PA6引脚初始化为上拉输入/*配置时钟源*/TIM_InternalClockConfig(TIM3);		//选择TIM3为内部时钟,若不调用此函数,TIM默认也为内部时钟/*时基单元初始化*/TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;				//定义结构体变量TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;     //时钟分频,选择不分频,此参数用于配置滤波器时钟,不影响时基单元功能TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //计数器模式,选择向上计数TIM_TimeBaseInitStructure.TIM_Period = 65536 - 1;               //计数周期,即ARR的值TIM_TimeBaseInitStructure.TIM_Prescaler = 72 - 1;               //预分频器,即PSC的值TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;            //重复计数器,高级定时器才会用到TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStructure);             //将结构体变量交给TIM_TimeBaseInit,配置TIM3的时基单元/*PWMI模式初始化*/TIM_ICInitTypeDef TIM_ICInitStructure;							//定义结构体变量TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;				//选择配置定时器通道1TIM_ICInitStructure.TIM_ICFilter = 0xF;							//输入滤波器参数,可以过滤信号抖动TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;		//极性,选择为上升沿触发捕获TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;			//捕获预分频,选择不分频,每次信号都触发捕获TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;	//输入信号交叉,选择直通,不交叉TIM_PWMIConfig(TIM3, &TIM_ICInitStructure);						//将结构体变量交给TIM_PWMIConfig,配置TIM3的输入捕获通道//此函数同时会把另一个通道配置为相反的配置,实现PWMI模式/*选择触发源及从模式*/TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1);					//触发源选择TI1FP1TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);					//从模式选择复位//即TI1产生上升沿时,会触发CNT归零/*TIM使能*/TIM_Cmd(TIM3, ENABLE);			//使能TIM3,定时器开始运行
}/*** 函    数:获取输入捕获的频率* 参    数:无* 返 回 值:捕获得到的频率*/
uint32_t IC_GetFreq(void)
{return 1000000 / (TIM_GetCapture1(TIM3) + 1);		//测周法得到频率fx = fc / N,这里不执行+1的操作也可
}/*** 函    数:获取输入捕获的占空比* 参    数:无* 返 回 值:捕获得到的占空比*/
uint32_t IC_GetDuty(void)
{return (TIM_GetCapture2(TIM3) + 1) * 100 / (TIM_GetCapture1(TIM3) + 1);	//占空比Duty = CCR2 / CCR1 * 100,这里不执行+1的操作也可
}

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

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

相关文章

Console 纳管 Elasticsearch 9(二):日志监控

前面介绍过 INFINI Console 纳管 Elasticsearch 9(一),进行指标监控、数据管理、DSL 语句执行,但日志监控功能需要结合 Agent 才能使用。现在来实现一下: Agent 需要和 ES 部署到同一机器上,这里是在我本地…

实训十——路由器与TCP/IP模型

补充拓扑图(交换机串联通信)电脑A——交换机S1——交换机S2——电脑B问:A和B如何通信?首先A会将通信的数据封装好,将源端口、目标端口,源地址、目标地址,源MAC、目标MAC封装起来,但是…

【Android】ViewBinding(视图绑定)

一、什么是ViewBindingViewBinding是Android Studio 3.6推出的新特性,旨在替代findViewById(内部实现还是使用findViewById)。通过ViewBinding,可以更轻松地编写可与视图交互的代码。在模块中启用ViewBinding之后,系统会为该模块中的每个 XML…

泛型与类型安全深度解析及响应式API实战

一、泛型通配符&#xff1a;灵活与安全的平衡术 在Java动物收容所系统中&#xff0c;我们常需要处理不同动物类型的集合。通过泛型通配符&#xff0c;可以构建更灵活的API&#xff1a; class Shelter<T extends Animal> {private List<T> animals new ArrayList&l…

Cookie 与 Session概述

在 Web 开发中&#xff0c;会话跟踪是一个核心问题。HTTP 协议是无状态的&#xff0c;这意味着服务器无法直接记住客户端的状态。而 Cookie 和 Session 技术的出现&#xff0c;正是为了解决这一难题。一、Cookie概述Cookie&#xff0c;翻译成中文是小甜点、小饼干的意思。在 HT…

阿里云alicloud liunux3-安装docker

你这个错误&#xff1a;Curl error (35): SSL connect error for https://download.docker.com/linux/centos/8/x86_64/stable/... Error: Failed to download metadata for repo docker-ce-stable: Yum repo downloading error说明你的机器访问 download.docker.com 的 HTTPS …

【世纪龙科技】汽车故障诊断与排除仿真教学软件

在汽车产业智能化、电动化转型加速的今天&#xff0c;汽车维修行业对技术人才的要求已从传统经验型向“理论实践数字化”复合型转变。然而&#xff0c;实车实训成本高、安全隐患大、教学场景受限等问题&#xff0c;始终制约着职业教育的高质量发展。江苏世纪龙科技有限公司立足…

柴油机活塞cad【4张】三维图+设计说明书

1015柴油机活塞结构设计及温度场分析 摘 要 随着科研的进步&#xff0c;内燃机技术得到了快速的发展&#xff0c;低排放高效率的内燃机的发展成为内燃机发展的主要趋势&#xff0c;活塞作为内燃机的主要组成部件&#xff0c;在内燃机中扮演着至关重要的作用。活塞在内燃机中始终…

雪豹大模型驱动效率革命 华鼎冷链科技重构餐饮供应链神经网络

当餐饮行业的开店率高达67.5%、闭店率达61.2%时&#xff0c;供应链该如何进行革新与升级&#xff1f; 在郑州盛大启幕的第三届中国火锅烧烤领潮峰会上&#xff0c;华鼎冷链科技CEO王君以“AI驱动智慧供应链赋能餐饮行业新升级”为主题分享时称&#xff0c;当前餐饮行业高闭店率…

汽车功能安全 -- TC3xx外部看门狗

之前聊过TC3xx SMU关于内部看门狗&#xff08;CPU Watchdog 和Safety Watchdog&#xff09;Alarm的处理方法。 汽车功能安全--TC3xx SMU之看门狗alarm处理 在里面我们提到了这些Alarm关联的功能安全机制&#xff1a; SM[HW]:SCU:ENDINIT_WATCHDOG SM[HW]:SCU:SAFETY_WATCHD…

如何为“地方升学导向型”语校建模?Prompt 框架下的宇都宫日建工科专门学校解析(7 / 500)

如何为“地方升学导向型”语校建模&#xff1f;Prompt 框架下的宇都宫日建工科专门学校解析&#xff08;7 / 500&#xff09; 系列说明 500 所日本语言学校结构化建模实战&#xff0c;第 7 篇。每篇拆解 1 所学校在 Prompt-QA 系统中的建模策略&#xff0c;分享工程经验&#x…

Flutter 入门指南:从基础到实战

介绍 Flutter Flutter 是 Google 开发的开源移动应用软件开发工具包&#xff08;SDK&#xff09;&#xff0c;用于快速在 iOS 和 Android 上构建高质量的原生界面。Flutter 的一大特点是其跨平台功能&#xff0c;让开发者能够使用同一套代码基础为两个平台构建应用。这一点通过…

八字命理:枭印夺食的形成原理与解决办法

枭印夺食(|)含义:原局食神伤官为喜用&#xff0c;印为忌正印/偏印克制了食神/伤官&#xff0c;克制形式可以是盖头/截脚/同在天干或者地支时相克(2)表现症状:emo、敏感、好面子、不敢开口说话、被环境压制(3)症状剖析:印为忌&#xff1d;他人即地狱&#xff0c;不论正印(吉神)还…

数组和对象的深拷贝和浅拷贝的方法

数组和对象的深拷贝、浅拷贝方法有所不同&#xff0c;以下是常见的实现方式&#xff1a;一、浅拷贝方法&#xff08;数组和对象通用/专用&#xff09;浅拷贝只复制表层数据&#xff0c;嵌套的引用类型仍共享内存。1. 数组的浅拷贝- 扩展运算符&#xff08;...&#xff09;&…

【RK3576】【Android14】开发板概述

获取更多相关的【RK3576】【Android14】驱动开发&#xff0c;可收藏系列博文&#xff0c;持续更新中&#xff1a; 【RK3576】Android 14 驱动开发实战指南 1. 引言 RK3576处理器简介&#xff1a; RK3576 是一颗高性能、低功耗的应用处理器芯片&#xff0c;专为ARM PC、边缘计算…

凸优化课程学习笔记(一)

凸优化课程学习笔记(一) 课程:B站清华大学陈剑博士《凸优化基础理论与应用》 优化理论概述 1. 优化序论 定义:凸优化是一门应用极为广泛的学科,主要研究如何对决策问题进行最优选择,探讨最优解的性质,寻找高效的计算方法,并分析这些方法的理论基础与实际应用表现。…

(四)OpenCV——特征点检测与匹配

前言 特征点检测与匹配是计算机视觉中的基础技术&#xff0c;广泛应用于图像拼接、物体识别、三维重建、运动跟踪等领域。OpenCV 提供了多种特征检测与匹配算法的实现。 特征点检测与匹配是计算机视觉中的核心技术&#xff0c;广泛应用于多个领域。以下是其主要应用场景&…

if (a == 1 a == 2 a == 3)返回true的问题思考

引文&#xff1a; 无意中看到了这样的非常规逻辑&#xff0c;在想前后端应该都可以实现&#xff0c;a 是变量&#xff0c;或者操作a时触发了值得改变。 意义&#xff1a; 该问题让我们知道了一切规则都是可以被打破的&#xff0c;世界上的规则都是为了解释某种现象设计的。 题目…

MySQL的索引操作及底层结构浅析

一.索引提高数据库的性能&#xff0c;索引是物美价廉的东西了。不用加内存&#xff0c;不用改程序&#xff0c;不用调sql&#xff0c;只要执行正确的 create index &#xff0c;查询速度就可能提高成百上千倍。但是天下没有免费的午餐&#xff0c;查询速度的提高是以插入、更新…

stm32f4 dma的一些问题

文章目录前言一、使用开发板烧录dma代码不生效问题二、一个工程同时使用uart2、uart3借助dma来传递1.并行。2.DMA "同时工作"的本质3.总线访问的具体含义4.实际效果5.最佳实践5.1 总线传输机制&#xff1a;6.DMA传输中断的问题总结前言 记录一些使用stm32f4 dma过程…