Back-EMF speed detection in motors

I'm working on a project that involves replacing some existing electronics with some that I've designed. It's controlling the speed of DC brushed motors. Since the original equipment uses a knowledge of the applied voltage and the motor current to infer back EMF and therefor motor speed, that's what I've done, too.

My problem is that my equipment is consistently sensing the speed as being faster than it really is, by a constant amount -- except when the motor is stalled, when the reading is correctly zero. So I end up servoing the motor speed to a figure that's a 20-30 RPM higher than desired.

It's not just a mis-calibration of the motor torque constant or the resistance -- if that were the case, then the motor speed error would depend on the command speed or the applied torque. I can easily calibrate out any dependence on torque (by adjusting the calibrated motor resistance) and I can get a 1:1 correspondence between increments in the commanded speed and increments in the actual speed. But I'm left with this @#$% offset.

Has anyone seen this? Anyone care to hazard a guess at what's going on?

Thanks.

Reply to
Tim Wescott
Loading thread data ...

Brush noise trashing an opamp?

Reply to
John Larkin

How, specifically, are you "inferring" the back EMF from the applied voltage and the current? ...Jim Thompson

Reply to
Jim Thompson

Measuring the zero crossing point too close to the commutation time while commutation noise is still affecting the reading (and/or your cables are on the long side) or there's enough capacitance in the leads / circuit for the initial jump during commutation to push the BEMF zero crossing time forward for just the right amount of time?

Wait - are you reading it sooner than anticipated or later? trying to wrap my head around the description you posted while caffeine hasn't fully kicked in. If it's sooner, then you're probably reading it too soon and there may actually be yet another (real) zero crossing in the same period .

Take anything I say on the subject with a huge grain of salt - I've never actually dealt with anything brushed that did not have an encoder attached to it. Do you still do it in a way similar to what you would have done for a sensorless brushless? I would imagine brushed commutation would be *way* noisier than brushless so would require long[er] ZC hold-off times, perhaps even too long for high RPMs.

Sorry, not offering a solution here, just trying to think along ...

Reply to
passerby

Back EMF = voltage - current * R

where R is the calibrated armature resistance (and yes, it changes discernibly when the motor heats -- that's not my immediate problem).

Reply to
Tim Wescott

DC _brushed_ motors. One doesn't have access to the zero crossing time (if I did, I'd know the motor speed). One measures current and voltage, then one takes the (theoretically known) resistance, and backs out a number for the back EMF. Then one uses that to determine motor speed.

Reply to
Tim Wescott

I was once told by my lecturer many, many years ago, that the gap between brushes and the commutator require a small voltage to produce a plasma to carry the commutator current.

Have you worked out this "offset" voltage?

Reply to
Mike Perkins

Stray inductance.

Vladimir Vassilevsky DSP and Mixed Signal Designs

formatting link

Reply to
Vladimir Vassilevsky

The idea of computing back EMF, and using that to improve speed regulation, is pretty much equivalent to driving the armature from a power supply with a negative output resistance.

That can get unstable, with intertial issues, so it sometimes makes sense to tweak the dynamics of that negative resistance.

Reply to
John Larkin

Tim - is the voltage supplied from a pulse width modulated source? If so, is it measured or calculated?

Hul

Reply to
dbr

Hi, Tim:-

To control a brushed PM DC motor using IR compensation, you apply a voltage proportional to the desired speed, plus a compensation term equal to the product of the motor (and series wiring) resistance and the measured armature current.

To get a fixed RPM error implies to me that either your current sensor or your voltage DAC (or whatever) has a DC offset.

Picking some numbers out of the air:- If the motor is a 24V motor that goes 5000 RPM at full voltage Say maximum operating current is 1A, and resistance is 2.4 ohm (LRA of 10A)

Voltage error for 25 RPM is 120mV

Current error for 25 RPM is 0.12/2.4 = 50mA

--sp

Reply to
Spehro Pefhany

My WAG is that your "armature resistance" is not really a constant. There will be times when (depending on the commutator) the brushes will likely be connected to two separate windings; other times only one. Given sufficient rpm you could probably use some time-averaged value; is that what you've done?

Reply to
Frank Miles

Seconded, although on gut feeling. Not sure I can explain it.

Would that not contribute to an effective R? Perhaps the "offset" (which isn't a true offset -- it's still zero at zero!) is a polynomial correction instead (leakage's offset being proportional to RPM)?

Tim

Reply to
Tim Williams

Ah, that's a good one too...

Tim, you say it's zero at zero (locked rotor), but is it always zero? Does the offset change with position..?

Tim

Reply to
Tim Williams

Here is something that might help, although they use a PWM drive and measure the back EMF during the OFF period:

formatting link

The following seems to use an encoder, but may have some helpful info:

formatting link

More info:

formatting link

And this:

formatting link

I have heard that it may be possible to sense the change in current and/or voltage caused by the commutation but it tends to be noisy and dependent on things like brush and commutator condition.

Paul

Reply to
P E Schoen

You've received a number of hints already. One more: Could it be that this motor is arcing? Then you would not see any effect when at standstill.

Reply to
Joerg

Tip 7? That only works if there's no current in the shunt diode, which has nasty implications.

Reply to
John Larkin

In the past I've done really good with just using an external resistor equal to the winding resistance, so I'm not quite sure what setup Tim is using. ...Jim Thompson

Reply to
Jim Thompson

Hmm, I had to scroll up there to see what type of motor you are using..

If that is a shunt/PM style motor, I don't quite understand how that will work? Maybe I am missing something.

I have a pretty good understanding of DC brushed motors and I just don't see it happening that way.

Dynamic(R) = Varm / Iarm.

Now since the motor has some DC R in it, this must be treated like a series R with an ideal motor.

Most drive electronics knows the size of the motor and knows ~ what the DC R should be, along with the expected dynamic current from the motor. The drive will advance the arm voltage above the set point when current is building to calculate for this offset. When monitoring feedback for an external reference for example, this offset should be removed. Many high end drives have the ability to adjust this.

So, output arm voltage must be offset (increased) as current increases, to over come the DC R. much like satisfying a voltage need at a divider node, the motor being the point of the dropping R and DC R in the motor being the series R.

I've played around with lots of small motor drive circuits and that is how I've done it. The feed back circuit uses the current to scale the voltage reading back so that output voltage will raise above set point to satisfy the offset requirements. This will make the motor spin a little faster and match your readings.

That's my blog for the day, and long winded as it is. Most likely nothing you can use. :)

P.S. Flux density in the field is going to effect your speed at specific arm voltages, just incase you didn't think of that.

Have a good day..

Jamie

Reply to
Jamie

Here's the way I've done it in the past...

formatting link
...Jim Thompson

Reply to
Jim Thompson

PolyTech Forum website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.