From b6df12840e9c41b7fa66f30f0da5218b1c2079b2 Mon Sep 17 00:00:00 2001 From: Oskar Weigl Date: Wed, 1 Jun 2016 00:27:13 +0200 Subject: [PATCH] split into seperate repositories --- motor_analysis/350kvTP.PNG | Bin 0 -> 13423 bytes motor_analysis/350kvVelli.PNG | Bin 0 -> 36181 bytes motor_analysis/VelliPlot.m | 98 ++++++++++++++++++++++++++ numeric_path_opt/Main.m | 43 +++++++++++ numeric_path_opt/predictionmatrices.m | 14 ++++ various/path.c | 47 ++++++++++++ 6 files changed, 202 insertions(+) create mode 100644 motor_analysis/350kvTP.PNG create mode 100644 motor_analysis/350kvVelli.PNG create mode 100644 motor_analysis/VelliPlot.m create mode 100644 numeric_path_opt/Main.m create mode 100644 numeric_path_opt/predictionmatrices.m create mode 100644 various/path.c diff --git a/motor_analysis/350kvTP.PNG b/motor_analysis/350kvTP.PNG new file mode 100644 index 0000000000000000000000000000000000000000..c0b987d9f2912c78eab764d655c8f9bf77560c80 GIT binary patch literal 13423 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 Rek24tW^w9p(INM%{{xg;ha3O^ literal 0 HcmV?d00001 diff --git a/motor_analysis/350kvVelli.PNG b/motor_analysis/350kvVelli.PNG new file mode 100644 index 0000000000000000000000000000000000000000..86b63c357251019ad3d390a6f36ee34a8251d16b GIT binary patch literal 36181 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 SI-U#sXMD`epy0^W;Qt4_HsI3$ literal 0 HcmV?d00001 diff --git a/motor_analysis/VelliPlot.m b/motor_analysis/VelliPlot.m new file mode 100644 index 00000000..9d3b69c2 --- /dev/null +++ b/motor_analysis/VelliPlot.m @@ -0,0 +1,98 @@ +% limits +Imax = 64; %A +Umax = 22; %V +Irange = 100; %A. Range for plotting current +omegaMax = 2000; %rad/s mechanical. For plotting voltage ellipses +omegastep = 200; %rad/s mechanical. For plotting voltage ellipses + + +%% +%350 kv motor +lambda = 2.24/1000; +L = 23e-6; +R = 32e-3; +pp = 7; Poles = pp*2; +Ld = L; +Lq = L; + +% %% +% % Donkey +% kv = 820; +% lambda = 60/(kv*2*pi*pp*sqrt(3)); +% L = 8e-6; %Guess! TODO: measure +% R = 30e-3; %Guess! TODO: measure +% pp = 7; Poles = pp*2; +% Ld = L; +% Lq = L; + +%% +Istep = Irange/400; +Idplt = repmat(-Irange:Istep:Irange,801,1); +Iqplt = repmat((-Irange:Istep:Irange)',1,801); +UmaxSq = (Umax/sqrt(3))^2; + +t = linspace(0,2*pi); +IdMaxt = Imax*cos(t); +IqMaxt = Imax*sin(t); + +%% +figure(1) +plot(IdMaxt, IqMaxt); + +hold on; + +%Plot torque +%[c,h] = contour(Idplt,Iqplt, (Poles/2).*(3/2).*(lambda.*Iqplt + (Ld-Lq).*Iqplt.*Idplt), -5:0.25:5); +%clabel(c,h,'LabelSpacing',500); + +%Plot voltage ellipses +EllRHS = Ld^2.*(lambda/Ld + Idplt).^2 + Lq^2.*Iqplt.^2; +omegaAtEllipse = sqrt(UmaxSq./EllRHS); +[c,h] = contour(Idplt,Iqplt, omegaAtEllipse./(Poles/2), 0:omegastep:omegaMax); +clabel(c,h,'LabelSpacing',500); +xlabel 'Id (A)' +ylabel 'Iq (A)' +colormap(jet) +c = colorbar; +%c.Label.String = 'Speed (rad/s)'; +ylabel(c,'Speed (mechanical rad/s)') +grid on +axis equal + +%plot infinite speed point +plot(-lambda/Ld, 0, 'r*'); + +hold off; + +%% +figure(2) + +%fw range +t = linspace(pi/2,pi); +IdMaxt = Imax*cos(t); +IqMaxt = Imax*sin(t); +Tmaxt = (Poles/2).*(3/2).*(lambda.*IqMaxt + (Ld-Lq).*IqMaxt.*IdMaxt); +EllRHSmaxt = Ld^2.*(lambda/Ld + IdMaxt).^2 + Lq^2.*IqMaxt.^2; +omegamaxt = sqrt(UmaxSq./EllRHSmaxt); + +%MTPA range +MTPAmaxtId = 0; %TODO make work for salient machines +MTPAmaxtIq = Imax; +TmaxtMTPA = (Poles/2).*(3/2).*(lambda.*MTPAmaxtIq + (Ld-Lq).*MTPAmaxtIq.*MTPAmaxtId); +Tmaxt = [repmat(TmaxtMTPA, 1, 100) Tmaxt]; +omegamaxt = [linspace(0,omegamaxt(1)) omegamaxt]; + +%Present mechanical speed +omegamaxt = omegamaxt./(Poles/2); + +Pmaxt = Tmaxt.*omegamaxt; + +%plotyy(t, Tmaxt, t, omegamaxt); +%plotyy(t, Tmaxt, t, Pmaxt); +%plotyy(t, Pmaxt, t, omegamaxt); + +h = plotyy(omegamaxt, Tmaxt, omegamaxt, Pmaxt); +grid on +xlabel 'Speed (mechanical rad/s)' +ylabel 'Torque (Nm)' +ylabel(h(2), 'Power (W)'); \ No newline at end of file diff --git a/numeric_path_opt/Main.m b/numeric_path_opt/Main.m new file mode 100644 index 00000000..d41c1dfd --- /dev/null +++ b/numeric_path_opt/Main.m @@ -0,0 +1,43 @@ +%Params +AccelPerA = 3000; +phaseR = 0.033; +Ts = 0.001; +N = 50; +thetaFinal = 200; +x0 = [0;0]; + +%system definition +%X = [theta; omega] +Ac = [0 1; + 0 0]; +Bc = [0; + AccelPerA]; +C = 0; +D = 0; + +SYSC = ss(Ac, Bc, [], []); +SYSD = c2d(SYSC, Ts, 'zoh'); +[Phi, Gamma] = predictionmatrices(SYSD.a, SYSD.b, SYSD.c, N); + +Df = Gamma(end-1:end,:); +ff = [thetaFinal; 0]; + +H = 2*eye(N)*(3/2)*phaseR*Ts; +[u, fval] = quadprog(H,[],[],[],Df,ff); + +xv = reshape(Gamma*u, 2,N)'; +x = xv(:,1); +v = xv(:,2); + +kv350_lambda = 2.2e-3; +power = u.*v.*(3/2)*kv350_lambda; + +Vbus = 24; +Ib = power/Vbus; +Im = u; +duty = Ib./Im; +CapIsqr = (duty.*(Ib-Im)).^2 + ((1-duty).*Ib).^2; +CapIrms = sqrt(sum(CapIsqr)/N); +CapR = 0.08; +Ncaps = 8; +Cappow = (CapIrms/Ncaps)^2 * CapR diff --git a/numeric_path_opt/predictionmatrices.m b/numeric_path_opt/predictionmatrices.m new file mode 100644 index 00000000..929f7464 --- /dev/null +++ b/numeric_path_opt/predictionmatrices.m @@ -0,0 +1,14 @@ +function [Phi, Gamma, Lambda] = predictionmatrices(A, B, C, N) +%UNTITLED2 Summary of this function goes here +% Detailed explanation goes here + +n = size(A,1); +Atilde = [A; zeros((N-1)*n, n)]; +k = [zeros(n, N*n); -kron(eye(N-1), A) zeros((N-1)*n,n)] + eye(N*n); + +Phi = k\Atilde; +Gamma = k\kron(eye(N), B); +Lambda = kron(eye(N), C); + +end + diff --git a/various/path.c b/various/path.c new file mode 100644 index 00000000..341e5c4b --- /dev/null +++ b/various/path.c @@ -0,0 +1,47 @@ +#include + +#include + +void output(float x, float y, float str, float param) { + printf("{ %05.1ff, %05.1ff, %1.1ff, %06.1ff },\n", (x+1)*75, (y+1)*75, str, param); +} + +void searchat(float x, float y) { + output(x, y, 0.4, 500); + //output(x+0.02, y, 0.4, 1000); + //output(x, y+0.02, 0.4, 1000); + //output(x-0.02, y, 0.4, 1000); + //output(x, y-0.02, 0.4, 1000); +} + +void pickupto(float x, float y) { + output(x, y, 0.4, 0); + //output(x, y, 0.4, 1000); + output(x, y, 0, 1000); +} + +void moveto(float x, float y) { + output(x, y, 0, 0); +} + +#define POINTS 15 +#define TWOPI (3.1415*2.0) + +int main(int argc, char** argv) { + moveto(-1,-1); + + for (int j=0; j<2; j++) + for (int i=0; i