# Clarke-Park transform for an induction motor current

1. Apr 30, 2015

### awaiting

Hi everyone,

I am facing some problems in performing clarke-park transform for an induction motor(4 pole stator, squirrel cage IM).
The motor is run with three sine wave inputs, 120 degrees phase shifted with each other.
I am measuring the rotor position from the encoder and using twice of this value as theta for the park transform(position in radians). But since the rotor speed is slightly less than the synchronous speed, the transform is displaying a sinusoidal waveform. The frequency of Id-q sine wave increases with increase in the input frequency. For 10Hz input sine wave I am getting 0.01Hz sine Id-Iq values.
I also tried by integrating the speed(rad/s) to get theta, but the result was the same.

Instead of using the rotor position value, if I use a constant of 2*pi*f*t for theta, I get a proper constant dq values. But when I would be performing control, I wont have the frequency data available with me and it would be difficult to get a constant dq values.
I had used the same formulas for the PM synchronous motors and it gave constant Id, Iq values.

Could you please suggest any way of solving this problem.
Thanks

#### Attached Files:

File size:
3.4 KB
Views:
104
• ###### park.JPG
File size:
6.3 KB
Views:
116
2. Apr 30, 2015

### Hesch

You cannot measure the mechanical position (θ) in an asynchronous motor (induction motor) using clark-park, because the poles positions in the rotor will "slide", ( otherwise no currents will be induced in the squirrel cage ). The encoder will measure the mechanical position correctly. You can measure the mechanical position in a synchronus motor as the positions of the poles are mechanically fixed here.

Say you by a dc voltage-supply connects the phases of the induction motor, so that Ia and Ib = 1A, and that Ic = -2A: Nothing will happen when switching on the supply, because you will just induce a temporary opposite magnetic field in the rotor as to the stator-field. The motor will not turn/bounce. Now you turn off the supply and rotate the rotor by hand 90 electrical degrees. Turn on the supply again: Nothing will happen because you just induce the same magnetic field in the rotor again. The magnetic field cannot sense, that the rotor has been rotated mechanically 90 electrical degrees.

If you carry out the same with a synchronous motor, it will bounce ( at least one of the times).

So with an asynchronous motor and clark-park you can make a speed control with some accuracy.

Last edited: Apr 30, 2015
3. Apr 30, 2015

### jim hardy

Hesch has a point, rotor position is not the same as rotor field position because of slip.

is this paper any help ?

http://www.ti.com/lit/an/bpra048/bpra048.pdf

this one has a paragraph about induction motor and references to estimate θ for it.

one would need to know something about the motor's rotor characteristics. Probably he could estimate them from torque vs slip curve and get close enough for successful closed loop control?

old jim

ps another paper , too intimidating for me.

system ignoring buttons again please forgive if multiple posts appear

4. Apr 30, 2015

### Hesch

I don't know if use of clark-park is a must, but very cheap magnetic encoders are available:

A magnet, mounted at the shaft of the motor, rotates close to some chip that can sense the flux and can generate pulses and position. The advantage by this system is that the chip knows the position, even when power has just been turned on. A "normal encoder" (and its counter) must at first be "reset" at θ=0 before the counter-value represents a valid position.

I think? that the resolution of this magnetic encoder is about 1024 counts per rev. That is much better than what can be achieved by clark-park.

Last edited: Apr 30, 2015
5. Apr 30, 2015

### awaiting

Thanks for the replies!

Could you please suggest the steps to find the rotor characteristics from the torque slip curve.
I havnt gone through the papers you have suggested but will read them in a day or two

6. Apr 30, 2015

### jim hardy

well, maybe an approach.
Here's a nuts & bolts explanation of how rotor resistance affects that curve
http://people.ucalgary.ca/~aknigh/electrical_machines/induction/design/rotor_influence.html

low r gives left curve, B motors for general use
high r gives right curve, D motors for constant torque loads like cranes or elevators.

here's two papers that describe making measurements on a real motor..
Diclaimer - i've never done it,

http://www.ece.vt.edu/ece3354/labs/induction.pdf [Broken]

Last edited by a moderator: May 7, 2017
7. Apr 30, 2015

### Hesch

I assume that you will use this characteristic as a table in a digital controller (computer):

Load the motor with a constant torque and let the computer slowly accelerate from stagnation to full speed. In the computer some registers will hold internal values as

(torque input) → (table) → (motor characteristics) → (torque output).

(This is external values).

Let the computer fill the table with values, so that a slow acceleration is achieved at a constant torque input . Then "lock" the table, which are now linearising the motor characteristic as a function of speed/slip, that is measured by your encoder. ( Automatic adjustment/tuning done in 10 minutes ).

Last edited: Apr 30, 2015
8. Apr 30, 2015

### jim hardy

Ahhh youth ! The tools you guys have are amazing !

9. May 3, 2015

### awaiting

Hesch, could you explain the process in a bit detail, as to what are the interval values.

I only have feedback from a current sensor and incremental encoder to the PC.
I am presently operating in open loop by giving three sine waves(120 degrees phase shifted) with a fixed input frequency.

Do you mean to say, I should apply a PI controller to both Id and Iq and move the currents to a reference value, while storing the actual current and speed.

10. May 3, 2015

### Hesch

You have to write a program for a processor in a dedicated PCB, or you can write it for a PC with som dedicated boards. If you do the programming structured with some functions, routines, procedures, whatever they are called, you can reuse them in your final application. For example you can make a procedure:

Procedure inverter( currentamplitude: integer, frequency: integer ); ( Pascal-like )

Before you can call this procedure you must let the processor calculate the amplitude and frequency used, to achieve some torque in the motor at a given speed. The torque-characteritic in the motor is unlinear and unknown, so you have to measure it.

Your motor has two polepairs, so at 60Hz it can run 900 RPM (synchronous speed). I will suggest that you set frequency = 60Hz in the procedure while measuring.

Then you have a torqueinput register, and you set it to a value (1000?) as you want to measure with a torque that can just match the physical torque by which the motor is loaded.

Also you have a speedregister, and while measuring you let the processor step this register from 0 to say 885 RPM in 59 steps ( incrementing the speedregister by 15 RPM per step).

The linearizing table that you want the processor to fill during measurement, you just initiate with zeros.

So now you are ready for measurement, and you press the button "start".

The processor will set the speedregister=15. As the motor is not turning (table contains a zero) the processor will increase the table value until the motor reaches 15 RPM, which can be measured by your encoder. Maybe (or rather for sure) the motorspeed will overshoot, and the processor will decrease the table value some. ( Maybe you should implement some primitive PD-controller here to stabilize the motorspeed at 15 RPM ). When the motorspeed is stable at 15 RPM, the processor must copy the found tablevalue at 15RPM to the tablevalue at 30RPM (not starting in the next steptuning with a: Where am I?). Then the processor steps up the speedregister to 30RPM, finds the table value here, and so on until the table at 885RPM has been found.

During the measurements the value of a torqueoutput is calculated as: torqueoutput = torqueinput * tablevalue. This torqueoutput is transferred to currentamplitude in the inverter procedure. So if the motor during measurement is running too slow, the physical motorcurrent will be increased.

I think that the measurements can be done within 59 steps * 10s = 10 min.

Having filled the speed/current table, you can easy convert it to a slip/current table, that can be used in your final application: A PID-controller calculates the needed torque. Make a procedure that finds the lowest current that can be found as a slip/current-combination, that matches the needed torque in the table. Transfer the combination to the inverter procedure (inverterfrequency = slipfrequency+synchronous frequency). The motor will run, cold as ice.

The motors torque-characteristic will be symmetric around the point (no slip, no torque) so when you want to break the motor, your slip/current-table can be used to do this as well.

Advice: When making the controlprogram, use (scaled) integer variables ( not real ). This avoids slow calculations and rounding errors.

Last edited: May 3, 2015