电机编码器的使用

1.编码器的分类

1.1按检测原理分类
在这里插入图片描述1.1.1光电编码器
使用光电头来检测光栅的位置变化。
特点:精度高,寿命长,难以在恶劣条件下使用。

1.1.2磁编码器
利用霍尔元件来检测磁场的变化。
特点:在灰尘大,有污染的条件下能够正常工作。里面的永磁体在高温,强冲击,高频振动时,会发生退磁,使磁性减弱。电磁干扰和比较强的磁场会产生较大的影响,而电机工作时,恰恰创造了这种环境。

1.1.3感应式编码器:放出磁力线来检测齿轮上的刻度变化。
特点:特殊的条件下能正常工作,价格贵。

1.2按运动方式分类
线性编码器
旋转编码器

1.3按编码类型分类
增量式
绝对式
混合式

2.旋转编码器原理

2.1增量式-旋转编码器
码盘周期性旋转时,光源的光线会周期性地透过和被遮挡。当透过时,光敏装置会产生微弱的信号,信号通过放大电路处理,最后将这些信号输出。
在这描述
在这里插入图片描述

增量式: 只输出位置变化和运动方向

在这里插入图片描述

在这里插入图片描述我们可以通过A B两个波形的相位来判断正反转
Z相可以用于一圈之后对A B相计数的清空

2.2绝对式-旋转编码器
在这里插入图片描述2.3混合式
在这里插入图片描述

3.编码器的数据读取

我们一般接触到的都是增量式的旋转编码器。
3.1倍频计数
在这里插入图片描述
1倍频(×1)即为只检测A或B通道的高电平数量
2倍频(×2)即为只检测A或B通道的上升沿与下降沿的数量
4倍频(×4)即为同时检测A和B通道的上升沿与下降沿的数量

注意:我们只是对采集到的信号进行了处理,原来A和B通道的信号是没有发生任何变化的。

3.2 STM32的编码器接口
TI1和TI2分别连接着编码器的AB相
3.2.1仅在TI1处计数(二倍频)
情况一:此时是向上计数
TI1 是上升,TI2为低电平
TI1 是下降,TI2为高电平
在这里插入图片描述

情况二:此时为向下计数
TI1 是下降,TI2为低电平
TI1 是上升,TI2为高电平
在这里插入图片描述
3.2.2同时在TI1和TI2处计数(四倍频)
把TI1和TI2两个通道都用来计数
在这里插入图片描述

3.3总结
总结来说,就是参考手册中的这张表
在这里插入图片描述
stm32f1的编码器配置代码

void Encoder_Init_TIM3(void)
{
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;  
  TIM_ICInitTypeDef TIM_ICInitStructure;  
  GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);//使能定时器3的时钟
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能PB端口时钟
	
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;	//端口配置
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
  GPIO_Init(GPIOA, &GPIO_InitStructure);					      //根据设定参数初始化GPIOB
  
  TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
  TIM_TimeBaseStructure.TIM_Prescaler = 0x0; // 预分频器 
  TIM_TimeBaseStructure.TIM_Period = ENCODER_TIM_PERIOD-1; //设定计数器自动重装值
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//选择时钟分频:不分频
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM向上计数  
  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
  TIM_EncoderInterfaceConfig(TIM3, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);//使用编码器模式3
  TIM_ICStructInit(&TIM_ICInitStructure);
  TIM_ICInitStructure.TIM_ICFilter = 10;
  TIM_ICInit(TIM3, &TIM_ICInitStructure);
  TIM_ClearFlag(TIM3, TIM_FLAG_Update);//清除TIM的更新标志位
  TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
  //Reset counter
  TIM_SetCounter(TIM3,0);
  TIM_Cmd(TIM3, ENABLE); 
}

计数值在TIM3计时器的CNT寄存器中

Encoder_TIM= (short)TIM3 -> CNT
  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

云影点灯大师

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

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

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

打赏作者

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

抵扣说明:

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

余额充值