kandauru Posted May 11, 2017 Share Posted May 11, 2017 Hi, we are running the machine with 8 axes. X1 and X2 are in gantry-follower mode (it is a bridge), defined as: 1->X 2->0 Motor parameters and motors are same. The problem is that in any kind of movement (JOG, REL, ABS) X1 and X2 are not synchronized. X2 (the follower) moves or faster, or slower, depends on direction. It is Power Brick controller with last Power PMAC IDE (2.2.0.39). Please, advise. Link to comment Share on other sites More sharing options...
steve.milici Posted May 12, 2017 Share Posted May 12, 2017 Is there excessive following error? Link to comment Share on other sites More sharing options...
kandauru Posted May 14, 2017 Author Share Posted May 14, 2017 No, the following error is not excessive. But it is not becoming 0 at the end of the movement. It stays still small up to 20 motor units (the motor ratio is 266 mu/mm). Link to comment Share on other sites More sharing options...
Richard Naddaf Posted May 14, 2017 Share Posted May 14, 2017 What are your gantry related settings for both motors? Motor #2 does not need to be assigned in the coordinate system. Once in gantry mode, you forget about it and handle the motion using #1. Link to comment Share on other sites More sharing options...
kandauru Posted May 15, 2017 Author Share Posted May 15, 2017 Hi, I move motor X1 only in gantry mode, X2 is inaccessible from my application Here are the gantry mode related settings: //// Motor 1 - X1 Motor[1].ServoCtrl = 1; Motor[1].DacShift = 0; Motor[1].pAdc = 0; //// Motor 2 - X2 Motor[2].CmdMotor = 1 //leader id/ Motor[2].ServoCtrl = 8 //follower Motor[2].GantrySlewRate = 2 Motor[2].DacShift = Motor[1].DacShift Motor[2].pAdc = Motor[1].pAdc &1 #1->X #2->0 //X2 Link to comment Share on other sites More sharing options...
Richard Naddaf Posted May 15, 2017 Share Posted May 15, 2017 Look into Motor[].ExtraMotors, and Motor[].Ctrl. Also, I recommend unassigning #2 from the coordinate system. Link to comment Share on other sites More sharing options...
Clopedandle Posted May 15, 2017 Share Posted May 15, 2017 Remember also to use a nonzero (and usually quite small depending on the system, ~0.001 for example) Motor[x].Servo.Ki to ensure 0 following error at steady-state. Link to comment Share on other sites More sharing options...
jtaseff Posted May 16, 2017 Share Posted May 16, 2017 Tangential question -- Richard, why do you recommend not having the 2nd gantry motor assigned to the coordinate system? What I've seen is that doing "&1 enable" will not actually enable the 2nd motor, and with Motor[1].FaultMode=1, a fault on the first will not kill the 2nd motor, unless it is assigned with "&1#2->0" Link to comment Share on other sites More sharing options...
curtwilson Posted May 16, 2017 Share Posted May 16, 2017 A couple of points: The follower motor should NOT be assigned to an axis in the coordinate system (e.g. #2->X), as this will result in it being "double commanded". It is best to assign it to the "null" definition in the coordinate system (#2->0) so it shares enabling and disabling (commanded or fault). Most people first try independent servo control of the two axes first, using the default servo algorithm (Motor[x].Ctrl=Sys.ServoCtrl) for both motors. It is worth spending some time trying to optimize these settings. However, if you cannot get good enough performance, the next step is to implement the cross-coupled gantry servo algorithm. This is done by setting: Motor[1].Ctrl=Sys.GantryXctrl Motor[1].ExtraMotors=1 This adds cross-coupling terms Motor[x].Xpg, Xig, and Xvg for both motors based on the difference in following error. The IDE has windows to facilitate the tuning of these terms. Link to comment Share on other sites More sharing options...
Richard Naddaf Posted May 16, 2017 Share Posted May 16, 2017 Yup, sorry, I misread your assignments. Null definition is best. Sys.GantryXCtrl should help with the synchronization. But your description of the problem (e.g. direction dependant) does sound like a tuning issue. Link to comment Share on other sites More sharing options...
kandauru Posted May 17, 2017 Author Share Posted May 17, 2017 Hi, just to make it clear for me, instead of: //// Motor 1 - X1 Motor[1].ServoCtrl = 1; Motor[1].DacShift = 0; Motor[1].pAdc = 0; //// Motor 2 - X2 Motor[2].CmdMotor = 1 //leader id/ Motor[2].ServoCtrl = 8 //follower Motor[2].GantrySlewRate = 2 Motor[2].DacShift = Motor[1].DacShift Motor[2].pAdc = Motor[1].pAdc I should try: Motor[1].Ctrl=Sys.GantryXctrl Motor[1].ExtraMotors=1 And tune cross-coupling terms Motor[x].Xpg, Xig, and Xvg for both motors. How should be declared Motor[2] in such a case? (Motor[2].CmdMotor for example). Does it appear somewhere in manuals? Link to comment Share on other sites More sharing options...
Richard Naddaf Posted May 17, 2017 Share Posted May 17, 2017 Motor[1].ExtraMotors = 1 Motor[1].Ctrl = Sys.GantryXCtrl Motor[2].ServoCtrl = 8 Motor[2].Ctrl = Sys.GantryXCtrl Motor[2].CmdMotor = 1 Motor[2].GantrySlewRate = 2 I would try making it work as expected first. If you can physically tune independently (decoupled), then you do want to make sure that each motor tuning is solid. Setting up the gantry cross coupling gains is typically the final step in the optimization process. Remember, this expects your alignment to be ideal. Link to comment Share on other sites More sharing options...
curtwilson Posted May 17, 2017 Share Posted May 17, 2017 Kandauru: You are confusing two separate issues. The first is how you generate trajectories for the two motors. We strongly recommend the leader/follower method that you have already implemented. Virtually everyone doing gantry control uses this method. The second issue is how you close the servo loops for the two motors. Most people get good enough performance just closing independent servo loops on each motor (what you have been trying so far). Those who cannot get their required performance with independent loop closure go to the cross-coupled gantry algorithm. The additional cross-coupling terms can improve performance, but not everyone needs this boost. Link to comment Share on other sites More sharing options...
kandauru Posted May 22, 2017 Author Share Posted May 22, 2017 Thank you all, this was a mechanical problem at the end. Link to comment Share on other sites More sharing options...
Recommended Posts