STM32f4日记5之AB相编码器测速实验(TIM定时器的编码器模式使用)

本文介绍了使用STM32F407ZGT6进行AB相编码器测速的实验,详细阐述了硬件连接、编码器模式在TIM定时器中的应用,以及相关代码实现。通过TIM4配置为编码器模式,结合TIM5计数器获取电机转速,实现了精确的速度测量。实验中还探讨了如何判断电机转动方向和防止脉冲抖动的影响。
该文章已生成可运行项目,

STM32f4日记5之AB相编码器测速实验(TIM定时器的编码器模式使用)
板子:stm32f407zgt6正点原子迷你版
电机参数:减速比 1:90
线数:1170(13乘以90)

作者:shawn
2021.1.28
22:46
All rights reserved

//
鉴于目前网上的教学形态各异,很多带有迷惑、误导性质,所以写这篇文章交流自己的看法,也权当纪录自己的学习经历。
//
如果你觉得对你有帮助,请点赞同,这对我很重要,谢谢。
//
一、器材介绍
准备1.L298N,
2.带AB相编码器的电机,
3.给L298N供电的电源(建议保持电压为12V,博主以前用的供电5.6V左右,pwm波输出很离谱的频率100hz电机转的超快)(可以网购12v的电源适配器,大概4~5元左右,把头子切掉,扒开黑胶套,里面白线负极,红线正极,插市电就可以用,但请注意用电安全
4.杜邦线连接(L298N的介绍可以参考我的STM32日记3之diy小车实验(小车实验一:驱动小车转圈,直走,倒走))
明确:一般L298N输入10khzPWM波,电机功率达到最大
主要器材介绍:
1、电机
最简单判断电机好坏的判断方式就是拿6V左右的电池组加在它两边,看会不会转。(电压太大会烧掉)
在这里插入图片描述

2、AB相编码器
网上介绍如下:
编码器分为光电和霍尔编码器是一种将角位移或者角速度转换成一连串电数字脉冲的旋转式传感器,我们可以通过编码器测量到位移或者速度信息。
编码器从输出数据类型上分,可以分为增量式编码器和绝对式编码器。
从编码器检测原理上来分,还可以分为光学式、磁式、感应式、电容式。常见的是光电编码器(光学式)和霍尔编码器(磁式)。两种(以下介绍为复制内容):
光电编码器是一种通过光电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器。
光电编码器是由光码盘和光电检测装置组成。光码盘是在一 定直径的圆板上等分地开通若干个长方形孔。由于光电码盘与电动机同轴,电动机旋转时,检测装置检测输出若干脉冲信号,为判断转向,一般输出两组存在一 定相位差的方波信号。
霍尔编码器是一种通过磁电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器。
霍尔编码器是由霍尔码盘和霍尔元件组成。霍尔码盘是在一 定直径的圆板上等分地布置有不同的磁极。霍尔码盘与电动机同轴,电动机旋转时,霍尔元件检测输出若干脉冲信号,为判断转向,一般输出两组存在一定相位差的方波信号。
在这里插入图片描述
二、硬件连接
我在做这个实验的时候只使用的L298N的右边一端的out口
1.将L298N的OUT口分别接到电机编码器的M+,M-
2.L298N的ENB接pwm的输出口PF8
3.L298N的两个IN3,IN4接PF2跟PF6
4.单片机跟L298N共地
5.编码器跟单片机共地
6.编码器5V接单片机5V
7.编码器A,B相接单片机的TIM4的CH1跟CH2就是PD12,PD13
三、核心模块TIM定时器编码器模式讲解
参考STM32f4中文参考手册
编码器模式的好处:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
编码器模式是TIM自带的对编码处理的一种特殊的输入捕获模式
好处很直接:
在这里插入图片描述
1.当编码器出现抖动,它能够防止抖动,不影响计数,并且它可以采用四倍频的方法,使得误差减小4倍。
2.能通过检测TIMx_CR1的第四位DIR来判断电机的转动方向:正转还是反转,这功能很强
在这里插入图片描述
3.重要备注:当定时器检测到一个正向脉冲计数值**+1!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!**这很重要划重点
所以我们并不能知道检测一个脉冲用了多少时间,所以还要再开一个定时器。
网上搜到的配置STM32F1编码器模式的方法不适用于F4
四、代码编写
思路:TIM13用来提供10khzPWM波跟占空比
TIM4配置编码器模式来实现对AB相编码器的处理
鉴于所以我们并不能知道检测一个脉冲用了多少时间,所以还要再开一个定时器TIM5
配置TIM4代码如下

void Encoder_Init_TIM4(u16 arr,u16 psc)
{
   
   
GPIO_InitTypeDef GPIO_InitStructure;
	NVIC_InitTypeDef  NVIC_InitStructure;
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  TIM_ICInitTypeDef TIM_ICInitStructure;    

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);    
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);  
		
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12| GPIO_Pin_13;          
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;                    
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;              
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;                
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;                  
  GPIO_Init(GPIOD, &GPIO_InitStructure);                          

  GPIO_PinAFConfig(GPIOD,GPIO_PinSource12,GPIO_AF_TIM4);           
	GPIO_PinAFConfig(GPIOD,GPIO_PinSource13,GPIO_AF_TIM4);           
	
  TIM_TimeBaseStructure.TIM_Period = arr; 	                      
本文章已经生成可运行项目
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@SHAWN_shawn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值