STM32通用定时器-脉冲计数(编码器模式)及电机测速原理

本文详细介绍了STM32单片机如何利用编码器进行电机测速,包括编码器的工作原理、接口配置、计数操作、相关寄存器以及代码示例,展示了如何通过计频方法计算电机的速度。

一、知识点

1. 编码器
  两相编码器(正交编码器):两相编码器由 A 相和 B 相组成,相位差为 90 度。当旋转方向为顺时针时,A 相先变化,然后 B 相变化;当旋转方向为逆时针时,B 相先变化,然后 A 相变化。通过检测相位差变化,可以确定旋转的方向。STM32 单片机可以使用定时器的正交编码器模式(Encoder Mode)来实现两相编码器的接口。
在这里插入图片描述

2. 编码器接口
  编码器的两个输入引脚,就是每个定时器的CH1和CH2引脚,CH3和CH4不能接编码器。
  最终的实验现象,编码器有两个输出,一个是A相,一个是B相,然后接入到STM32,定时器的编码器接口,编码器的接口自动控制定时器时基单元中的CNT计数器,进行自增或自减。比如初始化之后,CNT初始值为0,然后编码器右转,CNT就++,右转产生一个脉冲,CNT就加一次,比如右转产生10个脉冲后,停下来,那么这个过程CNT就由0自增到10,停下来,编码器左转,CNT就–,左转产生一个脉冲,CNT就自减一次, 比如编码器再左转产生5个脉冲,那CNT就在原来10的基础上自减5,停下来。
  编码器接口,其实就相当于是一个带有方向控制的外部时钟,同时控制着CNT的计数时钟和计数方向,这样CNT的值就表示了编码器的位置。如果我们每隔一段时间取一次编码器的值,再把CNT清零,那么每次取出来的值就表示了编码器的速度。
  编码器测速实际上就是测频法测正交脉冲的频率,CNT计次,然后每隔一段时间取一次计次,这就是测频法的思路。编码器计次能根据旋转方向,不仅能自增计次还能自减计次,是一个带方向的测速。
每个高级定时器和通用定时器都拥有1个编码器接口。

二、框图

在这里插入图片描述
  
在这里插入图片描述
  

三、编码器计数操作

在这里插入图片描述
  解释:当Tl1先产生脉冲,Tl2后产生脉冲。(A相先变化,B相后变化)时电机正转,计数器开始计数CNT++。当产生毛刺时,CNT不计数。Tl2先产生脉冲,Tl1后产生脉冲。(B相先变化,A相后变化)时电机反转,计数器CNT- -。当产生毛刺时不计数。

  
在这里插入图片描述
  解释:在TL1和TL2上计数时:当Tl1FP1信号为上升沿,且相对信号(Tl2)为高电平状态,则为向下计数,即CNT- -。若Tl2FP2信号在上升沿,且相对信号(TL1)为高电平,则为向上计数,即CNT++。各类信号状态与计数关系请查看上表。

四、相关寄存器

1. 第①部分对应寄存器

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 第②部分对应寄存器

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

五、代码编写

1. 库函数编写

void Encoder_Init_TIM4(void)
{
   
   
	GPIO_InitTypeDef GPIO_InitStructure; //定义一个引脚初始化的结构体  
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;//定义一个定时器初始化的结构体
	TIM_ICInitTypeDef TIM_ICInitStructure; 
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值