【嵌入式STM32-08】STM32编码器模式程序代码

11、STM32—编码器接口(代码示例) 编码器接口<1>编码器接口可接收增量(正交)编码器的信号,根据编码器旋转产生的正交信号脉冲,自动控制CNT自增或自减,从而指示编码器的位置旋转方向和旋转速度<2>每个高级定时器和通用定时器都拥有1个编码器接口<3>借用了1和通道2(2)正交编码器。 阅读详情

STM32 Encoder

编码器

STM32F103RCT6
各定时器通道和重映射
/*****************
TIM1_CH1 PA8
TIM1_CH2 PA9
TIM1_CH3 PA10
TIM1_CH4 PA11

TIM2_CH1 PA0, PA15
TIM2_CH2 PA1, PB3
TIM2_CH3 PA2, PB10
TIM2_CH4 PA3, PB11

TIM3_CH1 PA6, PB4, PC6
TIM3_CH2 PA7, PB5, PC7
TIM3_CH3 PB0, PC8
TIM3_CH4 PB1, PC9

TIM4_CH1 PB6
TIM4_CH2 PB7
TIM4_CH3 PB8
TIM4_CH4 PB9

TIM5_CH1 PA0
TIM5_CH2 PA1
TIM5_CH3 PA2
TIM5_CH4 PA3

TIM8_CH1 PC6
TIM8_CH2 PC7
TIM8_CH3 PC8
TIM8_CH4 PC9
****************/
定时器1.8和2.3.4.5有编码器功能,其他没,而且都是通道1.2

void Encoder_Init_TIM4(void)
{
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;  
	TIM_ICInitTypeDef TIM_ICInitStructure;  
	GPIO_InitTypeDef GPIO_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;	
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);    //使能定时器4的时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);   //使能PB端口时钟

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;	//端口配置
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;   //浮空输入
	GPIO_Init(GPIOB, &GPIO_InitStructure);					//根据设定参数初始化GPIOB

	TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
	TIM_TimeBaseStructure.TIM_Prescaler = 0x0;              // 预分频器 
	TIM_TimeBaseStructure.TIM_Period = 799;  //设定计数器自动重装值
	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //选择时钟分频:不分频
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;////TIM向上计数  
	TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
	
	TIM_EncoderInterfaceConfig(TIM4, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising,               TIM_ICPolarity_Rising);//使用编码器模式3
	TIM_ICStructInit(&TIM_ICInitStructure);
	TIM_ICInitStructure.TIM_ICFilter = 10;
	TIM_ICInit(TIM4, &TIM_ICInitStructure);
	
    TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);
 
    NVIC_InitStructure.NVIC_IRQChannel=TIM4_IRQn; 
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01; 
    NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x01; 
    NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
    NVIC_Init(&NVIC_InitStructure);
	
	TIM_ClearFlag(TIM4, TIM_FLAG_Update);                   //清除TIM的更新标志位
	
	//Reset counter
	TIM_SetCounter(TIM4,0);
	//===============================================
	//TIM4->CNT = 799;
	//TIM4->CNT = 0;
	//===============================================
	TIM_Cmd(TIM4, ENABLE); 
}


int circle_count=0;//圈数
void TIM4_IRQHandler(void)   //TIM4中断
{
    if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)  //检查TIM4更新中断发生与否
    {
        if((TIM4->CR1>>4 & 0x01)==0) //DIR==0
            circle_count++;
        else if((TIM4->CR1>>4 & 0x01)==1)//DIR==1
            circle_count--;
    }
		printf("圈数%d\r\n",circle_count);
    TIM_ClearITPendingBit(TIM4, TIM_IT_Update);  //清除TIM4更新中断标志
}


定时器2部分重映射编码器模式

void TIM2_Encoder_Init(void)
{
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;  
	TIM_ICInitTypeDef TIM_ICInitStructure;  
	GPIO_InitTypeDef GPIO_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;	
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);    //使能定时器4的时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB| RCC_APB2Periph_AFIO, ENABLE);   //使能PB端口时钟
	GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2, ENABLE);
	
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);     //禁用JTAG,PA13.14.15 PB4被占用,需关闭JATG

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;	//端口配置
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;   //浮空输入
	GPIO_Init(GPIOA, &GPIO_InitStructure);					//根据设定参数初始化GPIOB
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;	//端口配置
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;   //浮空输入
	GPIO_Init(GPIOB, &GPIO_InitStructure);					//根据设定参数初始化GPIOB

	TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
	TIM_TimeBaseStructure.TIM_Prescaler = 0x0;              // 预分频器 
	TIM_TimeBaseStructure.TIM_Period = 799;  //设定计数器自动重装值
	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //选择时钟分频:不分频
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;////TIM向上计数  
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
	
	TIM_EncoderInterfaceConfig(TIM2, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);//使用编码器模式3
	TIM_ICStructInit(&TIM_ICInitStructure);
	TIM_ICInitStructure.TIM_ICFilter = 10;
	TIM_ICInit(TIM2, &TIM_ICInitStructure);
	
    TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
 
    NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn; 
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01; 
    NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x01; 
    NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
    NVIC_Init(&NVIC_InitStructure);
	
	TIM_ClearFlag(TIM2, TIM_FLAG_Update);                   //清除TIM的更新标志位
	
	//===============================================
	TIM2->CNT = 0;
	//===============================================
	TIM_Cmd(TIM2, ENABLE); 
}

STM32f4日记5之AB相编码器测速实验(TIM定时器的编码器模式使用)_stm32编码器ab相计数(1) 由于光电码盘与电动机同轴,电动机旋转时,检测装置检测输出若干脉冲信号,为判断转向,一般输出两组存在一 定相位差的方波信号。霍尔码盘与电动机同轴,电动机旋转时,霍尔元件检测输出若干脉冲信号,为判断转向,一般输出两组存在一定相位差的方波信号。编码器分为光电和霍尔编码器是一种将角位移或者角速度转换成一连串电数字脉冲的旋转式传感器,我们可以通过编码器测量到位移或者速度信息。3.重要备注:当定时器检测到一个正向脉冲计数值**+1!光电编码器是一种通过光电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器。 阅读详情

相关推荐

【单片机】STM32单片机读取旋转编码器,TIM定时器编码器模式捕获,程序

旋转编码器简单来说,就是会输出2个PWM,依据相位可以知道旋转方向,依据脉冲个数可以知道旋转的角度。一般旋转一圈有一个固定数值的脉冲个数。旋转编码器广泛用于电机、或者角度传感器,STM32的定时器可以直接接入这两个波形获取到信息。前两个引脚(接地和Vcc)用于为编码器供电,我这里采用3.3V的供电。除了以顺时针方向和逆时针方向旋转旋钮外,编码器还有一个开关(低电平有效),按下内部的旋钮可以按下该开关。来自此开关的信号通过引脚3(Switch)获得。最后它有两个输出引脚。

q742971636的博客 9060

STM32代码(不完全)

目录1.内置LED闪烁 1.内置LED闪烁 STM32最小系统板拥有内置LED,连接芯片PC13口 1+.根据cubemx生成代码模板;(网上有详细教程) 2+.在模板的主函数处的while(1)处,填写代码(如图): //HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET)是HAL库中自定义的管脚,可以自行查看 HAL_Delay(50); HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET

weixin_55707373的博客 2290

【STM32学习】——定时器的编码器接口&正交编码器&编码器接口测速代码实操

引入:本实操案例与之前学习外部中断时写的旋转编码器计次的代码实现的功能基本一样,只不过之前的是通过触发外部中断,在中断函数中手动(软件++)进行计次;本代码是通过定时器的旋转编码器接口来自动计次的,使用编码器接口的好处是节约软件资源,避免频繁进中断而只是执行简单的++操作(极大浪费软件资源)。应用场景:编码器测速一般应用在电机控制的项目上,使用PWM波驱动电机,再使用编码器测量电机速度,然后再用PID算法进行闭环控制!注意:一般电机旋转速度比较高,会使用无接触式的霍尔传感器或光栅。

weixin_51658186的博客 3736

STM32 正交编码器代码

/******************** (C) COPYRIGHT 2007 STMicroelectronics ******************** * File Name : stm32f10x_encoder.c * Author : IMS Systems Lab * Date First Issued : 21/11/07 *...

芯创博客 2023

STM32 AB正交编码器程序

STM32 AB正交编码器程序,本人测试成功,有疑问可以联系我,

stm32读取编码器程序

包括很多东西可以自己探索。

STM32旋转编码器应用实例

旋转编码器是一种常用的机械式传感器,广泛应用于需要精确测量角度或位置的场景,如电机控制、人机界面等。STM32单片机提供了多种方式来驱动和读取旋转编码器的信号,本文将详细介绍旋转编码器的工作原理、STM32定时器编码器模式的原理、应用实例以及总结。旋转编码器是一种将机械旋转转换为电信号的传感器,通常用于测量旋转角度或速度。根据输出信号的形式,旋转编码器分为绝对式编码器和增量式编码器。在嵌入式系统中,增量式编码器更为常见,因为它输出的是脉冲信号,适合实时测量。

qq_22560021的博客 4681

零基础搭建机械零件检测系统:基于YOLOv8的PySide6可视化开发全攻略

本文详细介绍了如何从零开始搭建基于YOLOv8的机械零件检测系统,涵盖环境配置、数据集准备、模型训练优化及PySide6可视化界面开发全流程。通过实战案例展示YOLOv8在工业检测中的高效应用,帮助开发者快速实现自动化零件检测解决方案。

weixin_28455801的博客 307

一文搞懂STM32编码器模式:原理、配置、代码实现全解析---STM32 HAL库专栏

本文从编码器的硬件原理出发,深入剖析了STM32定时器编码器模式的工作机制,并通过EC11旋转编码器实验,完整演示了如何配置和使用这一功能。

博主发布的博客主要分布在:​ 《linux专栏》《嵌入式linux驱动开发》《linux系统移植专栏》《linux裸机开发专栏》 《freertos专栏》《STM32 HAL库专栏》 《ROS开发专栏》 ​《产品测评专栏》《Ai智能体专栏》 2793

解决RocketMQ中@Bean配置DefaultMQProducer时的MQClientException问题

本文针对Spring Boot整合RocketMQ时,因在@Bean配置中手动调用DefaultMQProducer的start()方法而引发的MQClientException问题,深入剖析了其根本原因在于生命周期管理冲突。文章提供了简洁有效的解决方案——移除手动启动,让Spring容器自动管理,并给出了完整的配置示例与生产环境最佳实践。

rnn9storyteller的博客 687

SRv6项目实践(三):P4Runtime基础以及交换机控制

在正式介绍P4runtime基础之前,先说一说P4的编译和实现的过程该文件包含了各个表和操作,它们的id用一个索引值来表示,比如a表用b操作,不会直接说用名字为B的操作,而是说用索引为xxx的操作,然后锁定到b上执行相关的功能,其次,用了一个bitwith来描述,要访问的数据的比特长度是多长。p4c编译器将p4编译成两份文件,其中一份是,另一份是,将这两个文件再整合起来,作为配置,放到交换机中。

a1164520408的博客 3410

【嵌入式】STM32计时器编码器接口模式使用

STM32计时器编码器接口模式使用

shortgiraffe的博客 3889

群晖NAS变身私有Git服务器:DS218+部署与TortoiseGit客户端实战指南

本文详细介绍了如何将群晖NAS(如DS218+)变身为私有Git服务器,并配置TortoiseGit客户端实现高效代码管理。通过硬件检查、系统更新、Git Server套件安装及权限配置等步骤,帮助开发者在局域网内搭建安全、高速的代码托管环境,特别适合小团队协作。

weixin_29252171的博客 223

STM32定时器编码器模式应用

1.正交编码器原理 什么是正交?如果两个信号相位相差90度,则这两个信号称为正交。由于两个信号相差90度,因此可以根据两个信号哪个先哪个后来判断方向。如下图所示。编码器输出两个脉冲信号TI1和TI2,TI1超前TI2 90度时,向上计数;TI2超前TI1 90度时,向下计数。 编码器的应用很多,最常用的就是电机测速,以及各种仪器上的旋钮等。 2.STM32CubeMX配置 以STM32F103C8T6为例,该单片机有4个定时器,每个定时器都可以配置为编码器模式,用于编码器计数。以TIM1为例..

zhang062061的专栏 8082

深入解析Vivado FIFO的Standard与FWFT模式:性能对比与应用场景

本文深入解析了Vivado FIFO的Standard与FWFT两种工作模式的核心差异。通过对比数据就绪时机、读延迟、控制逻辑和有效深度等关键特性,并结合图像处理、数据包转发等典型应用场景,为FPGA设计者提供了清晰的选择依据和实战配置指南,帮助优化数据流性能与设计效率。

weixin_29219189的博客 252

激光焦点动态跟踪技术实战大揭秘:电容式与同轴视觉的巅峰对决

激光焦点动态跟踪技术是保证激光加工质量的关键因素。本文对比评测了电容式和同轴视觉两种主流技术:电容式响应速度快、成本低,适合高速稳定加工环境,但易受电磁干扰;同轴视觉精度高、抗干扰强,适合精密加工和复杂工件,但成本较高且处理速度受限。评测结果表明,企业应根据加工需求、预算和环境选择合适技术。未来该技术将向智能化、多技术融合方向发展,为工业应用提供更优解决方案。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 124

第七章-编码器测速 STM32pwm输出 STM32f103c8t6引脚功能 STM32蓝牙通信 STM32 pwm输出 STM32超声波测距 嵌入式软件开发 STM32cubemx 好家伙VCC

PID-速度控制 通过一步一步教学方式 教学如何进行开发,设计内容有stm32f103c8t6最小系统板、单片机课程设计、嵌入式学习路线、嵌入式软件开发、stm32cubemx、stm32f103c8t6引脚功能

qq_46187594的博客 6033

自然语言处理:长文本场景下的关键词抽取实践

自然语言处理:长文本场景下的关键词抽取实践

丨汀、的博客 2076

STM32编码器模式实战:读取电机转速与方向

本文详细介绍了STM32定时器编码器模式的实现方法,用于精确读取电机转速和方向。主要内容包括:硬件连接方案(正交编码器与STM32的接口配置)、CubeMX参数设置(定时器模式、时钟配置)、核心代码实现(初始化、方向判断、转速计算及滤波算法)。通过4倍频技术提高精度,结合移动平均滤波优化数据,最终实现±1RPM精度的电机运动监测。实验验证了方案的有效性,适用于机器人、CNC等需要闭环控制的场景。

嵌入式毕设/课设资料清单(速查手册·文档模板·题库,持续更新)→ 见最新文章 1874

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

STM32:配置定时器为PWM输出模式以及编码器接口模式

一:STM32的高级定时器TIM8配置为PWM输出模式 最近在工程项目中,需要用stm32的定时器 (以高级定时器TIM8为例) 产生两路PWM输出,作为电机的pwm,方案如下: /*************初始化电机控制所需IO口**************/ void Motor_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; ...

既有随处可栖的江湖,也有追风逐梦的骁勇! 5973

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

STM32实战九 编码器

这一章编写编码器程序,通过定时器连接编码器,原理和细器节这里不多说,参考代码段中的网页,有两个注意事项,一是所有网上的参考代码都没有设置第二个通道,默认没有滤波,虽然能用,但是通道2抗干扰能力差,容易造成误计数。二是volatile u8 m_bInterrupt,说明在别处(计时器)会改变这个变量,不优化,因为优化后把很重要的代码删除了,详见setData函数说明。可用5个定时TIM1、TIM3...

hhhh63的专栏 2847

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

STM32单片机定时器编码器模式以及定时器的外部触发模式配置的配置

定时器编码模式的配置 基本配置

weixin_44510408的博客 4179

超越定时中断:STM32 TIM的编码器模式与外部事件计数实战

本文深入探讨STM32 TIM模块的编码器模式与外部事件计数功能,通过实战代码展示如何高效处理高频脉冲信号。重点介绍编码器接口配置、ETR计数实现及抗干扰设计,帮助工程师在电机控制和工业自动化中实现精准计数与可靠测量,大幅提升系统性能与实时性。

transformer2023的博客 963

【STM32--平衡车】编码器——用于测速

其实属于定时器内容,但是都放一块内容太多了~初识 定时器https://blog.youkuaiyun.com/2301_76153977/article/details/154427841?速度、方向、位置想象编码器内有两个马盘,一个接入A相,一个接入B相,有所错开正交编码器输出 A/B 两相脉冲(相位差 90°),TIM2/TIM3 的 CH1/CH2 引脚分别接 A/B 相,定时器会根据 A/B 相的上升 / 下降沿自动增减计数 —— 正转时计数增加,反转时计数减少,无需软件中断处理,硬件自动完成,效率极高。

2301_76153977的博客 1260
上一篇: Git安装和使用
下一篇: 【嵌入式STM32-09】STM32 IIC协议详解
赛博二哈
博客等级 码龄8年 5768粉丝 98原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值