Power Buoy Generator Efficiency

P. McGill, v1.4.0

We want to plot generator output efficiency as a function of input speed n (in rpm) and torque m (in N-m), given

	 Ke - speed constant in V/rpm
	 Kt - torque constant in N-m/A
	 Rg - winding resistance in Ω
	 Lg - winding inductance in H
	 Mf - friction torque in N-m

The generator windings must be modeled as a complex impedance because although only the resistance will dissipate power, the inductance will act as a choke in series with the output and will also limit current.

Note that for an eight-pole motor, the electrical frequency is four times the rotational rate. We must also convert the speed n in rpm into radians per second.

Clear[n,m,Rg,Lg,Zg,Ig,Rl]

Zg=Rg+I 4 n((2 π)/60) Lg;

The generator current Vg and voltage Ig can be found from the generator constants.

Vg=Ke n;

Ig=((m-Mf)/Kt);

The load impedance (modeled here as purely resistive) is the total circuit impedance minus that of the generator.

Rl=(Vg/Ig)-Zg;

We can calculate the generator efficiency as the electrical power delivered to the load divided by the mechanical power input. The numerator is the current squared times the load resistance, and the denominator is torque times speed.

η[n_,m_,Ke_,Kt_,Rg_,Lg_,Mf_]:=((100 (((((m-Mf)/Kt)))^2)(((Ke n Kt)/(m-Mf))-Abs[Rg+I 4 n ((2 π)/60) Lg]))/(n ((2 π)/60) m))

Let’s define the constants for a Magmotor model BFA42-600 motor with a “5K” winding.

First convert the torque constant, friction torque, and stall torque from oz-in to N-m.

Kt5k=118.5*7.0615 (10^(-3))

Mf5k=60*7.0615 (10^(-3))

Ms5k=1600*7.0615 (10^(-3))

Next convert the voltage constant from V/krpm to V/rpm.

Ke5k=87.6/1000

And lastly define the winding resistance and inductance.

Rg5k=0.88

Lg5k=3.6 (10^(-3))

Now we can produce a 3D plot of efficiency for a Magmotor model BFA42-600 motor with a “5K” winding over its range of allowed speed and torque.

effpl5k=Plot3D[η[n,m,Ke5k,Kt5k,Rg5k,Lg5k,Mf5k],{n,0,6000},{m,0,15},{
PlotLabel->"Efficiency vs. Speed and Torque",
AxesLabel->{"Speed (rpm)","Torque (N-m)","η (%)"}}]

We’d like to know what torque produces maximum efficiency at each speed. We can define a function that finds the peak efficiencies, and then formats the results into triplets of speed, torque, and efficiency.

findPeaks3D[Ke_,Kt_,Rg_,Lg_,Mf_]:=Module[{m,p1,p2,p3,p4,p5},
p1=Map[Maximize[{η[#,m,Ke,Kt,Rg,Lg,Mf],1.5<m<15},m]&,Range[100,6100,100]];
p2=Transpose[p1];
p3=Riffle[Range[100,6100,100],m/.Transpose[p1][[2]]];
p4=Riffle[p3,p2[[1]],3];
Return[Partition[p4,3]];
]

peaks5k=findPeaks3D[Ke5k,Kt5k,Rg5k,Lg5k,Mf5k];

peaks5k[[1]]

peakpl5k=ListPointPlot3D[peaks5k,{PlotStyle->Red}]

peakpl5k2=Graphics3D[{Red,Thick,Line[peaks5k]}];

Show[effpl5k,peakpl5k2]

This is good for getting the big picture, but not for reading precise values. We can generate a 2D plot of the peak efficiency curve overlaid on a contour plot.

findPeaks2D[Ke_,Kt_,Rg_,Lg_,Mf_]:=Module[{m,p1,p2,p3},
p1=Map[Maximize[{η[#,m,Ke,Kt,Rg,Lg,Mf],1.1<m<15},m]&,Range[100,6100,100]];
p2=Transpose[p1];
p3=Riffle[Range[100,6100,100],m/.Transpose[p1][[2]]];
Return[Partition[p3,2]];
]

peaks2d5k=findPeaks2D[Ke5k,Kt5k,Rg5k,Lg5k,Mf5k];

peakpl5k3=ListPlot[peaks2d5k,
{Frame->True,
Joined->True,
GridLines->Automatic,
PlotStyle->Red,
PlotLabel->"Peak Efficiency vs. Speed and Torque",
FrameLabel->{"Speed (rpm)","Torque (N-m)"}}]

We can produce a contour plot showing the efficiencies at these peaks.

conpl5k=ContourPlot[η[n,m,Ke5k,Kt5k,Rg5k,Lg5k,Mf5k],{n,0,6000},{m,0,15},
{Frame->True,
Contours->{50,60,70,75,80,82},
ContourLabels->All,
PlotLabel->"Peak Efficiency vs. Speed and Torque",
FrameLabel->{"Speed (rpm)","Torque (N-m)"}}]

Show[conpl5k,peakpl5k3]

The winding inductance appears to be limiting current (and thus torque) at higher speeds, forcing us to increase the load resistance at the expense of efficiency. Let’s run the same analysis for a different generator winding. The “5E” is a delta winding with much lower resistance and inductance.

Kt5e=29.6*7.0615 (10^(-3))

Mf5e=60*7.0615 (10^(-3))

Next convert the voltage constant from V/krpm to V/rpm.

Ke5e=21.9/1000

And lastly define the winding resistance and inductance.

Rg5e=0.15

Lg5e=0.23 (10^(-3))

Now we can produce a 3D plot of efficiency for a Magmotor model BFA42-600 motor with a “5E” winding over its range of allowed speed and torque.

effpl5e=Plot3D[η[n,m,Ke5e,Kt5e,Rg5e,Lg5e,Mf5e],{n,0,6000},{m,0,15},{
PlotLabel->"Efficiency vs. Speed and Torque",
AxesLabel->{"Speed (rpm)","Torque (N-m)","η (%)"}}]

peaks5e=findPeaks3D[Ke5e,Kt5e,Rg5e,Lg5e,Mf5e];

peakpl5e=ListPointPlot3D[peaks5e,{PlotStyle->Red}]

peakpl5e2=Graphics3D[{Red,Thick,Line[peaks5e]}];

Show[effpl5e,peakpl5e2]

This is good for getting the big picture, but not for reading precise values. We can generate a 2D plot of the peak efficiency curve overlaid on a contour plot.

peaks2d5e=findPeaks2D[Ke5e,Kt5e,Rg5e,Lg5e,Mf5e];

peakpl5e3=ListPlot[peaks2d5e,
{Frame->True,
Joined->True,
GridLines->Automatic,
PlotStyle->Red,
PlotLabel->"Peak Efficiency vs. Speed and Torque",
FrameLabel->{"Speed (rpm)","Torque (N-m)"}}]

We can produce a contour plot showing the efficiencies at these peaks.

conpl5e=ContourPlot[η[n,m,Ke5k,Kt5k,Rg5k,Lg5k,Mf5k],{n,0,6000},{m,0,15},
{Frame->True,
Contours->{50,60,70,75,80,82},
ContourLabels->All,
PlotLabel->"Peak Efficiency vs. Speed and Torque",
FrameLabel->{"Speed (rpm)","Torque (N-m)"}}]

Show[conpl5e,peakpl5e3]

We can plot both efficiency curves to compare them.

Show[peakpl5k3,peakpl5e3]

It would be good to know what load resistance is required to achieve the desired speeds and torques at maximum efficiency.

Clear[Rl]

Rl[n_,m_,Ke_,Kt_,Rg_,Lg_,Mf_]:=((Ke n Kt)/(m-Mf))-Abs[Rg+I 4 n ((2 π)/60) Lg]

loadres5k=Map[Rl[#[[1]],#[[2]],Ke5k,Kt5k,Rg5k,Lg5k,Mf5k] &,peaks2d5k];

loadres5k2=Partition[Riffle[Range[100,6000,100],loadres5k],2];

ListPlot[loadres5k2,
{Joined->True,
Frame->True,
GridLines->Automatic,
PlotLabel->"Load Resistance at Maximum Efficiency vs. Speed"},
FrameLabel->{"Speed (rpm)","Load Resistance (Ω)"}]

Rl[n_,m_,Ke_,Kt_,Rg_,Lg_,Mf_]:=Abs[((Ke n Kt)/(m-Mf))-(Rg+I 4 n ((2 π)/60) Lg)]

loadres5k=Map[Rl[#[[1]],#[[2]],Ke5k,Kt5k,Rg5k,Lg5k,Mf5k] &,peaks2d5k];

loadres5k2=Partition[Riffle[Range[100,6000,100],loadres5k],2];

ListPlot[loadres5k2,
{Joined->True,
Frame->True,
GridLines->Automatic,
PlotLabel->"Load Resistance at Maximum Efficiency vs. Speed"},
FrameLabel->{"Speed (rpm)","Load Resistance (Ω)"}]

Rg+I 4 n ((2 π)/60) Lg/.{Rg->Rg5k,n->1000,Lg->Lg5k}

Rg5k

Lg5k

Rg+I 4 n ((2 π)/60) Lg/.{Rg->Rg5e,n->1000,Lg->Lg5e}