打印

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

[复制链接]
13268|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

使用特权

评论回复
板凳
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左右,去判断一次是不出现,换向,反转,如果超过四个脉冲就停机

使用特权

评论回复
5
gxgclg| | 2010-4-22 20:41 | 只看该作者
个人觉得这种处理方式不是很合理,实时性较差

使用特权

评论回复
6
tvbfcsl| | 2010-8-12 11:33 | 只看该作者
大家好 我想问一下就是当我的电机转动到一个速度后 给了一个负向的加速度 也就是反向,但电动机由于惯性太大 这时电动机还是以这个方向运动 但计数器是向上计数 还是向下计数呢

使用特权

评论回复
7
yewuyi| | 2010-8-12 14:28 | 只看该作者
既然有硬件接口,需要你做的应该就是读数而已了吧!

这还需要那么为难的吗?

使用特权

评论回复
8
tvbfcsl| | 2010-8-12 20:50 | 只看该作者
虽然问题没解决 还是挺感谢上面的楼主给了我回复

使用特权

评论回复
9
pkat| | 2010-8-13 14:33 | 只看该作者
问题为啥还没解决呢,出现新的问题了??

使用特权

评论回复
10
zjp8683463| | 2011-8-26 11:14 | 只看该作者
LZ对反转的实时要求很高,4个脉冲就要停止。
没有特定中断就做不了。

使用特权

评论回复
11
lh0602| | 2011-12-12 09:58 | 只看该作者
mark

使用特权

评论回复
12
stm32like?| | 2012-10-10 17:43 | 只看该作者
最近对编码器也有兴趣,看一看

使用特权

评论回复
13
stm32like?| | 2012-10-10 17:44 | 只看该作者
最近对编码器也有兴趣,看一看

使用特权

评论回复
14
cjluxwd| | 2013-4-26 16:09 | 只看该作者
理论上定时器设置成编码器模式,电机连接编码器,电机转动就可以通过读该定时器的计数器来读取编码器接收到的脉冲数吗?@lxyppc  

使用特权

评论回复
15
cjluxwd| | 2013-4-26 16:10 | 只看该作者
理论上定时器设置成编码器模式,电机连接编码器,电机转动就可以通过读该定时器的计数器来读取编码器接收到的脉冲数吗?请各位指点一下!

使用特权

评论回复
16
lxyppc| | 2013-4-26 16:16 | 只看该作者
cjluxwd 发表于 2013-4-26 16:09
理论上定时器设置成编码器模式,电机连接编码器,电机转动就可以通过读该定时器的计数器来读取编码器接收到 ...

是的。timer的计数值,就是编码器的脉冲数

使用特权

评论回复
17
cjluxwd| | 2013-4-26 16:18 | 只看该作者
lxyppc 发表于 2013-4-26 16:16
是的。timer的计数值,就是编码器的脉冲数

好的,谢谢你!:)

使用特权

评论回复
18
hawksabre| | 2013-4-26 19:17 | 只看该作者
问题解决了就好   楼主   

使用特权

评论回复
19
hawksabre| | 2013-4-26 19:17 | 只看该作者
多逛21ic   基本上没有搞不定的问题   呵呵

使用特权

评论回复
20
cjluxwd| | 2013-4-26 19:35 | 只看该作者
你好,stm32里面高级定时器配置成编码器接口模式和通用定时器配置成编码器模式是不是一样的?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

41

帖子

0

粉丝