TIM-编码器—STM32

news2024/11/15 16:45:10

TIM-编码器—STM32

在这里插入图片描述

EncoderInterface 编码器接口
编码器接口可接收增量(正交) 编码器的信号,根据编码器旋转产生的正交信号脉冲,自动控制CNT自增或自减,从而指示编码器的位置、旋转方向和旋转速度
每个高级定时器和通用定时器都拥有1个编码器接口两个输入引脚借用了输入捕获的通道1和通道2

在这里插入图片描述
方波的频率就代表了速度.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第一步,RCC开启时钟,开启GPIO和定时器的时钟
第二步,配置GPIO,这里需要把PA6和PA7配置成输入模式
第三步,配置时基单元,这里预分频器我们一般选择不分频;自动重装,一般给最大65535,只需要个CNT执行计数就行了
第四步,配置输入捕获单元;不过这里输入捕获单元只有滤波器和极性这两个参数有用
第五步,配置编码器接口模式
最后,调用TIM_Cmd,启动定时器
在这里插入图片描述

#include "stm32f10x.h"                  // Device header

void Encorde_Init(void)
{
	//第一步开启时钟,初始化RCC,选择TIM2
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);	
	//第二步
	//设置输出PWM的GPIO端口
		//使能GPIOA的时钟 
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);	
	//GPIOA模式初始化
	GPIO_InitTypeDef GPIO_InitStruct;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;//上拉输入
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStruct);
			
	//第三步配置时基单元
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;//时钟分频系数 1分频
	TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;//计数的模式 向上计数
	//频率为1KHz,占空比为50%的PWM波形
	//计数器溢出频率:CK CNT_OV = CKCNT /(ARR + 1)= CK PSC /(PSC + 1)/(ARR +1)
	//配置定时为1s,则CK CNT_OV=1;CKCNT=72MHz=72000000;
	TIM_TimeBaseInitStruct.TIM_Period = 65536 - 1;//周期,ARR自动重装器的值 范围0~65536 设置为最大值,防止溢出
	TIM_TimeBaseInitStruct.TIM_Prescaler = 1 - 1;//PSC预分频器的值 范围0~65536 不分频
	TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0; //重复计数器的值 高级计数器才有
	TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);
	
	//第四步,配置输入捕获单元。包括滤波器、极性、直连通道还是交又通道、分频器这些参数
	TIM_ICInitTypeDef TIM_ICInitStruct;
	//为了防业结构体中出现不确定值可能会造成的问题;用Structlnit给结构体赋一个初始值
	TIM_ICStructInit(&TIM_ICInitStruct);
	
	TIM_ICInitStruct.TIM_Channel = TIM_Channel_1;//选择通道 选择TIM3的通道1
	TIM_ICInitStruct.TIM_ICFilter = 0xF;//用来配置输入捕获的滤波器。数越大滤波效果越好
//	TIM_ICInitStruct.TIM_ICPolarity = TIM_ICPolarity_Rising;//上升沿触发 上升沿参数代表的是高低电平极性不反转
	TIM_ICInit(TIM3,&TIM_ICInitStruct);
	//不需要重新定义新的结构体了
	TIM_ICInitStruct.TIM_Channel = TIM_Channel_2;//选择通道 选择TIM3的通道2
	TIM_ICInitStruct.TIM_ICFilter = 0xF;//用来配置输入捕获的滤波器。数越大滤波效果越好
//	TIM_ICInitStruct.TIM_ICPolarity = TIM_ICPolarity_Rising;//上升沿触发 上升沿参数代表的是高低电平极性不反转
	TIM_ICInit(TIM3,&TIM_ICInitStruct);
	
	//第五步,配置编码器接口模式
	//Encoder函数位于ICInit函数的下面
	TIM_EncoderInterfaceConfig(TIM3,TIM_EncoderMode_TI12,TIM_ICPolarity_Rising,TIM_ICPolarity_Rising);
	
	//调用TIM_Cmd,启动定时器
	TIM_Cmd(TIM3,ENABLE);
}

//想用这个编码器来测速的话;就可以在固定的闸门时间;读一次CNT,然后把CNT清零
int16_t Encorde_Get(void)
{
	int16_t Temp;
	Temp = TIM_GetCounter(TIM3);//读一次CNT
	TIM_SetCounter(TIM3,0);//把CNT清零
	return Temp;
}


#ifndef _ENCORDE_H
#define _ENCORDE_H

void Encorde_Init(void);
int16_t Encorde_Get(void);


#endif

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

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

相关文章

transformer在计算机视觉中的应用

Transformer 在计算机视觉中的应用 论文地址: https://arxiv.org/abs/1706.03762 Vision Transformer An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale 代码地址: https://github.com/google-research/vision_transfor…

总结840

学习目标: 5月(完成张宇强化18讲,背诵25篇短文,熟词僻义300词基础词) 每日必复习(5分钟) 看了进步本中的一道数列题 学习内容: 暴力英语:继续艾玛沃特森的演讲&#…

Winsw实现springboot的jar包的windows服务,实现开机自启动

在windows上运行Springboot打包jar,如何后台运行及注册成Windows服务? 一、确认.NET Framework版本 1、在地址栏上输入“C:\Windows\Microsoft.NET\Framework”,按回车键 2、可以看到.NET Framework版本。可以看到最高版本为4.0 二、winsw &…

node 开发

文章目录 快速认识node开始使用node编程hello world模块和包什么是模块创建和加载模块创建包node.js 的包管理本地模式 和全局模式创建全局连接包的发布 调试 快速认识node 开始使用node编程 hello world 打开你的文本编辑器,在上面输入: console。l…

【Java EE】-使用Fiddler抓包以及HTTP的报文格式

作者:学Java的冬瓜 博客主页:☀冬瓜的主页🌙 专栏:【JavaEE】 分享: 在满园弥漫的沉静的光芒之前,一个人更容易看到时间,并看到自己的身影。——史铁生《我与地坛》 主要内容:使用FIddler抓包的…

船舶建造概论(船舶建造工艺任务与现代造船模式)

船舶建造概论 1 船舶建造概论1.1 船舶建造工艺主要任务1.2 船舶建造流程(1)钢材料预处理(2) 钢材料加工(3)分段制作(4)总段制作(5)船台合拢(6&…

【漏洞复现】Apache Superset 未授权访问漏洞(CVE-2023-27524)

文章目录 前言声明一、Apache Superset 简介二、影响范围三、漏洞复现四、整改建议 前言 Apache Superset 存在未授权访问漏洞,攻击者可利用该漏洞验证和访问未经授权的资源。 声明 本篇文章仅用于漏洞复现与技术研究,请勿利用文章内的相关技术从事非法…

2.计算机基础

文章目录 1.冯诺依曼体系结构(1)冯诺依曼体系结构思想(2)五大部件介绍(3)现代计算机逻辑架构 2.现代计算机硬件图 和 CPU(1)现代计算机硬件图(2)CPU运算器结构…

微软正式宣布 Win10 死刑,Win11 LTSC要来了

微软在 2015 年带来了 Windows 10,PC 操作系统也由此进入到一个新的篇章。 如此前每代新系统一样,Windows 10 发布之初,稳定性不足,BUG 众多。 全新的界面设计、交互逻辑以及操作习惯上的强行改变让其很长一段时间都不那么受待见。…

static的常见用法

参考链接:https://blog.csdn.net/guotianqing/article/details/79828100 C语言 作用:提高代码的模块化,提高代码的可读性。 普通的局部变量:在最开始的时候不会进行初始化,存储在栈空间,使用完毕就会释放…

100ASK_全志V853-PRO开发板 环境配置及编译烧写

0.前言 本章主要介绍关于100ASK-V853-PRO开发板的Tina SDK包的下载和编译打包生成镜像,并将镜像烧录到100ASK-V853-PRO开发板上。在进行100ASK-V853-PRO开发板的环境配置前需要获取配置虚拟机系统,可以参考:https://dongshanpi.com/Dongshan…

「蓝桥杯」扫地机器人

扫地机器人 题目描述 小明公司的办公区有一条长长的走廊,由 N 个方格区域组成,如下图所示。 走廊内部署了 K 台扫地机器人,其中第 i 台在第 A_i 个方格区域中。已知扫地机器人每分钟可以移动到左右相邻的方格中,并将该区域清扫干…

图的着色学习

图的边着色 排课表问题:设有m位教师,n个班级,教师xi要给班级yj上pij节课,求如何在最少节次排完所有课。 图论模型:令X{x1,x2,…,xm},Y{y1,y2,…,yn},xi与yj间连pij条边,得偶图G(X,…

【prism系列】子窗口中如何实现区域(Region)管理

前言 在之前系列文章《Region的用法》中,我提到无法在子窗口中实现区域管理,最近经过尝试发现其实是可以的,只是少了一个步骤而已!Region具体细节还请参考这篇。 【Prism系列】Region的用法_prism region_code bean的博客-CSDN博…

一文全览各种 ES 查询在 Java 中的实现

ElasticSearch 进阶:一文全览各种 ES 查询在 Java 中的实现 以下为摘录自用,非本人撰写 本文基于elasticsearch 7.13.2版本,es从7.0以后,发生了很大的更新。7.3以后,已经不推荐使用TransportClient这个client&#xf…

浅谈自动驾驶技术

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和…

【Linux】5. 开发工具的使用(gcc/gdb/makefile)

Linux编译器-gcc/g使用 1. 复习编译链接过程 2. 理解选项当中的含义 这些选项难记住,怎么办? – ESc - iso(对应) gcc选项 -E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面-S 编译到汇编语言不进行汇编和链接-c 编译到目标代码-o …

基于OpenHarmony开发的健康生活应用(ArkTS)

健康生活应用(ArkTS) 介绍 本篇Codelab介绍了如何实现一个简单的健康生活应用,主要功能包括: 用户可以创建最多6个健康生活任务(早起,喝水,吃苹果,每日微笑,刷牙&#…

【python语法大练习】【题库】Python 基础练习题库大全

【题库】Python 基础练习题库大全 编程题1. 从键盘输入两个数,求它们的和并输出2. 从键盘输入三个数到a,b,c中,按公式值输出 (input().split())3. 输出“人生苦短,我学Python”4. 计算 111213...m (sum函数)5. 计算分段函数[1] (format)6. 阶…

Ubuntu连接Xshell

Ubuntu连接Xshell 1、安装ssh,开启服务 1、安装ssh sudo apt-get install openssl-server 2、启动ssh服务 /etc/init.d/ssh start 3、修改文件,允许远程登陆 sudo vi /etc/ssh/sshd_config PermitRootLogin prohibit-password #默认为禁止登录 PermitR…