STM32f103入门(8)TIM输入捕获输入捕获测频率PWMI测占空比

TIM输入捕获

  • 频率测量
  • 输入捕获基本结构
  • PWMI基本结构
  • 主从触发模式
  • 输入捕获测量频率
  • PWMI测占空比

频率测量

在这里插入图片描述

输入捕获基本结构

在这里插入图片描述
CNT计数一个周期,转运到CCR1里面去,CNT=0
这时候CCR1=N
Fx=Fc/N Fc cnt的驱动时钟 这时候就可以得到频率 Fc=72M/PSC

PWMI基本结构

在这里插入图片描述
这里用到了两个CCR2 CCR2用来记录高电平时候的cnt 正好为总数的占空比
CCR2/CCR1 就是占空比

主从触发模式

在这里插入图片描述

输入捕获测量频率

由于我们是测量频率,是要修改频率的
我们之前都是修改占空比,修改的是CCR,这里不同
频率=72M/(PSC+1)/(ARR+1)
PSC 和 ARR都可以调节频率
但是占空比=CRR/ARR+1 ,如果调节ARR会影响到占空比
而通过PSC则不会影响占空比

单独修改PSC的函数为

void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode)
TIM2  PSC的值、重装模式(立刻,还是周期结束)

第一步 RCC开启时钟
GPIO 和 TIM的时钟打开
第二步 GPIO初始化,把GPIO配置成输入模式 一般是上拉输入
第三步 配置时基单元,让cnt计数器在内部时钟的驱动下自增运行
第四步 配置输入捕获单元包括滤波器,极性,直连通道,交叉通道,分频器这些参数
一个结构体
第五步 选择从模式的触发源 触发源选择为TI1FP1
第六步 选择触发之后执行的操作,执行reset操作
最后 调用 TIM_CMD 开启定时器

IC 输入捕获常用函数

TIM_ICInit 输入捕获的初始化函数  只可以1个通道  41 通用 结构体里区别
TIM_PWMIConfig 也是初始化  可以两个同时
TIM_OCStructInit 可以给输入捕获结构体一个初始值
TIM_SelectInputTrigger 选择触发源TRGI 从模式的触发源选择
TIM_SelectOutputTrigger 选择主模式输出的触发源
TIM_SelectSlaveMode 选择从模式配置四个 分频器
void TIM_SetIC1Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);
void TIM_SetIC2Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);
void TIM_SetIC3Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);
void TIM_SetIC4Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);
void TIM_SetClockDivision(TIM_TypeDef* TIMx, uint16_t TIM_CKD);输出比较下 CCR只写
void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1);
void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2);
void TIM_SetCompare3(TIM_TypeDef* TIMx, uint16_t Compare3);
void TIM_SetCompare4(TIM_TypeDef* TIMx, uint16_t Compare4);输入捕获下 CCR只读
分别读取四个通道的CCR
uint16_t TIM_GetCapture1(TIM_TypeDef* TIMx);
uint16_t TIM_GetCapture2(TIM_TypeDef* TIMx);
uint16_t TIM_GetCapture3(TIM_TypeDef* TIMx);
uint16_t TIM_GetCapture4(TIM_TypeDef* TIMx);
uint16_t TIM_GetCounter(TIM_TypeDef* TIMx);

本次代码需要注意的点

TIM3 对应的四个通道为PA6 PA7 PB0 PB1
GPIO引脚设置为上拉输入 IPU  PA6
为了让cnt更好的计数 而不被重载 我们需要把ARR设置为65536-1

输入捕获单元结构体配置
结构体从滤波开始 每一部分都对应了图片的一个模块

TIM_ICInitTypeDef TIM_ICInitStructure;
TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;  //设置通道1 PA6
TIM_ICInitStructure.TIM_ICFilter = 0xF;//滤波 连续的高电平 为 高电平,采样频率很高    
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;//极性   边沿检测 机型选择 rising or falling
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; // 分频器 不分频
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //配置数据选择器,直连通道还是交叉通道  这里是直连  交叉为indirectTI
TIM_ICInit(TIM3, &TIM_ICInitStructure);

配置 TRGI的触发源为TI1FP1

	TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1);//配置从模式为Reset 清除CNTTIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);/*TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1)是一个函数调用,用于选择定时器 TIM3 的输入触发源。在这种模式下,选择了 TI1FP1 作为触发源。
TI1FP1 是一个特定的触发源选择,它指的是使用 TIM3 输入捕获通道 1 (TI1) 的上升或下降沿来触发定时器。这意味着当输入捕获通道 1 上出现一个上升或下降沿时,TIM3 定时器将会被触发。
具体地,当 TI1FP1 触发条件满足时,TIM3 可能执行一些预定义的操作,例如开始一个计时操作、启动/停止测量等。触发操作的具体行为取决于你的代码实现。
要注意的是,使用 TIM_SelectInputTrigger 函数只是选择了触发源。在使用时,你还需要配置相应的引脚和定时器相关的参数,以确保触发源的正确连接和正常工作。*/

PWMI测占空比

TIM3 增加通道3
输出捕获单元设置为交叉通道,下降沿触发
因为在上升沿结束时 cnt 清零 所以过了半个周期到了下降沿 CCR2=CNT=总的1半
然后到了上升沿CCR=CNT=总的
最后占空比的时候就时
CCR2/CCR1 经过测量 CCR总是计数少一
所以需要+1
(CCR2+1)/(CCR+1)

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

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

相关文章

全新UI站长在线工具箱系统源码带后台开源版

该系统的全开源版本可供下载,并且支持暗黑模式。 系统内置高达72种站长工具、开发工具、娱乐工具等功能。此系统支持本地调用API,同时还自带免费API接口, 是一个多功能性工具程序,支持后台管理、上传插件、添加增减删功能。 环…

Metinfo6.0.0任意文件读取【漏洞复现】

文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现代码审计漏洞点 1.5、深度利用EXP编写 1.6、漏洞挖掘1.7修复建议 1.1、漏洞描述 漏洞名称:MetInfo任意文件读取 漏洞简介:MetInfo是一套使用PHP和MySQL开发的内容管理系统,其…

Unity——资产包(Asset Bundles)

对很多单机游戏来说,游戏的所有资源往往是与游戏本体一同发布的,资源部西药独立出来。但对于大型商业项目来说,游戏产品还需要再发布之后进行维护和更新,这就引出了Unity资产包的概念 一、资产包(Asset Bundles&#x…

linux操作系统中环境变量详解

目录 1.环境变量的基本概念 2.查看环境变量 3.PATH 4.root和普通用户的HOME 5.和环境变量相关的命令 6.环境变量的组织方式 6.1通过代码获取环境变量 6.2通过第三方变量environ获取 6.3通过系统调用获取环境变量 6.4通过系统调用设置环境变量 1.环境变量的基本概念 …

【研究开源机器臂】(1):参加机器人展览,突然来了兴趣要做个机器臂来研究下,先进行产品调研。研究其他人的方案,进行技术调研。

1,关于 6 轴机器人开源项目 使用步进电机做的开源机器人项目: https://github.com/SkyentificGit/SmallRobotArm 按照这个关键字进行搜索,已经有很多人研究成功了。 3D打印6轴机械臂-自制 2,然后是小点的 3 轴机器人 github项…

Docker 的快速使用

ubuntu安装 centos安装 安装完毕之后执行一下这条命令,可以避免每次使用docker命令都需要sudo权限 sudo usermod -aG docker $USER阿里云docker镜像加速 DockerHub 遇到不懂或者不会使用的命令可以使用docker --help查看文档 docker --help 如: dock…

[ES]二基础 |

一、索引库操作 1、mapping属性 mapping是对索引库中文档的约束,常见的mapping属性包括: 1)type:字段数据类型,常见的简单类型有: ①字符串:text(可分词的文本)、keyword(精确值&#xff0c…

一款不能错过的Git客户端:Fork for Mac,让你的代码管理更便捷

Fork for Mac是一款强大的Git客户端,让用户在Mac电脑上更方便地进行版本控制和代码管理。它具有以下特点: 易用性:Fork for Mac界面简洁明了,操作简单易懂,让用户可以快速上手。功能强大:支持各种Git功能&…

thinkphp6 入门(3)--获取GET、POST请求的参数值

一、Request对象 thinkphp提供了Request对象,其可以 支持对全局输入变量的检测、获取和安全过滤 支持获取包括$_GET、$_POST、$_REQUEST、$_SERVER、$_SESSION、$_COOKIE、$_ENV等系统变量,以及文件上传信息 具体参考:https://www.kanclou…

python编写MQTT订阅程序

Download | Eclipse Mosquitto 1、下载: https://mosquitto.org/files/binary/win64/mosquitto-2.0.17-install-windows-x64.exe 2、安装: 3、conf配置 1)使用notepad打开“C:\Program Files\mosquitto\mosquitto.conf”另存为c:\myapp\msquitto\mo…

Leetcode107. 二叉树的层序遍历 II

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 输入:root [3,9…

剑指 Offer 44. 数字序列中某一位的数字(中等)

题目: class Solution { //本题单纯找规律,要注意通过n%digits来判断有几个位数为digits的数 public:int findNthDigit(int n) {long base 9, digits 1; //digits代表位数while(n-base*digits>0){ //该循环是为了确定目标数字所在…