打印

对于一个时时刻刻输出角度的传感器,怎么判断它转过的圈数?

[复制链接]
1867|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
camdw|  楼主 | 2013-9-2 17:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
tyw| | 2013-9-2 17:37 | 只看该作者
在传感器输出轴上贴白色标记,用反射式红外探头检测周信号并计数.

使用特权

评论回复
板凳
camdw|  楼主 | 2013-9-2 17:39 | 只看该作者
tyw 发表于 2013-9-2 17:37
在传感器输出轴上贴白色标记,用反射式红外探头检测周信号并计数.

不允许增加器件,只能够依靠现有条件,也就是传感器有时时刻刻输出当前角度和旋转方向~不允许增加别的情况

使用特权

评论回复
地板
tyw| | 2013-9-2 18:04 | 只看该作者
本帖最后由 tyw 于 2013-9-2 18:50 编辑

那就定义0度为周信号进行计数
若有反转动作,就根据方向对周信号进行加减.

前提是在设备首次运行时,你得把0度位置确定下来(即机械结构退到起点位置时,你定义为0度),因为传感器是不标示刻度的.
tmd,谁这么尺烂污设计的,屁股也不好盖.哈哈

使用特权

评论回复
5
ichenqiang| | 2013-9-2 18:42 | 只看该作者
camdw 发表于 2013-9-2 17:39
不允许增加器件,只能够依靠现有条件,也就是传感器有时时刻刻输出当前角度和旋转方向~不允许增加别的情 ...

转动方向是不是确定的。如果不确定的话,对计数就要进行判断。

使用特权

评论回复
6
chunyang| | 2013-9-2 19:31 | 只看该作者
用软件判断,过零为依据。

使用特权

评论回复
7
camdw|  楼主 | 2013-9-2 20:35 | 只看该作者
ichenqiang 发表于 2013-9-2 18:42
转动方向是不是确定的。如果不确定的话,对计数就要进行判断。

转动方向是知道的,但是过零的方法我想了下是有问题的,这才是我来这里请教的原因!
因为转速是不定的,假如第一次采样的时候是10度,转的比较快,下次是15度,实际已经转过一圈了~  

使用特权

评论回复
8
maychang| | 2013-9-2 20:49 | 只看该作者
camdw 发表于 2013-9-2 20:35
转动方向是知道的,但是过零的方法我想了下是有问题的,这才是我来这里请教的原因!
因为转速是不定的, ...

这就要求你的采样间隔时间不能太长,要比编码器以最快速度旋转的周期小很多才行。
电子技术,总比机械运动要快,而且快得多。你的编码器旋转总不会超过每分钟一万转吧?那么每秒是166转。每毫秒采样一次没有困难吧?一毫秒至少可以执行几千条指令了。

使用特权

评论回复
9
蚊音若雷| | 2013-9-3 09:34 | 只看该作者
camdw.:你好!首先你要了解你的编码器是哪种。如果是增量编码器一般会有一个Z信号输出。这个z就是周计数脉冲,每一周一个脉冲,当单片机或DSP或PLC接收到这个信号时将A,B正交脉冲计数值复位。这样就是作为零点来计数了。如果你用的是绝对值式的编码器就不需要了,它是掉电保存数据的。对每个位置都有一个确定的数值输出。(当然这里有单圈和多圈)的编对值编码器。好像没有你说的没有z售号的编码器啊!你仔细看一下编码器的手册。

使用特权

评论回复
10
camdw|  楼主 | 2013-9-3 11:43 | 只看该作者
本帖最后由 camdw 于 2013-9-3 11:52 编辑
蚊音若雷 发表于 2013-9-3 09:34
camdw.:你好!首先你要了解你的编码器是哪种。如果是增量编码器一般会有一个Z信号输出。这个z就是周计数脉 ...


感谢回复!编码器的确有Z相脉冲,只不过它是固定一个位置点输出的(我专门做了测试,假如在这个点反复摆动,脉冲就反复输出,对于转过圈数就没什么意义了)!而起始的位置是任意的,还要去单独计算起始位置和Z序脉冲的偏转角,所以这个Z脉冲只好用来作参考!我自己考虑了一种计数方法,适用于转速不是非常快的情况

s16  R_PreviousAngle=0;
s16  R_CurrentAngle=0;
u8   PulseDirection;

R_CurrentAngle=ENC_Get_Electrical_Angle(); // (0~180度对应0~32767,181~360对应-32768~0)
PulseDirection=Get_ENC_Direction();  //0:顺时针转  1:逆时针转

if ((R_PreviousAngle<0)&&(R_CurrentAngle>=0)&&(!PulseDirection))
         INFO.LapsClockWise++;
else if ((R_PreviousAngle>0)&&(R_CurrentAngle<=0)&&(PulseDirection))
         INFO.LapsAntiClockWise++;                 
R_PreviousAngle=R_CurrentAngle;

OSTimeDly(5);

试了下,这样也能计数,转过的圈数不在以Z脉冲为主,而是以起始位置做参考,这样对于例如始终正转的
情况,转过的距离等于: 顺时针转过的圈数N*2*π*R+ 旋转过的角度/360*2*π*R
但是实际运动比较复杂,还需要考虑诸如来回摆动或者先正转在反转或反之等等情况。
现在对于实际运动情况很头疼,不知道怎么才能算出精确的移动距离~

使用特权

评论回复
11
蚊音若雷| | 2013-9-3 12:54 | 只看该作者
camdw:你好,如果你想精确测出位置(偏移量)就应该使用积分的方法一算。方法如下:
一:加大采样频率(二倍于最大转速/脉冲数)
二:使用微分求和的方式(积分)就能算出精确的位置,这里就不需要方向信号了。

使用特权

评论回复
12
tyw| | 2013-9-3 13:31 | 只看该作者
蚊音若雷 发表于 2013-9-3 12:54
camdw:你好,如果你想精确测出位置(偏移量)就应该使用积分的方法一算。方法如下:
一:加大采样频率(二 ...

   

蚊    蚁
音    步
若    似
雷    锤

使用特权

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

本版积分规则

11

主题

49

帖子

1

粉丝