研控MCC系列运动控制卡使用方便,功能可靠,一般来说是不会在使用过程中产生位置偏差的。但是在长期客户服务的过程中我们也遇到了一些因使用不当造成的位置偏差,如果没有丰富的经验,往往会判断为运动控制卡的问题,而实际上真正的原因是在使用过程中有一些软硬件问题未加以注意造成的。不管使用运动控制卡或其他类别的运动控制产品,如果对这些问题不加注意,它往往会在不经意间出现,引起机械运动误差,造成损失。而当你在实验室中针对它进行测试时,又因为参数和使用环境的变化,问题却不能重现,所以非常难以捕捉。本文主要针对这几个最常见的疑难问题进行描述、分析、并提出一定的解决方法。
第一节 首先应该做什么
在客户提出使用控制卡出现了位置偏差的时候,首先应该做的就是定位偏差来源,也就是定位“究竟是控制卡的问题,还是电机和机械的问题”?这是非常关键的定位思路。
原因在于,“软件和控制卡的问题”的寻找定位和“电机和机械的问题”的寻找定位是完全不同的方式,如果首先不区分好是哪一个模块的问题就直接深入到细节上,往往会找错方向。
最常见的定位工具是伺服驱动器的“显示指令位置”功能,如果问题轴所用电机正好是伺服电机,那就非常方便了。如果使用的是步进电机,则可能需要外接一个伺服电机进行测试。其他如示波器、逻辑分析仪也可以进行测试,但是不如伺服电机方便。
测试方法非常简单,就是首先计算出某一工位处,控制卡“按理应该发送多少个脉冲”,然后观察伺服驱动器的显示,是否“接受到了同样数量的脉冲”。如果两个数量一致,并且长期工作后(过程中没有借助传感器的复位动作,如果有复位动作则是另一回事,后文有详述),还是精确一致的话,就说明软件和运动控制卡没有问题,需要在电机和机械上找问题。相反,如果运行一段时间后,到达指定工位时,控制卡“理应发送的脉冲数”与“伺服电机接受的脉冲数”不相同了,并且有误差越来越大或者误差大小随机变化的情况,则可以判断是下文中提到的“疑难问题”之一。
第二节 取整误差累计
取整误差累计是因为上位机控制软件在设计时,全部采用“相对位置运动”功能,在计算相对位置脉冲数时,由于取整误差造成的小数位脉冲数丢弃,而当正向丢弃数和反向丢弃数不一至时就会造成微小的位置偏差,经过长期运行反复积累后,此偏差逐渐会发展到肉眼可见的程度。举例如下:
某客户在数控平面钻孔机上采用了运动控制卡,工位和运动方式如下:
如图所示,钻头从原点出发,到达工位A开始钻第一个孔,然后向右逐个钻孔,孔之间横向间距10mm,钻到工位B后,X方向横向平移,同时Y方向移动,到达工位C。
程序员是这样设计程序的:
float ValueX = 500.19; //脉冲当量,500.19个脉冲机械走1mm
float MMTargetX=0; //运行目标相对位置
long PulseTargetX=0; //运行目标相对位置
MMTargetX=10; //横向运行距离10mm
PulseTargetX= (long) (MMTargetX * ValueX); //得到运行脉冲数5001
YK_start_s_move(XAxisNum, PulseTargetX); //发指令让X轴正向走5001个脉冲
//等待运行结束
MMTargetX=10; //横向运行距离10mm
PulseTargetX= (long) (MMTargetX * ValueX); //得到运行脉冲数5001
YK_start_s_move(XAxisNum, PulseTargetX); //发指令让X轴正向走5001个脉冲
//等待运行结束
……运行10次
MMTargetX=-100; //横向运行距离-100mm
PulseTargetX= (long) (MMTargetX * ValueX); //得到运行脉冲数-50019
YK_start_s_move(XAxisNum, PulseTargetX); //发指令让X轴反向走50019个脉冲
//等待运行结束
从上面的程序很容易看出来,正向运行时,总共走了5001×10=50010个脉冲,而反向运行时,走了50019个脉冲。虽然看起来每次正向运行了10mm,运行10次后,反向运行了100mm,所以在工位C处X轴坐标应该跟工位A一致,但是实际上由于正向运行时取整误差舍去了10次0.9个脉冲,而反向运行时则没有因为取整误差而舍去脉冲,所以一来一回就会有9个脉冲的累计。
对于一般的机械设备来说,9个脉冲可能还看不出来位置的偏差,但是随着反复的加工,如果没有借助传感器的复位动作的话,这个误差会逐渐随机积累,位置会越来越偏,最终导致加工失败。
这个问题的出现纯属软件工程师经验不足。如果想要在程序设计时避免此问题,有以下方法可以解决。
方法一:避免在整个加工过程中全部使用“相对位置运动”,在一个加工流程中添加一定量的,至少一条绝对运动指令,就可以消除掉取整误差的带来的积累偏差。
如在上述工序中,在工位A处记录X轴坐标,然后将从工位B到工位C的移动改用“绝对位置移动”指令。在工位B时,运动控制卡会自动读取当前的实际坐标,与工位A处的坐标进行对比,然后准确地走出50010个脉冲,这样一来,从工位A到工位B的所有取整误差就全部纠正过来了。
方法二:增加复位动作。
每个工件加工完成后利用传感器进行一次原点复位动作,不仅能消除取整误差的积累,而且还能消除机械误差的积累,也是不错的选择。
除了上述的“往返”运动,有些单向送料系统,如制袋机类,在重复进行单方向运行时,由于取整误差的积累也会引起加工问题。而此类系统又无法进行复位或者插入“绝对位置运动”指令。这种情况下推荐在编程时采用一种简单实现的“四舍五入法”,具体方法如下。
在计算指令脉冲数时,在浮点数的结果后面+0.5,再取整,以上文中的程序为例:
MMTargetX=10; //横向运行距离10mm
PulseTargetX= (long) (MMTargetX * ValueX+0.5); //得到运行脉冲数
YK_start_s_move(XAxisNum, PulseTargetX); //发指令让X轴正向运行
在计算指令脉冲数时采用了此方法可以减小取整误差带来的干扰,但是并不能消除,这是针对无法进行上述两种方法时的折衷办法。不过由于简单易行,推荐给软件工程师在计算脉冲数时使用。
第三节 换向时第一个脉冲的运动方向误差
在试机的过程中出现过这样的问题:当使用某一品牌的驱动器,运行就非常准确;而换用另一品牌的驱动器,走一些固定的动作时就会越走越偏。而容易走偏的驱动器换了另一家的控制器,就又好了。
问题的原因出现在方向信号提前不足。
当前大部分驱动器是按周期扫描锁存方向信号,当捕捉到PULSE的有效信号沿时,再去根据锁存的方向信号进行运动,在读取锁存方向信号到判断PULSE信号有跳变之间有一个偏差τ。而对于PULSE的有效边沿,有些驱动器是上升沿有效,而有些驱动器是下降沿有效。文中将上述类型的驱动器简称为先方向上升沿类型和先方向下降沿类型驱动器。
也有一些国内不太知名公司提供的驱动器,采取这样的方式:当捕捉到PULSE的有效信号沿时,再去即时读取方向信号,判断运动方向。在读取到有效信号沿后,距离读取方向信号也有一个时间偏差τ。下文中将此类驱动器称之为上升沿后方向和下降沿后方向类型驱动器。这种情况比较少见,在此不做讨论。
图3先方向上升沿型驱动器 图4 先方向下降沿型驱动器
不同公司的驱动器,甚至同一公司的不同型号驱动器,时间τ都不一样。有些驱动器比如研控模拟驱动器,这个时间非常小;但是对于新型的数字型驱动器,由于采样周期的原因,此周期长达125μS,这就给控制信号提出了要求:
方向信号必须要早于脉冲信号到位,最少要早τ秒,否则会引起换向后,第一个起跳脉冲的运动方向错误。
当然,即使满足不了此要求,对于普通的运动来说,如果发生了这类错误无非就是起跳时少了2个脉冲,一般情况下不会影响设备精度。但是当设备被要求反复折返的启停运动时,就有可能引起误差的积累。但是同时,因为此误差类似于机械间隙,只出现在换向后的第一次运动时;而大部分情况下,正反运动会对此误差进行抵消。因此,此情况只会带来微小的误差,不会产生太大的影响,但在对精度要求非常高的场合需要注意这个问题。
规避方法:查看驱动器产品说明书,大部分驱动器都会对此时间τ进行规定。而研控MCC1410C的方向提前时间受起跳速度影响,最短情况下105μS;但只要将起跳速度降到100KHz以下,方向信号的提前时间就到了毫秒级别,不会产生上述错误的情况。
第四节 原点复位误差
有的客户反馈,在进行复位动作的时候,就会产生位置偏差。
一般来说,我们推荐客户在设计工序时,每完成一整套加工步骤后,进行一次复位动作,这样可以消除积累误差,包括机械打滑误差、齿轮间隙误差和驱动器少量丢步造成的误差。但复位动作的运动参数设置、复位动作顺序设置、传感器的选择和安装位置、以及伺服参数设置的恰当与否都会影响复位精度。当客户发现复位会导致运行位置不准时,客户通常会首要考虑排除传感器灵敏度、动作是否过猛等,因此问题往往不大,本节主要描述当伺服参数设置不当这一较少能考虑到的情况会引起的复位偏差。当使用伺服电机时,如果参数调整不当,刚性太弱,会造成该轴原点复位时的误差。
总的来说,伺服是一个必须要考虑其滞后特性的执行部件。当设置伺服参数时,刚性越小,运行时的实际滞后就越大。直观上看起来就是“软软的,懒懒的”,指令脉冲开始发送了,它才会慢慢动起来;指令脉冲已经发完不发了,它还要往前走一阵才能停下来。这种特性跟它的闭环控制特性有一定的关系。
当单轴运动进行时,这种滞后通常不会影响生产,甚至觉察不出来,因为虽然运动滞后,但是最终还是会准确到位。但是当进行插补运动或者原点复位时就会产生很大的影响。
比如当系统复位时,当传感器被触发,发出限位信号给控制卡,控制卡马上停止了脉冲的发送。但是此时伺服电机由于反应的滞后,还是会往前走一阵,这一段距离就造成了偏差。
解决的方法就是:
1.在系统稳定没有太大冲击的情况下尽量调高伺服的刚性;
2.在不影响生产效率的情况下降低复位运动的速度,或者采取二次复位的方法,第一次高速复位,到位后,再低速向回找原点信号。
第五节 其他情况
情况一:驱动电压/电流不足
当客户采用一路控制信号带多路驱动器时,可能会出现驱动电流不足的情况,继而导致驱动器无法顺利获取信号。
研控运动控制卡多采用AM26C31芯片来产生驱动电流,限流电阻20欧姆,最大电流150mA,因此不推荐采用一路运动控制信号带多路驱动器。如果必须采用这种接法,则最多带两台驱动器,如果超过此数值可能会造成芯片过热烧坏或者信号丢失等情况;同时要注意,不保证此种接法的运动稳定性。
情况二:限位信号干扰/误碰
客户采用非研控生产的运动控制卡时,可能会随机地出现设定的运动距离还没走到,就停下来的问题。甚至会带来撞机等严重的情况。这种偏差会非常大,随机无规律地出现,一次出现马上就造成运行的混乱。
这种情况往往是某轴在运行时,该轴的“限位信号”受到了干扰,令板卡认为应该停止该轴的动作。
对于这种情况的判定要从软件上进行抓取,当调用函数判断一个轴是否停止的时候,如果返回值不是“脉冲发送完停止”,而是“未知异常停止”或者“遇到限位点停止”,就基本可以定位是限位点受到了干扰。然后可以将受到干扰的轴的限位信号从接线板上断开,看看是否还有此情况产生。
针对此问题,需要从硬件上查找干扰源、干扰传递的通路。常规的滤波,分开供电,屏蔽,重新布线等方法都可以试一下。不过最有效的,是换用研控的运动控制卡产品,具备强大的抗干扰特性(滤波参数可设置),能够根除此类问题。
报告人:余挺