File: BMWengine.m

package info (click to toggle)
octave-control 2.3.52-1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 4,680 kB
  • sloc: cpp: 5,104; objc: 91; makefile: 52
file content (122 lines) | stat: -rw-r--r-- 3,537 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
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