STM32编码器接口,如何判断编码器换向呢?

[复制链接]
15392|25
 楼主| inele 发表于 2010-4-21 22:00 | 显示全部楼层 |阅读模式
我们项目需要对编码器计数,但是只以正向计数,对反像计数超过4个脉冲,就是异常状态.

那么哪果分别对正向,和反向分别计数呢? 对是对编码器换向能产生中断,

STM32的编码接口不知道如何实现!
JIANG_WX 发表于 2010-4-22 12:03 | 显示全部楼层
1. SMS=011: 可实现对A和B的边沿同时计数;
2. 编码器换向时DIR位(TIMx_CR1寄存器)的值会改变,但没有中断产生。

从你描述的现象来看,可能是你的定时器没有配置对。
请参照附件中的例程。

example_Encoder.zip

180.08 KB, 下载次数: 737

lxyppc 发表于 2010-4-22 12:13 | 显示全部楼层
本帖最后由 lxyppc 于 2010-4-22 12:15 编辑

不知道楼主电机最大转速是多少,编码器是多少线的
最简单的办法就是定时去读编码器时钟的CNT值,与上一次的作差,正数就是正转,负数就是反转
这个是我在一个机器人项目中用的编码器处理函数,MAX_COUNT与最大转速和编码器线数相关,ENCODER_TIM_PERIOD为编码器Timer的Period值。不用去处理Timer的Update中断

s16   Enc_GetCount(void)
{
  static  u16   lastCount = 0;
  u16  curCount = ENCODER_TIM->CNT;
  s32 dAngle = curCount - lastCount;
  if(dAngle >= MAX_COUNT){
    dAngle -= ENCODER_TIM_PERIOD;
  }else if(dAngle < -MAX_COUNT){
    dAngle += ENCODER_TIM_PERIOD;
  }
  lastCount = curCount;
  return (s16)dAngle;
}
 楼主| inele 发表于 2010-4-22 17:35 | 显示全部楼层
我主要用于编码器计数, 正常情况都是正转计数, 但出现倒转四个脉冲之后就要报警,按楼上的方法,那我要差不多每隔400US左右,去判断一次是不出现,换向,反转,如果超过四个脉冲就停机
gxgclg 发表于 2010-4-22 20:41 | 显示全部楼层
个人觉得这种处理方式不是很合理,实时性较差
tvbfcsl 发表于 2010-8-12 11:33 | 显示全部楼层
大家好 我想问一下就是当我的电机转动到一个速度后 给了一个负向的加速度 也就是反向,但电动机由于惯性太大 这时电动机还是以这个方向运动 但计数器是向上计数 还是向下计数呢
yewuyi 发表于 2010-8-12 14:28 | 显示全部楼层
既然有硬件接口,需要你做的应该就是读数而已了吧!

这还需要那么为难的吗?
tvbfcsl 发表于 2010-8-12 20:50 | 显示全部楼层
虽然问题没解决 还是挺感谢上面的楼主给了我回复
pkat 发表于 2010-8-13 14:33 | 显示全部楼层
问题为啥还没解决呢,出现新的问题了??
zjp8683463 发表于 2011-8-26 11:14 | 显示全部楼层
LZ对反转的实时要求很高,4个脉冲就要停止。
没有特定中断就做不了。
lh0602 发表于 2011-12-12 09:58 | 显示全部楼层
stm32like? 发表于 2012-10-10 17:43 | 显示全部楼层
最近对编码器也有兴趣,看一看
stm32like? 发表于 2012-10-10 17:44 | 显示全部楼层
最近对编码器也有兴趣,看一看
cjluxwd 发表于 2013-4-26 16:09 | 显示全部楼层
理论上定时器设置成编码器模式,电机连接编码器,电机转动就可以通过读该定时器的计数器来读取编码器接收到的脉冲数吗?@lxyppc  
cjluxwd 发表于 2013-4-26 16:10 | 显示全部楼层
理论上定时器设置成编码器模式,电机连接编码器,电机转动就可以通过读该定时器的计数器来读取编码器接收到的脉冲数吗?请各位指点一下!
lxyppc 发表于 2013-4-26 16:16 | 显示全部楼层
cjluxwd 发表于 2013-4-26 16:09
理论上定时器设置成编码器模式,电机连接编码器,电机转动就可以通过读该定时器的计数器来读取编码器接收到 ...

是的。timer的计数值,就是编码器的脉冲数
cjluxwd 发表于 2013-4-26 16:18 | 显示全部楼层
lxyppc 发表于 2013-4-26 16:16
是的。timer的计数值,就是编码器的脉冲数

好的,谢谢你!:)
hawksabre 发表于 2013-4-26 19:17 | 显示全部楼层
问题解决了就好   楼主   
hawksabre 发表于 2013-4-26 19:17 | 显示全部楼层
多逛21ic   基本上没有搞不定的问题   呵呵
cjluxwd 发表于 2013-4-26 19:35 | 显示全部楼层
你好,stm32里面高级定时器配置成编码器接口模式和通用定时器配置成编码器模式是不是一样的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

41

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部