]> Creatis software - CreaPhase.git/blobdiff - octave_packages/control-2.3.52/BMWengine.m
Add a useful package (from Source forge) for octave
[CreaPhase.git] / octave_packages / control-2.3.52 / BMWengine.m
diff --git a/octave_packages/control-2.3.52/BMWengine.m b/octave_packages/control-2.3.52/BMWengine.m
new file mode 100644 (file)
index 0000000..0972283
--- /dev/null
@@ -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 <lukas.reichlin@gmail.com>
+## 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