STM32-TIM定时器编码器

目录

一、编码器接口简介

二、正交编码器

三、编码器框图

四、编码器接口基本结构

五、工作模式(库函数第二个参数)

六、实例

6.1 均不反相

6.2 TI1反相

七、开发步骤

八、编码器库函数

九、实验


一、编码器接口简介

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

二、正交编码器

三、编码器框图

四、编码器接口基本结构

五、工作模式(库函数第二个参数)

六、实例

6.1 均不反相

6.2 TI1反相

七、开发步骤

①RCC开启时钟,开启GPIO和定时器的时钟

②配置GPIO,输入模式

③配置时基单元,不分频,自动重装65535,CNT计数

④配置输入捕获单元,滤波器和极性

⑤配置编码器接口模式

⑥调用TIM_Cmd,启动定时器

八、编码器库函数

//定时器编码器接口

void TIM_EncoderInterfaceConfig(TIM_TypeDef* TIMx, uint16_t TIM_EncoderMode,
                                uint16_t TIM_IC1Polarity, uint16_t TIM_IC2Polarity);

第一个参数:选择定时器

第二个参数:选择编码器模式

第三、四个参数:通道1和通道2的电平极性

TIM_ICPolarity_Rising:不反相

TIM_ICPolarity_Falling:反相

九、实验

编码器接口测速

Encoder.c

#include "stm32f10x.h"                  // Device headervoid Encoder_Init(void)
{/*一、RCC开启时钟,开启GPIO和定时器时钟*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);/*二、配置GPIO*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//PA6和PA7输入模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | 	GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);/*三、配置时基单元,不分频*/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 = 1 - 1;	//PSC预分频器值TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;//重复计数器值TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStructure);/*四、配置输入捕获单元(滤波器,极性)*/TIM_ICInitTypeDef TIM_ICInitStructure;TIM_ICStructInit(&TIM_ICInitStructure);TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;TIM_ICInitStructure.TIM_ICFilter = 0xF;//滤波器TIM_ICInit(TIM3,&TIM_ICInitStructure);TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;TIM_ICInitStructure.TIM_ICFilter = 0xF;//滤波器TIM_ICInit(TIM3,&TIM_ICInitStructure);/*五、配置编码器接口模式*/TIM_EncoderInterfaceConfig(TIM3,TIM_EncoderMode_TI12,TIM_ICPolarity_Rising,TIM_ICPolarity_Rising);/*六、启动定时器*/TIM_Cmd(TIM3,ENABLE);
}int16_t Encoder_Get(void)//有符号
{int16_t Temp;Temp = TIM_GetCounter(TIM3);TIM_SetCounter(TIM3,0);return Temp;
}

Encoder.h

#ifndef __ENCODER_H
#define __ENCODER_Hvoid Encoder_Init(void);
int16_t Encoder_Get(void);#endif

mian.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "Timer.h"
#include "Encoder.h"int16_t Speed;int main(void)
{OLED_Init();Timer_Init();Encoder_Init();OLED_ShowString(1,1,"Speed:");while (1){OLED_ShowSignedNum(1,7,Speed,5);//观察CNT计数器值的变化情况}
}void TIM2_IRQHandler(void)
{if(TIM_GetITStatus(TIM2,TIM_IT_Update) == SET){Speed = Encoder_Get();TIM_ClearITPendingBit(TIM2,TIM_IT_Update);}
}

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

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

相关文章

npm ,yarn 更换使用国内镜像源,阿里源,清华大学源

在平时开发当中,我们经常会使用 Npm,yarn 来构建 web 项目。但是npm默认的源的服务器是在国外的,如果没有梯子的话。会感觉特别特别慢,所以,使用国内的源是非常有必要的。 在这里插入图片描述 Nnpm, yarn …

人工智能与量子计算:开启未知领域的智慧之旅

导言 人工智能与量子计算的结合是科技领域的一场创新盛宴,引领我们进入了探索未知领域的新时代。本文将深入研究人工智能与量子计算的交汇点,探讨其原理、应用以及对计算领域的深远影响。 量子计算的崛起为人工智能领域注入了新的活力,开启了…

VUE-脚手架搭建

文章目录 一、概述二、前提准备1. 安装 node-js2. npm 镜像设置3. 安装 vs-code 三、脚手架搭建1. Vue-2 搭建1. Vue-3 搭建 一、概述 官网:http://cn.vuejs.org/ vue 有两个大版本,分别是 vue-2 和 vue-3,目前新项目的话用 vue-3 的会比较多…

语音机器人话术设计重点

要使用语音机器人,首先得要先准备一套业务的话术脚本,这个话术脚本的设计,可能直接决定了语音机器人后续的使用效果。这个脚本的编写一般不是机器人厂家直接能完成的,只有业务的使用方,他们才最了解自己的业务&#xf…

网络互通--三层交换机配置

目录 一、三层交换机的原理 1、概念 2、PC A与不同网段的PC B第一次数据转发过程 3、一次路由,多次转发的概念 4、 三层交换机和路由器的比较 二、利用实验理解交换机 1、建立以下拓扑图​编辑 2、分别配置主机的IP地址,子网掩码、网关等信息 3、…

[论文笔记] chatgpt系列 SparseMOE—GPT4的MOE结构

SparseMOE: 稀疏激活的MOE Swtich MOE,所有token要在K个专家网络中,选择一个专家网络。 显存增加。 Experts Choice:路由MOE:​​​​​​​ 由专家选择token。这样不同的专家都选择到某个token,也可以不选择该token。 由于FFN层的时间复杂度和attention层不同,FFN层的时…

Python将已标注的两张图片进行上下拼接并修改、合并其对应的Labelme标注文件(v2.0)

Python将已标注的两张图片进行上下拼接并修改、合并其对应的Labelme标注文件(v2.0) 前言前提条件相关介绍实验环境上下拼接图片并修改、合并其对应的Labelme标注文件代码实现输出结果 前言 此版代码,相较于Python将已标注的两张图片进行上下拼…

DSP定时器0笔记

首先了解开发板TMS320f28335是150Mhz的频率 定时器结构图和概要 定时器0对应的中断是TINT0 大概是这样,时钟sysclkout 进入和TCR控制时钟进入 ,经过标定计数器(stm32的预分频),标定器挂这自动装载寄存器&#xff0c…

IDEA设置查看JDK源码

问题 我们在查看JDK源码时,可能会遇到这种情况,步入底层查看JDK源码时,出现一堆var变量,可读性非常之差,例如笔者最近想看到nio包下的SocketChannelImpl的write方法,结果看到这样一番景象: pu…

软件测试职业规划

软件测试人员的发展误区【4】 公司开发的产品专业性较强,软件测试人员需要有很强的专业知识,现在软件测试人员发展出现了一种测试管理者不愿意看到的景象: 1、开发技术较强的软件测试人员转向了软件开发(非测试工具开发); 2、业务…

【深入浅出SpringCloud源码探究】「Netflix系列之Ribbon+Fegin」微服务化的负载均衡组件源码剖析与实战开发全流程(Ribbon篇)

微服务化的负载均衡组件源码剖析与实战开发全流程 什么是负载均衡负载均衡的种类服务器端负载均衡(S-LB)客户端负载均衡(C-LB)注解LoadBalancedLoadBalancerAutoConfiguration类LoadBalancerClient类源码分析 ServiceInstanceChoo…

Python爬虫-解决使用requests,Pyppeteer,Selenium遇到网站显示“您的连接不是私密连接”的问题|疑难杂症解决(2)

前言 本文是该专栏的第13篇,后面会持续分享python爬虫案例干货,记得关注。 相信很多同学在处理爬虫项目的时候,会遇到一些网站出现如下图所示的情况: 就是当你不论是使用requests进行协议请求,还是使用自动化框架pyppeteer或者selenium都会出现上图中的情况。这相信会或多…