X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=CreaPhase.git;a=blobdiff_plain;f=octave_packages%2Fcontrol-2.3.52%2FBMWengine.m;fp=octave_packages%2Fcontrol-2.3.52%2FBMWengine.m;h=097228354c96a80b8575bec6669d9d2321a4fb0d;hp=0000000000000000000000000000000000000000;hb=c880e8788dfc484bf23ce13fa2787f2c6bca4863;hpb=1705066eceaaea976f010f669ce8e972f3734b05 diff --git a/octave_packages/control-2.3.52/BMWengine.m b/octave_packages/control-2.3.52/BMWengine.m new file mode 100644 index 0000000..0972283 --- /dev/null +++ b/octave_packages/control-2.3.52/BMWengine.m @@ -0,0 +1,122 @@ +## -*- texinfo -*- +## @deftypefn{Function File} {@var{sys} =} BMWengine () +## @deftypefnx{Function File} {@var{sys} =} BMWengine (@var{"scaled"}) +## @deftypefnx{Function File} {@var{sys} =} BMWengine (@var{"unscaled"}) +## Model of the BMW 4-cylinder engine at ETH Zurich's control laboratory. +## @example +## @group +## OPERATING POINT +## Drosselklappenstellung alpha_DK = 10.3 Grad +## Saugrohrdruck p_s = 0.48 bar +## Motordrehzahl n = 860 U/min +## Lambda-Messwert lambda = 1.000 +## Relativer Wandfilminhalt nu = 1 +## @end group +## @end example +## @example +## @group +## INPUTS +## U_1 Sollsignal Drosselklappenstellung [Grad] +## U_2 Relative Einspritzmenge [-] +## U_3 Zuendzeitpunkt [Grad KW] +## M_L Lastdrehmoment [Nm] +## @end group +## @end example +## @example +## @group +## STATES +## X_1 Drosselklappenstellung [Grad] +## X_2 Saugrohrdruck [bar] +## X_3 Motordrehzahl [U/min] +## X_4 Messwert Lamba-Sonde [-] +## X_5 Relativer Wandfilminhalt [-] +## @end group +## @end example +## @example +## @group +## OUTPUTS +## Y_1 Motordrehzahl [U/min] +## Y_2 Messwert Lambda-Sonde [-] +## @end group +## @end example +## @example +## @group +## SCALING +## U_1N, X_1N 1 Grad +## U_2N, X_4N, X_5N, Y_2N 0.05 +## U_3N 1.6 Grad KW +## X_2N 0.05 bar +## X_3N, Y_1N 200 U/min +## @end group +## @end example +## @end deftypefn + +## Author: Lukas Reichlin +## Created: January 2010 +## Version: 0.1.1 + +## TODO: translate German terminology + +function sys = BMWengine (flg = "scaled") + + if (nargin > 1) + print_usage (); + endif + + switch (tolower (flg)) + case "unscaled" ## Linearisiertes Modell, nicht skaliert + + Apu = [ -40.0000 0 0 0 0 + 0.1683 -2.9471 -0.0016 0 0 + 26.6088 920.3932 -0.1756 0 259.1700 + -0.5852 14.1941 0.0061 -5.7000 -5.7000 + 0.6600 -1.1732 -0.0052 0 -15.0000 ]; + + Bpu = [ 40.0000 0 0 + 0 0 0 + 0 181.4190 1.5646 + 0 -3.9900 0 + 0 4.5000 0 ]; + + Bdpu = [ 0 + 0 + -15.9000 + 0 + 0 ]; + + Cpu = [ 0 0 1 0 0 + 0 0 0 1 0 ]; + + sys = ss (Apu, [Bpu, Bdpu], Cpu); + + case "scaled" ## Skaliertes Zustandsraummodell + + Ap = [ -40.0000 0 0 0 0 + 3.3659 -2.9471 -6.5157 0 0 + 0.1330 0.2301 -0.1756 0 0.0648 + -11.7043 14.1941 24.3930 -5.7000 -5.7000 + 13.2003 -1.1732 -20.9844 0 -15.0000 ]; + + Bp = [ 40.0000 0 0 + 0 0 0 + 0 0.0454 0.0125 + 0 -3.9900 0 + 0 4.5000 0 ]; + + Bdp = [ 0 + 0 + -1.5900 + 0 + 0 ]; + + Cp = [ 0 0 1 0 0 + 0 0 0 1 0 ]; + + sys = ss (Ap, [Bp, Bdp], Cp, [], "scaled", true); + + otherwise + print_usage (); + + endswitch + +endfunction