Jump to content
OMRON Forums

Tips for tuning a brushless servo dc motor


bmartins

Recommended Posts

Hi,

 

I am trying to get the maximum performance out of a brushless servo dc motor. However, I can't seem to get the last bit of performance out of it.

 

My objective is to get a very small following error (better than 0.25 millidegrees, ~30 counts peak to peak) during a short (few seconds) constant speed movement, preferably with no spikes.

 

What I noticed is that the following error seems to correlate with the motor poles positions. I see a sort of a sinusoid with peaks every 15 degrees. Currently I am able to get ~100 cts peak to peak, with spikes almost up to +75 counts (see attached image).

 

Is there a known trick to get rid of it?

 

I tried using a compensation table which reduced the problem somewhat but not much.

 

It is a 48 poles motor with 20736000 quadrature counts per revolution.

 

Thanks!

2017-05-03-omega-tuning-1.thumb.png.194b174b251f590434e06356a4dbd891.png

Link to comment
Share on other sites

  • Replies 2
  • Created
  • Last Reply

Top Posters In This Topic

Popular Days

Top Posters In This Topic

Posted Images

You don't say what type of compensation table you tried, but if your problem is motor cogging (and it looks like it might be...) then adding a *torque* compensation table to counteract it is a known effective approach. You then have to decide if you want to create the table entries using empirical (measured) data, or from some sort of model of the cyclic torque disturbance. I've seen both methods work. Another problem that can cause this sort of response is poor resolution in the current loop of the drive, where you might be only commanding a small fraction of what the peak current capability is, and you get cyclic quantization error. Still, your performance looks pretty darn good.
Link to comment
Share on other sites

Try using Iterative Learning Control, a feature in the Tune tool. Also, introducing a small deadband with positive deadband gain can help with that "last bit" sometimes. That would be a Motor[x].Servo.Kbreak > 1.0 and 1.0 > Motor[x].Servo.BreakPosError > 0.0. Careful not to use too big of a Kbreak or too big of a BreakPosError as this can introduce chatter, which would actually worsen your performance.
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.

×
×
  • Create New...