Jump to content
OMRON Forums

Recommended Posts

Posted

I am using an ACC-24E2A to control 4 stepper motors. I am sending step and direction signals to the stepper drivers.

 

All motors are indexing correctly as expected.

 

However, one of the motors chatters when idle. After lots of fussing around, I put an oscilloscope on the step and direction outputs of the card. I discovered that when no motion of any kind is being commanded, the ACC-24E2A continues to send step pulses at a low but randomish frequency on all 4 step outputs.

 

When no motion is being commanded, the direction output is somewhat of a square wave whose frequency drifts somewhat and whose high and low duty cycle varies somewhat randomly causing the average value of this squarish wave to vary above and below zero.

 

is this normal?

 

Three of the drives ignore the spurious step pulses when the direction output is in this square wave state. The fourth drive, a different brand than the other three, apparently does not know that it is supposed to ignore the spurious step pulses when the direction output is in this square wave state. Since the high and low duty cycle of the direction output varies randomly causing the average value to vary both positive and negative, the average value occasionally rises high enough to cause the drive to act on the spurious step pulses causing the motor to slowly drift.

 

The only way I have found to protect against this is to kill the axis at the end of the move.

 

When commanding motion, the step and direction outputs look exactly like I would expect on a scope.

 

Questions:

1. Should the ACC-24E2A be sending these spurious step pulses when no motion is being commanded? This doesn't seem right.

2. Should the direction output be producing a squarish wave whose frequency and duty cycle is varying randomly when no motion is being commanded? This doesn't seem very practical either.

 

Or have I set something up wrong?

  • Replies 7
  • Created
  • Last Reply

Top Posters In This Topic

Posted

Can you share the following?

- Clock settings

- Ixx69

- PID gains

 

What is the maximum frequency at which the drive operates? What is the minimum pulse width which the drive accepts?

 

Higher PFM frequencies may produce sporadic pulses. Tightening the PID gains too much may also have the same effect.

Posted

How about using deadband gains?

 

Motor[xx].Servo.OutDbOn = 0.5
Motor[xx].Servo.OutDbOff = 0.5
Motor[xx].Servo.OutDbSeed = 1

 

It would be helpful to remove chattering while not moving when use stepper pulse & direction.

Posted

1. Attached please find my config file that shows gains and such.

2. Are the clock settings in the attached file the ones you were asking for?

3. What is Ixx69? Hasn't this been replaced by Motor[x].MaxDac?

4. I don't think the maximum frequency of the drive is pertinent to anything. The point is, the PPMAC servo card is sending the spurious pulses when I would expect it to be sending nothing.

5. You didn't answer my question about the direction signal. It appears that the direction signal is either about +4 volts, -4 volts, or a square wave with varying frequency. Does this seem right?

6. I will try the deadband approach.

Copy of config 2014-03-14 1801.txt

Posted

From the User's Manual for pulse-and-direction output mode:

 

Deadband

 

Because it is easy to command end positions with fractional-count components and the system can only resolve full count (pulse) values at rest, it is strongly advised to implement a count of true deadband in the simulated servo loop to prevent dithering at rest. To do this, the following settings should be made:

 

Motor[x].Servo.BreakPosErr = 1.0 // For motor scaled in counts (pulses)

Motor[x].Servo.Kbreak = 0 // Zero gain inside deadband zone

Posted

1. Watching the position and following error windows with the motor at rest, I can see that the system is dithering about a motor count or two.

2. If I command open loop with output zero, the dithering stops. This tells me that the root cause is a hyperactive servo loop. (This is step and direction with no encoder feedback).

3. After experimentation, I used the following settings.

Motor[x].Servo.OutDbOn = 4

Motor[x].Servo.OutDbOff = 4

Motor[x].Servo.OutDbSeed = 1

and

Motor[x].Servo.BreakPosErr = 2

Motor[x].Servo.Kbreak = 0

4. The position feedback gain was initially 4. Changing the gain from 1 up to 16 did not seem to make any difference at all with the dithering so I left it at 4.

5. After making the changes above, the dithering seems to damp out significantly after about 3 seconds, sometimes going away altogether, sometimes reducing down to about 2 faint clicks per second coming from the motor.

6. When it doesn't go away altogether, I can hear about two faint clicks per second coming from the motor. I can also see the position and following error changing down at the 4th or 5th decimal place. This seems odd. Shouldn't the above changes prevent dithering of less than a motor count? Might I have some position scaling that would account for this?

 

At this point, this is a cosmetic problem in the sense that I know the motor is not really moving. This axis drives a high magnification microscope zoom lens on a precision measurement vision system that has a small amount of backlash in the zoom lens, much more than 1 or 2 motor counts I am sure. So although I don't think the motor is actually moving, this ticking is going to frighten my customer into thinking it may be causing vibration causing the vision system to give erroneous results.

 

What additional suggestions can you provide for suppressing this dithering?

Thanks;

Posted

Hi, mshaver.

 

I'm using the same system configuration with steppers.

 

If you are using the default Sys.Servoperiod, belows may be the same.

 

This is my setup.

close

// Motor1 Stepper Axis Setup
Gate1[4].Chan[0].EncCtrl=8;	// Internal Pulse & Direction
Gate1[4].Chan[0].OutputMode=3;
Motor[1].DacBias=0;
Motor[1].pDac=Gate1[4].Chan[0].Pwm[2].a;
Motor[1].pLimits=0;		// Disable Limits
Motor[1].pAmpFault=0;	// Disable Amp Faults
Motor[1].Servo.Kp = 10;
Motor[1].Servo.Kvfb = 0;
Motor[1].Servo.Kvff = 15;
Motor[1].Servo.Ki = 0;
Motor[1].Servo.SwZvInt = 0;
Motor[1].Servo.Kaff = 0;
Motor[1].Servo.OutDbOn = 0.5;
Motor[1].Servo.OutDbOff = 0.5;
Motor[1].Servo.OutDbSeed = 1;

// Motor2 Stepper Axis Setup
Gate1[4].Chan[1].EncCtrl=8;	// Internal Pulse & Direction
Gate1[4].Chan[1].OutputMode=3;
Motor[2].DacBias=0;
Motor[2].pDac=Gate1[4].Chan[1].Pwm[2].a;
Motor[2].pLimits=0;		// Disable Limits
Motor[2].pAmpFault=0;	// Disable Amp Faults
Motor[2].Servo.Kp = 10;
Motor[2].Servo.Kvfb = 0;
Motor[2].Servo.Kvff = 15;
Motor[2].Servo.Ki = 0;
Motor[2].Servo.SwZvInt = 0;
Motor[2].Servo.Kaff = 0;
Motor[2].Servo.OutDbOn = 0.5;
Motor[2].Servo.OutDbOff = 0.5;
Motor[2].Servo.OutDbSeed = 1;

// Motor3 Stepper Axis Setup
Gate1[4].Chan[2].EncCtrl=8;	// Internal Pulse & Direction
Gate1[4].Chan[2].OutputMode=3;
Motor[3].DacBias=0;
Motor[3].pDac=Gate1[4].Chan[2].Pwm[2].a;
Motor[3].pLimits=0;		// Disable Limits
Motor[3].pAmpFault=0;	// Disable Amp Faults
Motor[3].Servo.Kp = 10;
Motor[3].Servo.Kvfb = 0;
Motor[3].Servo.Kvff = 15;
Motor[3].Servo.Ki = 0;
Motor[3].Servo.SwZvInt = 0;
Motor[3].Servo.Kaff = 0;
Motor[3].Servo.OutDbOn = 0.5;
Motor[3].Servo.OutDbOff = 0.5;
Motor[3].Servo.OutDbSeed = 1;

// Motor4 Stepper Axis Setup
Gate1[4].Chan[3].EncCtrl=8;	// Internal Pulse & Direction
Gate1[4].Chan[3].OutputMode=3;
Motor[4].DacBias=0;
Motor[4].pDac=Gate1[4].Chan[3].Pwm[2].a;
Motor[4].pLimits=0;		// Disable Limits
Motor[4].pAmpFault=0;	// Disable Amp Faults
Motor[4].Servo.Kp = 10;
Motor[4].Servo.Kvfb = 0;
Motor[4].Servo.Kvff = 15;
Motor[4].Servo.Ki = 0;
Motor[4].Servo.SwZvInt = 0;
Motor[4].Servo.Kaff = 0;
Motor[4].Servo.OutDbOn = 0.5;
Motor[4].Servo.OutDbOff = 0.5;
Motor[4].Servo.OutDbSeed = 1;

 

Please refer to the settings above.

 

I'm sure this settings would be fine.

Guest
This topic is now closed to further replies.

×
×
  • Create New...