# Induction Motor Modeling (for Lab Prep Session)¶

From your book, the circuit model of one phase of a balanced Y connected induction motor is:

The slip, $s = (n_s - n)/n_s$ where $n_s$ is the synchronous speed, and $n$ is the actual speed. So if the rotor was going at synchronous speed, the slip would be zero, and when the rotor is blocked the slip is one. The resistor $R_2(1-s)/s$ is where the mechanical work is accomplished. $R_2$ is the rotor resistance referred to back to the stator. The winding resistance of the stator is $R_1$. The reactance due to the leakage inductance in the stator is $X_1$. The reactance due to leakage inductance in the rotor referred to the stator is $X_2$, and the reactance due to magnetizing inductance and resistance due to core losses are $X_m$ and $R_c$ respectively.

In Lab 8, we will first warm up the motors. Then we will do a load test, and lastly, we will measure the DC resistances of the stator. After the lab, we have provided a script that allows you to show how well the load test data matches your selection of the above parameters. You will need to follow the instructions in the lab sheet to get the best values you can. Here is an example of the East Induction Motor.

In [8]:

    % East Induction Motor (High Efficiency)
    % Carlton Cross  25 Feb 10   Updated 4 May 2021
    %  E2016  XRI  HVK213TTFW6026BP L
    %  7.5 HP, 5.6 kW, 1765 rpm, 208-230 Vrms,  pf = 0.8
    %  IEC 34-1  IEC 34-5  IP 43
    % DC resistance test  25 Feb 10  cec
    %   5.0 A  1.95 V  line-to-line

    clear;  close all; DataID = ['East Machine (Logan, Rivas, Carrigan)'];

    R1 = (0.5*1.95/5.0);
    f = 60; np = 4; Nph = 3; rpm = 1765;
    Prated = 7.5*745.7; wmrated = rpm*2*pi/60;      % W
    taurated = Prated/wmrated;
    mass = 7.65;		% kg    calibration mass
    d = 0.260;			% m     moment arm
    g = 9.81;			% m/s^2 acceleration of gravity
    Vcal = -2.08;		% V     load cell voltage
    Tscale = -mass*g*d/Vcal;	% Nm/V  torque scale factor

    data = [
    % Vl-ln, V  I, A   P, kW  Q, kVAR  Nm, rpm  Vcell, V
        144.8   8.8     0       3.5     1800   -0.178       % Unexplained offset
        145     8.9     0.5     3.5     1798    0.0911
        141     9.2     1.1     3.5     1795    0.442
        141     9.7     1.6     3.6     1791    0.676
        144     10.6    2.2     3.6     1790    1.025
        144     11.5    2.7     3.7     1788    1.296
        146     12.8    3.3     3.8     1786    1.615
        150     13.2    3.8     3.9     1784    1.892
        144     15.0    4.4     4.1     1781    2.192
        150     16.4    4.9     4.3     1778    2.505
        141     17.7    5.5     4.4     1776    2.764
        146     19.4    6.1     4.7     1772    3.106];

    Vphase = mean(data(:,1));               % Vrms
    Iline = data(:,2);                      % Arms
    P = 1000*data(:,3);                     % W
    Q = 1000*data(:,4);                     % VAR
    Nm = data(:,5);                         % rpm
    tau = Tscale*(data(:,6)-data(1,6));     % Nm    (with offset correction)

    % Model Parameters
    Pcore = P(2) - 3*R1*Iline(2)^2;     % Idle power less resistive losses
    Rc = 5*(Vphase^2)/(Pcore/Nph);      % per phase
    R2 = 0.71*R1;                       % Adjusted for best power-torque fit
    Xm = 0.95*(Vphase^2)/(Q(1)/Nph);    % Most significant at low power
    Qdiff = Q(end) - Q(1);              % Increase from rotor inductance
    X1X2 = (Qdiff/Nph)/Iline(end)^2;    % X1X2 is really X1+X2
    X1 = 0.7*X1X2;                      % Adjusted for best pf fit
    X2 = 1.21*X1X2;                     % Adjusted for high-load reactive power

    % Performance from data
    Ns = 120*f/np; wm = 2*pi*Nm/60; s = (Ns - Nm)/Ns;
    Pout = wm.*tau; eta = 100*Pout./P; pf = cos(atan(Q./P));

    % Peformance from model
    npts = 200; smin = 1/1800; smax = (Ns - 1)/Ns;
    smodel = linspace(smin,smax,npts)';
    ws = 2*pi*Ns/60; wshaft = (1-smodel)*ws; Nshaft = wshaft*30/pi;
    z1 = R1+j*X1; y1 = 1/z1; z2 = R2./smodel + j*X2; y2 = (1./z2);
    yc = 1/Rc + 1/(j*Xm);
    Ea = Vphase*y1./(y1 + yc + y2); Ia = y2.*Ea;
    Pomodel = 3*R2*(abs(Ia).^2).*(1-smodel)./smodel;
    taumodel = Pomodel./wshaft;
    ze = z1 + R2 + j*X2;                % Approximate impedance at under load
    sp = R2/(R2 + abs(ze));             % Slip at max power
    sb = R2/(sqrt(R1^2 + (X1+X2)^2));   % Slip at max torque

    figure(1); hold on;
    plot(Nshaft,taumodel, Nm,tau,'xr', 'linewidth',1.5)
    axs = axis;
    plot([(1-sb) (1-sb)]*Ns, axs(3:4),':r','linewidth',1.5)
    plot([(1-sp) (1-sp)]*Ns, axs(3:4),'--c','linewidth',1.5)
    plot(axs(1:2), [taurated taurated],':k');
    hold off
    title('\fontsize{14}Induction Motor Load Characteristic')
    ylabel('Torque, Nm'); xlabel('Mechanical Speed, rpm');
    legend('Model','Test Data','Max Torque','Max Power','location','north')
    grid
    text(400,50, DataID, 'backgroundcolor','white')
    text(200,1.05*taurated,['Rated Torque'])
    fmt1 = 'R_1 = %5.3f  X_1 = %5.3f';  S1 = sprintf(fmt1,R1,X1);
    fmt2 = 'R_2 = %5.3f  X_2 = %5.3f';  S2 = sprintf(fmt2,R2,X2);
    fmt3 = 'R_c = %5.0f   X_m = %5.1f'; S3 = sprintf(fmt3,Rc,Xm);
    text(400,40,{S1 S2 S3},'BackgroundColor','white')
    % Place a caption under the graph box
    AxesPos = get(gca,'Position');
    CapStr = ['From file ...\\' mfilename '.m  plotted ' date '.  Carlton Cross'];
    annotation('textbox',[AxesPos(1) 0 .99 .04],'string',CapStr,...
        'FitBoxToText','on', 'LineStyle','none', 'BackgroundColor','white');

    % % Peformance from model (over data segment)
    npts = 200; smin = 0; smax = (Ns - Nm(end))/Ns;
    smodel = linspace(smin,smax,npts)';
    ws = 2*pi*Ns/60; wshaft = (1-smodel)*ws; Nshaft = wshaft*30/pi;
    z1 = R1+j*X1; z2 = R2./smodel + j*X2;
    Ea = Vphase./((1/z1 + 1/Rc + 1/(j*Xm) + 1./z2)*z1);
    Ia = Ea./z2; Ic = Ea*(1/Rc + 1/(j*Xm)); I1 = Ia + Ic;
    Smodel = 3*Vphase*conj(I1);
    Pinmodel = real(Smodel);
    Qinmodel = imag(Smodel);
    pfmodel = cos(angle(Smodel));
    Pomodel = 3*R2*(abs(Ia).^2).*(1-smodel)./smodel;
    taumodel = Pomodel./wshaft;
    Effmodel = 100*Pomodel./Pinmodel;

In [9]:

    figure(2); hold on;
    plot(Nshaft,taumodel, Nm,tau,'xr', 'linewidth',1.5); axs = axis;
    plot([axs(1) axs(2)], [taurated taurated],':k');
    title('\fontsize{14}Induction Motor Load Characteristic')
    ylabel('Torque, Nm'); xlabel('Mechanical Speed, rpm')
    legend('Model','Test Data', 'location','north'); grid
    text(1775,1.02*taurated,['Rated Torque'])
    text(1773,20, DataID, 'backgroundcolor','white')
    text(1773,12,{S1 S2 S3},'BackgroundColor','white')
    % Place a caption under the graph box
    AxesPos = get(gca,'Position');
    CapStr = ['From file ...\\' mfilename '.m  plotted ' date '.  Carlton Cross'];
    annotation('textbox',[AxesPos(1) 0 .99 .04],'string',CapStr,...
        'FitBoxToText','on', 'LineStyle','none', 'BackgroundColor','white');

In [10]:

    figure(3)
    plot(Pinmodel,Qinmodel, P,Q,'--x')
    axs = axis; axs = [axs(1:2) 0 axs(4)]; axis(axs); grid;
    title('\fontsize{14}Induction Motor Load Characteristic')
    ylabel('Reactive Power, VAR'); xlabel('Average Power, W')
    legend('Model','Test Data', 'location','north')
    text(1200,3000, DataID, 'backgroundcolor','white')
    text(1200,2000,{S1 S2 S3},'BackgroundColor','white')
    % Place a caption under the graph box
    AxesPos = get(gca,'Position');
    CapStr = ['From file ...\\' mfilename '.m  plotted ' date '.  Carlton Cross'];
    annotation('textbox',[AxesPos(1) 0 .99 .04],'string',CapStr,...
        'FitBoxToText','on', 'LineStyle','none', 'BackgroundColor','white');

In [12]:

    figure(4)
    plot(Nshaft,pfmodel, Nm,pf,'--x', 'linewidth',1.5)
    title('\fontsize{14}Induction Motor Load Characteristic')
    ylabel('Power Factor'); xlabel('Mechanical Speed, rpm')
    legend('Model','Test Data', 'location','north'); grid;
    text(1773,0.65, DataID, 'backgroundcolor','white')
    text(1773,0.5,{S1 S2 S3},'BackgroundColor','white')
    % Place a caption under the graph box
    AxesPos = get(gca,'Position');
    CapStr = ['From file ...\\' mfilename '.m  plotted ' date '.  Carlton Cross'];
    annotation('textbox',[AxesPos(1) 0 .99 .04],'string',CapStr,...
        'FitBoxToText','on', 'LineStyle','none', 'BackgroundColor','white');

In [13]:

    figure(5)
    plot(Pinmodel,Effmodel, P,eta,'--x'); grid;
    title('\fontsize{14}Induction Motor Load Characteristic')
    ylabel('Efficiency, per cent'); xlabel('Average Power, W')
    legend('Model','Test Data', 'location','East')
    text(1800,80, DataID, 'backgroundcolor','white')
    text(1800,60,{S1 S2 S3},'BackgroundColor','white')
    % Place a caption under the graph box
    AxesPos = get(gca,'Position');
    CapStr = ['From file ...\\' mfilename '.m  plotted ' date '.  Carlton Cross'];
    annotation('textbox',[AxesPos(1) 0 .99 .04],'string',CapStr,...
        'FitBoxToText','on', 'LineStyle','none', 'BackgroundColor','white');

In [14]:

    figure(6)
    plot(Nshaft,Effmodel, Nm,eta,'--x')
    title('\fontsize{14}Induction Motor Load Characteristic')
    ylabel('Efficiency, per cent'); xlabel('Mechanical Speed, rpm')
    legend('Model','Test Data', 'location','West'); grid;
    text(1773,80, DataID, 'backgroundcolor','white')
    text(1773,60,{S1 S2 S3},'BackgroundColor','white')
    % Place a caption under the graph box
    AxesPos = get(gca,'Position');
    CapStr = ['From file ...\\' mfilename '.m  plotted ' date '.  Carlton Cross'];
    annotation('textbox',[AxesPos(1) 0 .99 .04],'string',CapStr,...
        'FitBoxToText','on', 'LineStyle','none', 'BackgroundColor','white');

In [ ]: