用户如何控制伺服位置环计数器溢出的问题 点击:3189 | 回复:9



刘志斌

    
  • 精华:5帖
  • 求助:0帖
  • 帖子:348帖 | 35827回
  • 年度积分:0
  • 历史总积分:75384
  • 注册:2006年7月30日
发表于:2013-01-15 18:02:44
楼主

 

 

引用 ShowMotion 的回复内容:

……你说不溢出就不溢出?你说位置走多远就走多远?溢出是不受您控制的,您不可能限制说:伺服是不能朝一个方向转多久的,否则溢出我就乱套了。那就要解决溢出后进位或修改溢出计数变量对吧?……


 

1、ShowMotion的这句话,说明了ShowMotion对伺服控制过程外部用户如何处理计数器溢出的基本方法不懂;

2、ShowMotion说,“你说不溢出就不溢出?你说走多远就走多远?溢出是不受你控制的”,大家想一想溢出是不受控制的吗?

3、我来讨论下用户如何控制计数器溢出的问题:

1)一个32为计数器,可以记65536×65536转个脉冲;

2)那么用户确定脉冲当量、确定周指令脉冲、电子齿轮比时,指令脉冲数就有一个范围,就是

     指令脉冲数<65536×65536

3)如果用户确定

    周指令脉冲数=65536,那么电机的转数要<65536转

    周指令脉冲数=32768,那么电机的转数要<131072转

    周指令脉冲数=16384,那么电机的转数要<262144转

    周指令脉冲数=8192,  那么电机的转数要<524288转

    周指令脉冲数=4096,  那么电机的转数要<1048576转

    周指令脉冲数=2048,  那么电机的转数要<2097152转

    周指令脉冲数=1024,  那么电机的转数要<4194304转

    周指令脉冲数=512,    那么电机的转数要<8388608转

                                   ……

4)所以用户总可以把指令脉冲数控制在65536×65536个脉冲范围内,保证伺服一个伺服运行周期计数器不会溢出;

4、ShowMotion说“你说不溢出就不溢出?”,那当然说不溢出就不溢出;

5、ShowMotion说“你说走多远就走多远?”,那当然说走多远就走多远;

6、ShowMotion说“溢出是不受您控制的”,我说用户通过设定、给定参数,就是能有效地控制计数器的溢出!!!

7、这就是The external control must process the overflows!

 




LG490634977

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 95回
  • 年度积分:0
  • 历史总积分:308
  • 注册:2011年11月24日
发表于:2013-01-15 23:34:47
1楼
伺服需要考虑这些东西吗?不太懂,同求高人解答

刘志斌

  • 精华:5帖
  • 求助:0帖
  • 帖子:348帖 | 35827回
  • 年度积分:0
  • 历史总积分:75384
  • 注册:2006年7月30日
发表于:2013-01-16 00:44:43
2楼

竟然没有让人知道,用户如何设定参数,可以避免脉冲计数器“溢出”!!!

刘志斌

  • 精华:5帖
  • 求助:0帖
  • 帖子:348帖 | 35827回
  • 年度积分:0
  • 历史总积分:75384
  • 注册:2006年7月30日
发表于:2013-01-16 11:05:20
3楼

下面谈谈关于系统解析度的问题

1、系统检测电机角位移的分辨率,即解析度;

2、用户设定的周指令脉冲数例如65536,为系统对电机角位移的检测分辨率的要求;

3、编码器的周反馈检测脉冲数例如4096,为系统检测电机角位移的分辨率;

4、当系统要求的分辨率即用户设定的周指令脉冲数,

    周指令脉冲数>编码器的周反馈脉冲数

则系统检测电机角位移的分辨率=编码器的周反馈脉冲数;

5、当系统要求的分辨率即用户设定的周指令脉冲数, 

    周指令脉冲数<编码器的周反馈脉冲数

则系统检测电机角位移的分辨率=用户设定的周指令脉冲数;

6、通道的周脉冲数=编码器周反馈脉冲数×2n=编码器周反馈脉冲数/电子齿轮比=周指令脉冲数;

7、所以你使用高解析度的编码器,系统的实际分辨率可能很低,受用户的要求或设定的周指令脉冲数低的约束;

8、所以当用户要求分辨率高或设定的周指令脉冲数高,系统的实际分辨率可能很低,受编码器的周反馈脉冲数低的约束;

9、举例说

1)周指令脉冲数65536,编码器周反馈脉冲数4096,则系统分辨率即解析度是360°/4096;

2)周指令脉冲数4096,编码器的周反馈脉冲数65536,则系统分辨率即解析度是360°/4096;

10、所以影响系统分辨率即解析度的因数

1)用户设定的周指令脉冲数;

2)编码器的周反馈脉冲数;

3)电子齿轮比的作用是,总能使通道运行的周脉冲数与之兼容!

 

刘志斌

  • 精华:5帖
  • 求助:0帖
  • 帖子:348帖 | 35827回
  • 年度积分:0
  • 历史总积分:75384
  • 注册:2006年7月30日
发表于:2013-01-16 17:51:47
4楼

引用 ShowMotion 的回复内容:

……按刘老师的做法就是在加工文件拿到后,为了保证计数器不溢出,就根据加工的尺寸调整位置分辨率,也就是说加工距离越长我的精度要求越低,如果一直要同一个方向加工,还要求加工精度也很高,那是不是为了保证计数器不溢出,限制加工距离或者说我给您配更高计数宽度的驱动器,32位不行64位,64位不行128位?或者您说,对不起我干不了这个活。……


1、你的应对是有限的!

2、如果你的应对是无限的,那么就不需要32位计数器,可以是16位、8位,……

3、我的方法,如果在有限的范围内应对,相对于溢出1次、2次,系统分辨率下降最多3个脉冲;

4、如果我的方法对于“为了保证计数器不溢出,限制加工距离或者说我给您配更高计数宽度的驱动器,32位不行64位,64位不行128位?”,是可以做到的,虽然系统分辨率有下降;

5、你的应对,对于“为了保证计数器不溢出,限制加工距离或者说我给您配更高计数宽度的驱动器,32位不行64位,64位不行128位?”,是无法应对的,你能应对得了吗?

6、所以32位是科学的,允许用户有较大的选择;

7、更高位的要求,是虚假的分辨率,或者说是理论上的分辨率;

8、实际运行的分辨率,需要32位计数器的很少;

 

 

刘志斌

  • 精华:5帖
  • 求助:0帖
  • 帖子:348帖 | 35827回
  • 年度积分:0
  • 历史总积分:75384
  • 注册:2006年7月30日
发表于:2013-01-16 17:56:23
5楼

引用 ShowMotion 的回复内容:

………硬件上的溢出,可以采取两种方案:

1、基于指令输入和编码反馈不可能突变,我可以把它的进位或借位丢弃,比如两个计数值都是32位无符号数,计数范围0~+(2^32-1),假设实际输入的脉冲数和反馈脉冲数分别达到0xffff ffff,0xffff fff0,再输入一个脉冲,输入脉冲应该是0x1 0000 0000,我把它就当成0。因为反馈脉冲不可能突变,反馈脉冲的下一刻的计数值应该在0xffff fff0左右变化。如果反馈也溢出,我同样丢弃,那么反馈应该在0x ffff xxxx~0x 0000 xxxx之间变化,用输入脉冲0x0000 0000-反馈脉冲0x ffff xxxx~0x 0000 xxxx,那么就可以得到+0x0000 yyyy~-1*(0x 0000 xxxx),注意此时差是有符号数,这个差值没问题,那么执行就不会有偏差。……


1、"差值没问题,那么执行就不会有偏差"。差值有问题,那么执行就会有偏差。差值为零,停车;

2、指令脉冲数用户运行前输入,如果指令脉冲数是2^32-1+2^6,输入溢出后的读数是2^6;

3、运行后,编码器的脉冲数由零开始累加,累加到2^6时,差值为零,停车了怎么办???

刘志斌

  • 精华:5帖
  • 求助:0帖
  • 帖子:348帖 | 35827回
  • 年度积分:0
  • 历史总积分:75384
  • 注册:2006年7月30日
发表于:2013-01-16 17:58:23
6楼

引用 ShowMotion 的回复内容:

……

2、采用专门的两个变量来保存溢出次数,那么上溢1次,变量+1,下溢1次,变量-1.假设32位计数器,由(溢出变量*(2^32)+32位计数值)组成一个更大的数来处理,如果是浮点处理器,这个计数值是相当大的,你想溢出都难,这个解决了硬件的技数宽度的限制。

……


1、“采用专门的两个变量来保存溢出次数”,用这个方法和用更高位的计数器相比,用更高位的计数器更简单;

2、例如,如果用两个变量来保存溢出次数,和增加2数位比较,增加两数位的效果更好、更简单!

3、这个应对的方法我已经说过了,没有意义!

刘志斌

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

引用 ShowMotion 的回复内容:

………“指令脉冲数用户运行前输入,如果指令脉冲数是2^32-1+2^6,输入溢出后的读数是2^6;”应该是2^6-1;“运行后,编码器的脉冲数由零开始累加,累加到2^6时,差值为零,停车了怎么办???”这个不用关心,由闭环算法来处理,和溢出没关系。


1、“由闭环算法来处理,和溢出没关系。”,那就不是你说的那么轻松;

2、“算法来处理”,还是免不了要检测溢出,检测溢出与增加数位相比,不如增加数位更简单!

刘志斌

  • 精华:5帖
  • 求助:0帖
  • 帖子:348帖 | 35827回
  • 年度积分:0
  • 历史总积分:75384
  • 注册:2006年7月30日
发表于:2013-01-16 18:00:15
8楼

引用 ShowMotion 的回复内容:

……呵呵,你想多宽的计数就用多宽的?你要考虑技术和成本的因素,一般电机控制的MCU计数宽度都在32位,所以你要根据情况扩展位数,选合适的硬件性能和数据宽度,用软件弥补硬件的位宽限制是一种经济适用的办法。


1、检测溢出,也是增加的硬件设备;

2、我说32位就够用了,应对溢出的检测溢出,防止溢出是多余的,是画蛇添足!

 

刘志斌

  • 精华:5帖
  • 求助:0帖
  • 帖子:348帖 | 35827回
  • 年度积分:0
  • 历史总积分:75384
  • 注册:2006年7月30日
发表于:2013-01-17 10:53:48
9楼

1、如果分“粗”、“细”位控制,那32位计数器,可以保证电机65536^2转不溢出;

2、而且保证系统的指令脉冲数的分辨率是1/65536;

3、也就是说,编码器的解析度是65536时,系统控制的分辨率达到1/65536;

4、所以“粗”、“细”位控制的潜力很大,它不仅解决了高分辨率时电机的速度受限制的大问题,而且解决了长距离运行要防止计数器溢出的问题!


热门招聘
相关主题

官方公众号

智造工程师