发一个新帖,谈谈运动控制中编码器定位精度的问题。 点击:16104 | 回复:200



通讯网-原创军团

    
  • 精华:11帖
  • 求助:1帖
  • 帖子:432帖 | 10265回
  • 年度积分:0
  • 历史总积分:24711
  • 注册:2004年7月09日
发表于:2012-12-27 21:49:55
楼主

发一个新帖,谈谈运动控制中编码器定位精度的问题。

   以前帖子里谈了一些,想一想,又到过节了,可以把这个东西作为新题目单独提出来讲一讲。。。如图。。。。运动控制,都需要把给定值与编码器反馈值求差,然后根据误差大小,反过来调整电机,使之到达准确位置。。。

 




  • 精华:2帖
  • 求助:0帖
  • 帖子:10帖 | 2393回
  • 年度积分:1
  • 历史总积分:5804
  • 注册:2006年1月06日
发表于:2012-12-29 17:48:47
41楼

我建议通讯网仔细看看CT的说明书, 到底是不是像你说的这样处理????

  • 精华:2帖
  • 求助:0帖
  • 帖子:10帖 | 2393回
  • 年度积分:1
  • 历史总积分:5804
  • 注册:2006年1月06日
发表于:2012-12-29 17:52:36
42楼

  • 精华:2帖
  • 求助:0帖
  • 帖子:10帖 | 2393回
  • 年度积分:1
  • 历史总积分:5804
  • 注册:2006年1月06日
发表于:2012-12-29 17:54:44
43楼

“现在,普遍的使用(我不知道是不是标准)是,一周,65536单位粗位(ffffH)和65536单位细分位。高四位叫Coarse Position,低四位叫Fine Position。-------这个是基本单位,比如你的编码器是1024,那么4倍频是4096,那么当你的机器旋转的时候,你的编码计数器里面的数值变化是按照以下跳增,0,16,32,48,64,80,。。(16的倍数,16=65536/4096)。转一周,编码器发4096个脉冲,编码计数器高位里面每一步跳16,一直记到65536。细分位(Fine Position)里面一直是0。如果你的编码器是1000,四倍频4000,编码计数器内计数是按照以下跳增:16.38375, 32.7675, 49.15125, 65.535, 81.91875......(16.38375的倍数,16.38375=65536/4000)....实际计数器是ffff--ffffH,小数点以前的放在高4位(粗位),小数点以后的放在低4位(细分位)。。。。运动控制,是先按照高四位,找到大概位置,然后再根据低四位,进行细调。。。。如果是sincos编码器,低四位可以细分到很精确。。。。这是伺服控制普遍采用的一种细分方法。。。。。这只是其中的很基础的一个概念。。。。。。”

很简单一个问题,16.38375=65536/4000 (计算计算没有问题), 过来一个脉冲怎么跳16.38375?

如果是21.8453333333333333....... = 65536/3000, 首先21.8453333333333333....... 怎么保证精确度,其次过来一个脉冲怎么跳到这个数值?

 

如果是其他的线数, 如5000, 6000, 7000, 8000......呢?

 

一个好的设计是用最简单的方法解决所有的问题!

如果你发现一个设计方法在情况1下, 需要添加处理1;情况2下,需要添加处理2;情况3下,需要添加处理3;........

十有八九是设计方法有问题, 还是趁早重新做吧!

 

我建议仔细看看CT说明书, 到底是不是这样处理的?

不要理解错了, 呵呵

 

通讯网-原创军团

  • 精华:11帖
  • 求助:1帖
  • 帖子:432帖 | 10265回
  • 年度积分:0
  • 历史总积分:24711
  • 注册:2004年7月09日
发表于:2012-12-29 18:08:55
44楼
回复内容:
对:征关于 “现在,普遍的使用(我不知道是不是标准)是,一周,65536单位粗位(ffffH)和65536单位细分位。高四位叫Coarse Position,低四位叫Fine Position。-------这个是基本单位,比如你的编码器是1024,那么4倍频是4096,那么当你的机器旋转的时候,你的编码计数器里面的数值变化是按照以下跳增,0,16,32,48,64,80,。。(16的倍数,16=65536/4096)。转一周,编码器发4096个脉冲,编码计数器高位里面每一步跳16,一直记到65536。细分位(Fine Position)里面一直是0。如果你的编码器是1000,四倍频4000,编码计数器内计数是按照以下跳增:16.38375, 32.7675, 49.15125, 65.535, 81.91875......(16.38375的倍数,16.38375=65536/4000)....实际计数器是ffff--ffffH,小数点以前的放在高4位(粗位),小数点以后的放在低4位(细分位)。。。。运动控制,是先按照高四位,找到大概位置,然后再根据低四位,进行细调。。。。如果是sincos编码器,低四位可以细分到很精确。。。。这是伺服控制普遍采用的一种细分方法。。。。。这只是其中的很基础的一个概念。。。。。。” 我建议仔细看看CT说明书, 到底是不是这样处理的? 不要理解错了, 呵呵  内容的回复:

就是这样的,呵呵。。。里面的数并不是累加的,而是分配的!!!因为你输入线数是1000,它也会保证你的总数肯定是1000!!!假如说,都取一位小数,16.4, 32.8, 49.2, 65.5, 81.9....如图。。。有误差,就会消化在每一步里面了,总数,肯定保持1000,不会变的!!!并不是你累加的。。。如图,每一个脉冲之间可以有误差,但是一圈下来,肯定是65536.。。这个是不会变的,有误差,也就消化在里面了!不会反映到总的里面去!!

  • 精华:2帖
  • 求助:0帖
  • 帖子:10帖 | 2393回
  • 年度积分:1
  • 历史总积分:5804
  • 注册:2006年1月06日
发表于:2012-12-29 18:57:05
45楼

引用 通讯网-原创军团 的回复内容:回复内容:对:征关于 “现在,普遍的使用(我不知道是不是标准)是,一周,65536单位粗位(ffffH)和65536单位细分位。高四位叫Coarse Position,低四位叫Fine Position。-------这个是基本单位,比如你的编码器是1024,那么4倍频是4096,那么当你的机器旋转的时候,你的编码计数器里面的数值变化是按照以下跳增,0,16,32,48,64,80,。。(16的倍数,16=65536/4096)。转一周,编码器发4096个脉冲,编码计数器高位里面每一步跳16,一直记到65536。细分位(Fine Position)里面一直是0。如果你的编码器是1000,四倍频4000,编码计数器内计数是按照以下跳增:16.38375, 32.7675, 49.15125, 65.535, 81.91875......(16.38375的倍数,16.38375=65536/4000)....实际计数器是ffff--ffffH,小数点以前的放在高4位(粗位),小数点以后的放在低4位(细分位)。。。。运动控制,是先按照高四位,找到大概位置,然后再根据低四位,进行细调。。。。如果是sincos编码器,低四位可以细分到很精确。。。。这是伺服控制普遍采用的一种细分方法。。。。。这只是其中的很基础的一个概念。。。。。。” 我建议仔细看看CT说明书, 到底是不是这样处理的? 不要理解错了, 呵呵  内容的回复:就是这样的,呵呵。。。里面的数并不是累加的,而是分配的!!!因为你输入线数是1000,它也会保证你的总数肯定是1000!!!假如说,都取一位小数,16.4, 32.8, 49.2, 65.5, 81.9....如图。。。有误差,就会消化在每一步里面了,总数,肯定保持1000,不会变的!!!并不是你累加的。。。如图,每一个脉冲之间可以有误差,但是一圈下来,肯定是65536.。。这个是不会变的,有误差,也就消化在里面了!不会反映到总的里面去!!



分配的???!!!! 你这种说法太不靠谱了!

怎么分配, 难道过来的脉冲上都有标记,1000个脉冲都能区分开是第几号脉冲? 左转一个脉冲, 然后右转一个脉冲, 计数器的值也分配?

 

“因为你输入线数是1000,它也会保证你的总数肯定是1000!!!假如说,都取一位小数,16.4, 32.8, 49.2, 65.5, 81.9 ...."

就算你能跳16.4出来, 换成其他线数就是任意的一个数值,有的数据还是无穷小数, 你觉得从设计上可能这样做吗?

 

就算这样设计了, 举个例子:

电机先在固定位置(假定为零点),通过外面的设备拖动电机让电机严格左转400个脉冲, 再右转300个脉冲;然后左转300个, 在右转400个脉冲;如此循环下去,执行很多次后,最后停下来, 电机还停在原来的零点上,你觉得驱动器的位置计数器还是0吗?

 

不管采用什么方式记脉冲, 都是计数器一个脉冲一个脉冲对细分后的脉冲进行加减的, 从来没有分配之说!!!!

 

还有1000线的编码器就一定会得到1000个脉冲吗? 未必, 需要考虑脉冲数丢失、码盘损坏等情况,编码器上会有一个零位标记, 位置计数器要靠旋转一圈看计数是不是1000个脉冲来校正码盘错误!

 

你这一分配好了,码盘脉冲丢了你也不知道。

要解决这些问题, 又要假定一系列条件然后再分别处理, 你觉得就一个记编码器个数的简单事情都搞得这么复杂,整个产品做出来可靠性能保证吗?

 

建议你找找CT的框架图去看看怎么实现对编码器脉冲计数的吧!!!

 

我可以负责任的告诉你CT的位置脉冲计数器绝对不是你理解的这样!

  • 精华:2帖
  • 求助:0帖
  • 帖子:10帖 | 2393回
  • 年度积分:1
  • 历史总积分:5804
  • 注册:2006年1月06日
发表于:2012-12-29 19:04:02
46楼

您还是仔细看看CT说明书, 再消化消化理解理解吧!

上至世界五百强(比CT、艾默生大的多) 的公司, 小到两三个人搞的小公司, 都是计数器累加的, 我就从没听说过对编码器计数是靠脉冲分配的。

靠脉冲分派,我还是头一回听到!

 

通讯网-原创军团

  • 精华:11帖
  • 求助:1帖
  • 帖子:432帖 | 10265回
  • 年度积分:0
  • 历史总积分:24711
  • 注册:2004年7月09日
发表于:2012-12-29 20:17:51
47楼
回复内容:
对:征关于您还是仔细看看CT说明书, 再消化消化理解理解吧!上至世界五百强(比CT、艾默生大的多) 的公司, 小到两三个人搞的小公司, 都是计数器累加的, 我就从没听说过对编码器计数是靠脉冲分配的。靠脉冲分派,我还是头一回听到! 内容的回复:


呵呵,多听几回就有了。。。呵呵呵。。。

王者之师—广州@阿君

  • [版主]
  • 精华:25帖
  • 求助:18帖
  • 帖子:503帖 | 6997回
  • 年度积分:0
  • 历史总积分:66772
  • 注册:2010年6月26日
发表于:2012-12-29 21:03:45
48楼
讲者有心,看者有意。。。还望继续。。。

通讯网-原创军团

  • 精华:11帖
  • 求助:1帖
  • 帖子:432帖 | 10265回
  • 年度积分:0
  • 历史总积分:24711
  • 注册:2004年7月09日
发表于:2012-12-30 12:06:17
49楼
回复内容:

对:征关于 引用 通讯网-原创军团 的回复内容:回复内容:对:征关于 回复内容:(省略)              内容的回复: 你看,还是你看错了。。。你看你的图,signal pe

(内容省略) 内容的回复:


我这里错了。。。。我原来说31,30,29。。。说n=29是错的。。。我是按16进制。。。应该是31----20。。。应该n=20。。你的是二进制表示的。

FFF0H--0000H    = 1111 1111 1111 0000B--0000 0000 0000 0000B

蓝色1位置是n  31,30,29,28    27,26,25,24   23,22,21,20

刘志斌

  • 精华:5帖
  • 求助:0帖
  • 帖子:348帖 | 35827回
  • 年度积分:0
  • 历史总积分:75384
  • 注册:2006年7月30日
发表于:2012-12-30 12:16:38
50楼

引用 通讯网-原创军团 的回复内容:

……讨论讨论嘛。。。呵呵呵……


1、65536个指令脉冲,电机转1周,称其为周指令脉冲数;

2、位移指令脉冲数,是工件由起点运动到终点,需要设定的指令脉冲数;


 

刘志斌

  • 精华:5帖
  • 求助:0帖
  • 帖子:348帖 | 35827回
  • 年度积分:0
  • 历史总积分:75384
  • 注册:2006年7月30日
发表于:2012-12-30 12:24:35
51楼

引用 通讯网-原创军团 的回复内容:

……讨论讨论嘛。。。呵呵呵……


1、65536个指令脉冲,电机转1周,称其为周指令脉冲数;

2、位移指令脉冲数,是工件由起点运动到终点,需要设定的指令脉冲数;

3、如果我用解析度是1的编码器,也就说电机转1圈,输出1个反馈脉冲;

4、那么

指令脉冲数÷65536=整数λ………余数个指令脉冲;

  • 精华:2帖
  • 求助:0帖
  • 帖子:10帖 | 2393回
  • 年度积分:1
  • 历史总积分:5804
  • 注册:2006年1月06日
发表于:2012-12-30 12:29:16
52楼

引用 通讯网-原创军团 的回复内容:回复内容:对:征关于 引用 通讯网-原创军团 的回复内容:回复内容:对:征关于 回复内容:(省略)              内容的回复: 你看,还是你看错了。。。你看你的图,signal pe(内容省略) 内容的回复:我这里错了。。。。我原来说31,30,29。。。说n=29是错的。。。我是按16进制。。。应该是31----20。。。应该n=20。。你的是二进制表示的。。 FFF0H--0000H    = 1111 1111 1111 0000B--0000 0000 0000 0000B蓝色1位置是n  31,30,29,28    27,26,25,24   23,22,21,20


呵呵.....

n= 20?

看看那个图,继续研究吧!

刘志斌

  • 精华:5帖
  • 求助:0帖
  • 帖子:348帖 | 35827回
  • 年度积分:0
  • 历史总积分:75384
  • 注册:2006年7月30日
发表于:2012-12-30 12:42:08
53楼

5、我用解析度是1的编码器可以检测电机转过多少λ整圈;

6、剩下电机不足1圈的余数个指令脉冲数,不能检测,必须用解析度高的编码器!

7、那么剩下电机不足1圈的余数个指令脉冲,就是细分位Fine Position的、需要高分辨能力fine resolution的编码器检测的指令脉冲脉冲!

 

刘志斌

  • 精华:5帖
  • 求助:0帖
  • 帖子:348帖 | 35827回
  • 年度积分:0
  • 历史总积分:75384
  • 注册:2006年7月30日
发表于:2012-12-30 12:45:54
54楼

3、如果我用解析度是1024的编码器,也就说电机转1圈,输出1024个反馈脉冲;

4、那么

指令脉冲数÷65536=整数λ………余数个指令脉冲;

5、我用解析度是1024的编码器可以检测电机转过多少λ整圈;

6、剩下电机不足1圈的余数个指令脉冲数÷64=整数位λ1+余数个脉冲1,可以检测电机再转整数位λ1的角度;

7、那么剩下电机不足1圈的余数个指令脉冲1,就是细分位Fine Position的、需要高分辨能力fine resolution的编码器检测的指令脉冲脉冲!

刘志斌

  • 精华:5帖
  • 求助:0帖
  • 帖子:348帖 | 35827回
  • 年度积分:0
  • 历史总积分:75384
  • 注册:2006年7月30日
发表于:2012-12-30 12:50:31
55楼

3、如果我用解析度是4096的编码器,也就说电机转1圈,输出4096个反馈脉冲;

4、那么

指令脉冲数÷65536=整数λ………余数个指令脉冲;

5、我用解析度是4096的编码器可以检测电机转过多少λ整圈;

6、剩下电机不足1圈的余数个指令脉冲数÷16=整数位λ2+余数个脉冲2,可以检测电机再转整数位λ2角度;

7、那么剩下电机不足1圈的余数个指令脉冲2,就是细分位Fine Position的、需要高分辨能力fine resolution的编码器检测的指令脉冲脉冲!

通讯网-原创军团

  • 精华:11帖
  • 求助:1帖
  • 帖子:432帖 | 10265回
  • 年度积分:0
  • 历史总积分:24711
  • 注册:2004年7月09日
发表于:2012-12-30 13:00:28
56楼
引用 征 的回复内容: 引用 通讯网-原创军团 的回复内容:回复内容:对:征关于 引用 通讯网-原创军团 的回复内容:回复内容:对:征关于 回复内容:(省略)              内容的回复: 你看,还是你看错了。。。你看你的图,signal pe(内容省略) 内容的回复:我这里错了。。。。我原来说31,30,29。。。说n=29是错的。。。我是按16进制。。。应该是31----20。。。应该n=20。。你的是二进制表示的。。 FFF0H--0000H    = 1111 1111 1111 0000B--0000 0000 0000 0000B蓝色1位置是n  31,30,29,28    27,26,25,24   23,22,21,20呵呵.....n= 20? 看看那个图,继续研究吧!


看明白了,你的图里面,4096已经算是细分了,1024是粗位,后面,21,20算细分位。在你的里面把21位以后算细分了。CT中所有的4096都算粗位。说法不同。。。但结果是一样。。无所谓了。。使用起来是一样的。。

刘志斌

  • 精华:5帖
  • 求助:0帖
  • 帖子:348帖 | 35827回
  • 年度积分:0
  • 历史总积分:75384
  • 注册:2006年7月30日
发表于:2012-12-30 13:11:22
57楼

8、如果用解析度是1的编码器,可能最多有65536-1=65535个不足1圈的脉冲,需要用高解析度的编码器检测;

 

刘志斌

  • 精华:5帖
  • 求助:0帖
  • 帖子:348帖 | 35827回
  • 年度积分:0
  • 历史总积分:75384
  • 注册:2006年7月30日
发表于:2012-12-30 13:22:51
58楼

8、如果用解析度是1024的编码器,可能最多有64-1=63个少量脉冲,需要用高解析度的编码器检测;

8、如果用解析度是4096的编码器,可能最多有16-1=15个少量脉冲,需要用高解析度的编码器检测;

8、如果用解析度是65536的编码器,可能最多有0个脉冲,需要用高解析度的编码器检测;

刘志斌

  • 精华:5帖
  • 求助:0帖
  • 帖子:348帖 | 35827回
  • 年度积分:0
  • 历史总积分:75384
  • 注册:2006年7月30日
发表于:2012-12-30 13:33:38
59楼

9、这样我先用解析度是1024的编码器进行粗位检测,然后用65536的编码器检测剩余的最多是63个少量脉冲,用高解析度65536的编码器细分位检测;

10、由于我用1024的编码器检测了大多数指令脉冲,仅剩下最多63个脉冲要用高解析度65536的编码器检测,所以伺服系统的电机速度可以按1024编码器计算确定高速运行,只有最后1圈电机减速到低速运行时的最多63个脉冲需要用高解析度65536的编码器检测,这样系统的运行速度就不受高解析度编码器的影响!

11、这是1个伟大的创举!!!

刘志斌

  • 精华:5帖
  • 求助:0帖
  • 帖子:348帖 | 35827回
  • 年度积分:0
  • 历史总积分:75384
  • 注册:2006年7月30日
发表于:2012-12-30 13:38:35
60楼

12,、有人会说,那还需要两个编码器吗?当然不是,所有高解析度编码器都会有低解析度脉冲数输出;

13、我们只是在伺服运行的最后1圈的最后几个脉冲,启用高解析度脉冲数输出!


热门招聘
相关主题

官方公众号

智造工程师