请教:用编码器能否真的提高步进电机的运动精度? 点击:7630 | 回复:70



奔三十的男孩

    
  • 精华:1帖
  • 求助:0帖
  • 帖子:25帖 | 1112回
  • 年度积分:0
  • 历史总积分:1251
  • 注册:2007年3月08日
发表于:2007-03-08 18:49:00
楼主
打个比方,确良步进电机步进角1.8度, 30细分后0.06度. 编码器分辨率达0.01度. 那么,这么步进电机+编码器的闭环系统, 精度到底是0.06度,还是0.01度??????



奔三十的男孩

  • 精华:1帖
  • 求助:0帖
  • 帖子:25帖 | 1112回
  • 年度积分:0
  • 历史总积分:1251
  • 注册:2007年3月08日
发表于:2007-03-15 15:10:00
41楼
谢谢版主们的诲人不倦! 
1. 我可能对东方马达的步距角理解错了, 开始我想当然的认为它的步距角是1.8 度, 照这么看, 1.8度只是1/4个步距角.
2. 以东方马达打个比方(不管正不正确,先设他的步距角为7.2度,20细分,1/4步距角是1.8度): 某时刻电机要从零位走到7.56度的位置, 正常情况下, 要走一个整步加一个细分步, 但它在5.4度的位置,力矩不够卡在那了, 当控制器发完7.56度对应的电信号后,检测到丢步(此时刚好>1.8度), 那么增加电流,此时发出的电信号应该是7.56度对应的电信号吧, 也就是第二个步距角第一小步的电信号, 而此时电机在第一个步距角的范围内, 我当初会以为电机会往回跑,跑到第一个步距角的第一小步位置.  
    我的错误之处在于, 忘了步进电机相邻的步距角内通电方式是不可能一样的(具体多少相不一样,得看设计的通电方式有多少种).

大虾们看看, 我上面的两点说法可有问题???

波恩

  • 精华:10帖
  • 求助:0帖
  • 帖子:203帖 | 11028回
  • 年度积分:0
  • 历史总积分:36300
  • 注册:2003年6月12日
发表于:2007-03-15 18:02:00
42楼
其实细分也好,丢步也好,闭环补偿也好,最终都取决于步进电机的矩角特性(可以参见亦云人云回帖中的有关图片)。
在理想情况下,可以按照步进的矩角特性为正弦规律进行分析,那么步进的最大出力点就落在理论位置的正负1/4齿距上,也就是功角为90度。
一般情况下,负载小于步进电机的额定转矩,此时步进电机的实际位置与理论位置之差小于1/4齿距,也就是功角小于90度。
当负载加大时,实际位置与理论位置之差也加大,当差值恰好为1/4齿距,也就是功角恰好为90度时,步进电机达到当前驱动电流对应的最大出力。
如果负载进一步加大,而步进电机在当前驱动电流下已经不可能提供更大的出力,于是实际位置与理论位置之差进一步加大,并超过1/4齿距,也就是功角超过90度,步进电机的实际出力将随功角加大而进一步下降,甚至出现负力矩,于是出现丢步。

希望上述步进电机矩角特性说明有助于你对步进丢步和闭环补偿的理解。

奔三十的男孩

  • 精华:1帖
  • 求助:0帖
  • 帖子:25帖 | 1112回
  • 年度积分:0
  • 历史总积分:1251
  • 注册:2007年3月08日
发表于:2007-03-15 19:07:00
43楼
嗯, 谢谢. 不过需要慢慢消化.....

奔三十的男孩

  • 精华:1帖
  • 求助:0帖
  • 帖子:25帖 | 1112回
  • 年度积分:0
  • 历史总积分:1251
  • 注册:2007年3月08日
发表于:2007-03-16 14:48:00
44楼
TO 波恩:
   "可以按照步进的矩角特性为正弦规律进行分析", 你这里说的"角"是指实际位置与理论位置的差值相对一个步距角的电气角度吗?  
    如果按弦规律分析, 那理论位置与实际位置重合时, 电机的扭力不就是零了?? 实际不是这样的啊

奔三十的男孩

  • 精华:1帖
  • 求助:0帖
  • 帖子:25帖 | 1112回
  • 年度积分:0
  • 历史总积分:1251
  • 注册:2007年3月08日
发表于:2007-03-16 14:54:00
45楼
发完上面的贴后, 自己想想, 重合后好像转动力臂长度应该为零了,,,,,
消化中, 请波恩兄有针对性的帮助帮助消化....

奔三十的男孩

  • 精华:1帖
  • 求助:0帖
  • 帖子:25帖 | 1112回
  • 年度积分:0
  • 历史总积分:1251
  • 注册:2007年3月08日
发表于:2007-03-16 14:58:00
46楼
还是觉得不能按正弦规律来分析,,,,,,找些资料看看......

奔三十的男孩

  • 精华:1帖
  • 求助:0帖
  • 帖子:25帖 | 1112回
  • 年度积分:0
  • 历史总积分:1251
  • 注册:2007年3月08日
发表于:2007-03-16 15:19:00
47楼
看了教材, 也能理解.
可做扭矩试验的时候结果不是这样的啊.
如果: 某个时候, 理论位置与实际位置重合了, 此时扭矩为零, 按正弦规律变化的话, 那个,这个位置过一点点, 扭矩也只是0+而已, 很小的啰, 拿力矩扳手测时, 测出来的扭矩都一样, 在电机轴不动的情况下,也没发现哪个点扭矩很小啊.

难道又是尽信书, 不如无书????

奔三十的男孩

  • 精华:1帖
  • 求助:0帖
  • 帖子:25帖 | 1112回
  • 年度积分:0
  • 历史总积分:1251
  • 注册:2007年3月08日
发表于:2007-03-16 15:36:00
48楼
再说了, 如果真的是重合位置扭矩为零, 那根据能量守恒,这个位置应该是电机轴速度最大位置, 肯定会跑过头去的, 哪能这么轻易就乖乖的停在重合位置. 如果说是有什么机械摩擦和电磁阻尼,那这两个玩意应该是个定值吧, 那在振荡快结束时,回到重合位置的那个作用力, 肯定是没由机械摩擦和电磁阻尼合成的反作用力大了( 根据正弦规律, 这时的作用力只有0+, 而反作用力是一定值), 那也就是说, 步进电机每次都不能回到重合位置啰, 而只是一个近似的重合位置啰?  这个时候, 如果我用手动拧电机轴,那么我这个力只要很小(远比电机的额定扭矩小), 就可以让电机轴转动一个很小的角度啰??????????? 

大虾们,救救我吧,我快傻了.....

奔三十的男孩

  • 精华:1帖
  • 求助:0帖
  • 帖子:25帖 | 1112回
  • 年度积分:0
  • 历史总积分:1251
  • 注册:2007年3月08日
发表于:2007-03-16 16:06:00
49楼
想起一句老话: 好读书,不求甚解.
难啊,,,,,,,,,,,,,,

奔三十的男孩

  • 精华:1帖
  • 求助:0帖
  • 帖子:25帖 | 1112回
  • 年度积分:0
  • 历史总积分:1251
  • 注册:2007年3月08日
发表于:2007-03-16 16:06:00
50楼
晕了晕了,真的晕了
上面东方马达的那玩意, 1.8度到底一个齿距,还是一个步距,还是一个步距的1/4???????????? 
是1个, 4个, 还是1/4个我们平常说的整步?????????????????????????????????????????????????????????????

奔三十的男孩

  • 精华:1帖
  • 求助:0帖
  • 帖子:25帖 | 1112回
  • 年度积分:0
  • 历史总积分:1251
  • 注册:2007年3月08日
发表于:2007-03-16 16:24:00
51楼
还有一个问题: 还是东方那个破马达为例,
某时电机在零位, 需要向走50度, 因为50>1.8度, 它是不是一个始就把它当成失步状态来处理, 还是等发完了脉冲后才去检测有没误差1.8度; 如果是后者的后, 跑50度需要花一段相当的时间, 这中间要是丢了几步, 怎么办?  

奔三十的男孩

  • 精华:1帖
  • 求助:0帖
  • 帖子:25帖 | 1112回
  • 年度积分:0
  • 历史总积分:1251
  • 注册:2007年3月08日
发表于:2007-03-16 16:24:00
52楼
不知为不知, 咱打爆了沙锅也得问个明白, 不然睡不着,,,,,

波恩

  • 精华:10帖
  • 求助:0帖
  • 帖子:203帖 | 11028回
  • 年度积分:0
  • 历史总积分:36300
  • 注册:2003年6月12日
发表于:2007-03-16 17:09:00
53楼
其实没那么难!只要你用手或者工具微微转动步进电机的轴,就不难发现:
1.在一个齿距范围内(不咯噔一下换到下一个位置),电机轴是可以微微摆动的;
2.而在摆动中心点附近,力感最小,此位置势能最小,为转子的自然平衡位置,此时电机出力为零;
3.在即将换到相邻位置时,力感最大,此位置势能最大,可视为转子的势垒,此时电机出力最大,一旦外力超越该势垒,转子将失步,移至相邻位置。
这就是步进电机矩角特性的手感演示经验,相信你一定早就体验过了。

至于讨论矩角特性时说的角度,一般称为电角度,是以一个齿距为360度,也就是说步进电机轴每转一圈对应机械角度360度,同时对应电角度360*p,其中p为步进电机的转子齿数。在讨论矩角特性时,你眼中应该只有齿距,而没有步距,因为齿距只与转子齿数有关,可以令问题简化;而步距就与电机相数和驱动方式有关了,容易使问题复杂化。
于是乎,东方电机的1.8度,就应该是50齿步进电机的1/4齿距,或者90度电角度,同时也对应一个两相电机的整步,即两相四拍的步距。

@Q

  • 精华:7帖
  • 求助:0帖
  • 帖子:42帖 | 2199回
  • 年度积分:0
  • 历史总积分:4414
  • 注册:2003年2月20日
发表于:2007-03-16 17:24:00
54楼
我在看着学习,我对步进的了解还是新手,看了半天我也没明白,大家讨论的丢步加电流追回,这个“步”,是步进电机的“齿距”,大“步距”,比如1。8度,还是细分后的小步距比如0。06度?
另外请教斑竹,这个步进的“细分”与编码器正余弦的细分有什么相同和不同?是否这个细分并不提高精度,要靠编码器反馈找回来?不好意思,我对于步进的问题比较“初级”。

奔三十的男孩

  • 精华:1帖
  • 求助:0帖
  • 帖子:25帖 | 1112回
  • 年度积分:0
  • 历史总积分:1251
  • 注册:2007年3月08日
发表于:2007-03-16 17:27:00
55楼
经过一番痛苦的脑细胞过流工作后, 终于是大致时白了.

不过波恩老兄说我"相信一定早就体验过了", 我其实就是没有"体验过"(咱还是个处男呢!!!), 才会这么的困惑, 无论是用力,还是用扭矩扳手, 都没有体验到"电机轴是可以微微摆动".......

奔三十的男孩

  • 精华:1帖
  • 求助:0帖
  • 帖子:25帖 | 1112回
  • 年度积分:0
  • 历史总积分:1251
  • 注册:2007年3月08日
发表于:2007-03-16 17:28:00
56楼
波恩老兄还没回答我另一个问题:
 还是东方那个破马达为例,
某时电机在零位, 需要向走50度, 因为50>1.8度, 它是不是一个始就把它当成失步状态来处理, 还是等发完了脉冲后才去检测有没误差1.8度; 如果是后者的后, 跑50度需要花一段相当的时间, 这中间要是丢了几步, 怎么办? 

波恩

  • 精华:10帖
  • 求助:0帖
  • 帖子:203帖 | 11028回
  • 年度积分:0
  • 历史总积分:36300
  • 注册:2003年6月12日
发表于:2007-03-16 17:41:00
57楼
“都没有体验到"电机轴是可以微微摆动".......”那就用心体验一下好了,不过手要细,不可鲁莽,保证你会有前所未有的全新体验。
步进闭环的目的和做法往往是随时监控电角度偏差,并保持转子的实际滞后与当前驱动目标的偏差基本不大于90度。东方的那个图就是一个例子。

奔三十的男孩

  • 精华:1帖
  • 求助:0帖
  • 帖子:25帖 | 1112回
  • 年度积分:0
  • 历史总积分:1251
  • 注册:2007年3月08日
发表于:2007-03-17 09:35:00
58楼
感觉,一如希望, 是可有可无的.....算了, 可能是我的手太粗...
波恩说"随时监控电角度偏差,并保持转子的实际滞后与当前驱动目标的偏差基本不大于90度", 
可能性有三种:(以电机30细分为例)
1. 控制器每发完一个控制信号后, 都停下来去测检当前位置与刚发完的电信号对应的位置的差值,等有了检测结果再发下一个.
   这种的好处是, 保证偏差达到1.8度时一定能被检到, 不过, 这样每一小步都检一次,会花时间, 会对系统的反应速度有一定的影响.

2. 每发完30个脉冲(每走1.8度)检测一次.
   这次的好处是, 检测次数很少, 不会对系统的反应速度有大的影响.  但有可能出现偏差达到了1.8度却没去检测:没开始走前,如果已经有了1度的偏差,再发30个脉冲后,已经偏差了2.8度了,这时才去检测.
 这种可能性很小.

3.程序的主循环就是一直不停地在检测当前位置与理论位置的差值,其它所有的功能都靠中断实现. 主循环一发现>1.8,马上进入闭环模式, 让准备发出的脉冲电流增大.
  如果是我弄的,一定会用这种方法.

波恩

  • 精华:10帖
  • 求助:0帖
  • 帖子:203帖 | 11028回
  • 年度积分:0
  • 历史总积分:36300
  • 注册:2003年6月12日
发表于:2007-03-17 12:08:00
59楼
没错,就是你列的第三种方法!前两种方法缺乏实用价值和意义。

奔三十的男孩

  • 精华:1帖
  • 求助:0帖
  • 帖子:25帖 | 1112回
  • 年度积分:0
  • 历史总积分:1251
  • 注册:2007年3月08日
发表于:2007-03-17 15:05:00
60楼
void main()

  void 回零位(); 
  while(1)
  {  
     读取当前步进累积数;
     读取传感器信号; 
     计算理论值与实际值偏差;(理论值并不是要运行到最后的那个位置值, 而是当前脉冲数对应的位置值) if>1.8{调整模式标置置1}   else  {调整模式标置置0}
   }
  }
    
void 时基中断()

  if 步进电机需走的步数!=步进累积数
 { if 调整模式标置==0
  {电机正常正转或反转一步;
  步进累积数+1或-1;}
  else {电机增加电流正转或反转一步;
        步进累积数+1或-1}
  }
  esle { go to 半流保持模式} 

void 计数器或计数器通道中断()
{  读取其它传感器信息, 以决定电机的动作,计数电机要走的步数a}

   

热门招聘
相关主题

官方公众号

智造工程师