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
|
.PS
# control.m4
#.PS 5i
cct_init(svg_font(sans-serif,11bp__))
linewid = linewid*0.8
circlerad = 0.35/2
bw = boxwid/2
bh = boxht/2
PID: [
{"svg_it(r(s))" above ljust}
arrow
S1: circle
line right "svg_it(e(s))" above
{ arrow right ; box ht bh wid bw "svg_it(K`'svg_sub(p))"
arrow right linewid-circlerad ; S2: circle }
{ line up linewid ; arrow right ; box ht bh wid bw "svg_it(K`'svg_sub(D) s)"
line to (S2,Here) ; arrow to S2.n }
{ line down linewid ; arrow right
box ht bh wid bw "svg_it(K`'svg_sub(I) /s)"
line to (S2,Here) ; arrow to S2.s }
arrow right from S2.e "svg_it(u(s))" above
box "svg_it(G(s))"
arrow right ; "svg_it(y(s))" above rjust at Here+(0,2pt__)
line down boxht*3/2 from last arrow.c then left last arrow.c.x-S1.x
arrow to S1.s
"-" below rjust
]
"(a) PID control" below ljust at PID.sw+(0,-5pt__)
Obs: [ {"svg_it(r)" above ljust}
arrow
S: circle
"-" below rjust at S.s
arrow <- down linewid/2 from S.s
box ht bh wid bw "svg_it(K)"
arrow <- down linewid/2
line right linewid "svg_it(z)" above
Obs:box wid linewid*5.5 ht boxht*5/4 "svg_it(dz/dt = (A - LC) z + B u + L y)"
"Observer" above ljust at Obs.sw
arrow <- right linewid/2 from 3/4<Obs.se,Obs.ne>
line to (Here,S)
{"svg_it(u)" above at Here+(linewid/2,0)}
arrow from S.e to Here+(linewid,0)
Plant: box wid boxwid*1.7 ht boxht*5/4 \
"svg_it(dx/dt = Ax + Bu)" "svg_it(y = Cx)"
"Plant" above ljust at Plant.sw
arrow right from Plant.e
"svg_it(y)" above rjust at Here+(0,2pt__)
move to last arrow.c
line to (Here, 1/4<Obs.se,Obs.ne>)
arrow to (Obs.e,Here)
] with .nw at PID.sw+(0,-0.5)
"(b) Output feedback with a full-order observer" below ljust \
at Obs.sw+(0,-5pt__)
NL: [boxwid = boxwid*1.8
boxht = boxht*3/2
thicklines_
scale = scale*0.8
circlerad = 0.3/2
R: box wid boxwid*5/4 "reference" "svg_it(R)"
arrow right linewid*4/3 "svg_it(y`'svg_sub(c ref))" above
Gh: box wid boxwid*5/4 "\"inverse\"" "of svg_it(G)"
arrow from Gh.s down "svg_it(y`'svg_sub(m ref))" ljust
E: circle
arrow from E.e right "svg_it(e)" above
box wid boxwid*5/4 "stabilizer" "svg_it(K)"
arrow "svg_it(du)" above
D: circle
line from Gh.e to (D,Gh.e) "svg_it(u`'svg_sub(ref))" above
arrow to D.n
arrow from D.e right "svg_it(u)" above
G: box "plant" "svg_it(G)"
arrow <- from G.n up boxht/2
"disturbance svg_it(z)" above
arrow right from G.e + (0,boxht/4)
"svg_it(y`'svg_sub(c))" ljust
arrow right from G.e + (0,-boxht/4)
"svg_it(y`'svg_sub(m))" ljust
move to last arrow.c
arrow down Here.y-G.s.y+boxht*2/3 then left Here.x-E.x then to E.s
"svg_it(-)" at Here + (-0.15,-0.1)
arrow <- down from R.s
"svg_it(W) control input" at Here - (0,0.1)
UL:R.nw +(-boxht/2,boxht/2)
UR:(D.e,UL) + (0.1,0)
line dashed from UL to UR then to (UR,G.s+(0,-boxht*3/2))
line dashed to (Gh.w,Here) "Controller" above
line dashed to (Here,Gh.s+(0,-boxht/2))
line dashed to (UL,Here) then to UL
] with .nw at Obs.sw + (0,-0.5)
"(c) Nonlinear feedforward (for performance) and small-signal feedback
(for stability)" wid Obs.wid+0.4 below ljust at NL.sw+(0,-5pt__)
command "</g>" # end font
.PE
|