profile pic
⌘ '
raccourcis clavier

proportional control

definition

Kpe(t)=Kp[u(t)y(t)]K_p e(t) = K_p [u(t) - y(t)]

Example: Given the closed-loop transfer function is T(s)=Gp(s)1+Gp(s)=1s+2T(s) = \frac{G_p(s)}{1+G_p(s)} = \frac{1}{s+2}

adding proportional

closed-loop transfer function is:

T(s)=KpGp1+KpGpT(s) = \frac{K_p G_p}{1 + K_p G_p}

integral control

"\\usepackage{tikz}\n\\usetikzlibrary{positioning, arrows.meta}\n\n\\begin{document}\n\\begin{tikzpicture}[auto, node distance=2cm, >=Latex, block/.style={draw, minimum width=1.5cm, minimum height=1cm}]\n\n% Nodes\n\\node[draw, circle, minimum size=0.5cm] (sum) {}; % Summing junction\n\\node[block, right=2cm of sum] (compensator) {$\\frac{K_I}{s}$};\n\\node[block, right=2.5cm of compensator] (Gp) {$\\frac{1}{s+1}$};\n\\node[below=1.5cm of compensator] (feedback) {feedback};\n\n% Labels\n\\node[above=0.1cm of compensator] {compensator};\n\\node[above=0.1cm of Gp] {$G_p(s)$};\n\n% Input and Output\n\\node[left=1cm of sum] (input) {R(s)};\n\\node[right=1cm of Gp] (output) {C(s)};\n\n% Arrows (Forward path)\n\\draw[->] (input) -- (sum.west);\n\\draw[->] (sum.east) -- (compensator.west);\n\\draw[->] (compensator.east) -- (Gp.west);\n\\draw[->] (Gp.east) -- (output);\n\n% Feedback path\n\\draw[->] (output.east) -- ++(1,0) |- (feedback) -| (sum.south);\n\n% Plus and Minus signs\n\\node at (0.2, 0.5) {$+$};\n\\node at (0.2, -0.5) {$-$};\n\n\\end{tikzpicture}\n\\end{document}"KIs1s+1feedbackcompensatorGp(s)R(s)C(s)+¡
source code

Closed loop here yields

T(s)=KIs2+s+KIT(s) = \frac{K_I}{s^2 + s + K_I}

steady state error is 0, while steady-state output is 1

PI control

proportional-integral

"\\usepackage{tikz}\n\\usetikzlibrary{positioning, arrows.meta}\n\n\\begin{document}\n\\begin{tikzpicture}[auto, node distance=2cm, >=Latex, block/.style={draw, minimum width=1.5cm, minimum height=1cm}]\n\n% Nodes\n\\node[draw, circle, minimum size=0.5cm] (sum) {}; % Summing junction\n\\node[block, right=2cm of sum] (compensator) {$G_c = \\frac{K_I}{s} + K_p$};\n\\node[block, right=2.5cm of compensator] (Gp) {$\\frac{1}{s+1}$};\n\\node[below=1.5cm of compensator] (feedback) {feedback};\n\n% Labels\n\\node[above=0.1cm of compensator] {compensator};\n\\node[above=0.1cm of Gp] {$G_p(s)$};\n\n% Input and Output\n\\node[left=1cm of sum] (input) {R(s)};\n\\node[right=1cm of Gp] (output) {C(s)};\n\n% Arrows (Forward path)\n\\draw[->] (input) -- (sum.west);\n\\draw[->] (sum.east) -- (compensator.west);\n\\draw[->] (compensator.east) -- (Gp.west);\n\\draw[->] (Gp.east) -- (output);\n\n% Feedback path\n\\draw[->] (output.east) -- ++(1,0) |- (feedback) -| (sum.south);\n\n% Plus and Minus signs\n\\node at (0.2, 0.5) {$+$};\n\\node at (0.2, -0.5) {$-$};\n\n\\end{tikzpicture}\n\\end{document}"Gc=KIs+Kp1s+1feedbackcompensatorGp(s)R(s)C(s)+¡
source code

Closed-loop transfer function

T(s)=KI+sKps2+(1+Kp)s+KIT(s) = \frac{K_I + sK_p}{s^{2} + (1+K_p)s + K_I}
  • PC: impact on speed of response
  • IC: force steady-state error to 0

derivative control

"\\usepackage{tikz}\n\\usetikzlibrary{positioning, arrows.meta}\n\n\\begin{document}\n\\begin{tikzpicture}[auto, node distance=2cm, >=Latex, block/.style={draw, minimum width=1.5cm, minimum height=1cm}]\n\n% Nodes\n\\node[draw, circle, minimum size=0.5cm] (sum) {}; % Summing junction\n\\node[block, right=2cm of sum] (compensator) {$G_c = K_D s$};\n\\node[block, right=2.5cm of compensator] (Gp) {$\\frac{1}{s+1}$};\n\\node[below=1.5cm of compensator] (feedback) {feedback};\n\n% Labels\n\\node[above=0.1cm of compensator] {compensator};\n\\node[above=0.1cm of Gp] {$G_p(s)$};\n\n% Input and Output\n\\node[left=1cm of sum] (input) {R(s)};\n\\node[right=1cm of Gp] (output) {C(s)};\n\n% Arrows (Forward path)\n\\draw[->] (input) -- (sum.west);\n\\draw[->] (sum.east) -- (compensator.west);\n\\draw[->] (compensator.east) -- (Gp.west);\n\\draw[->] (Gp.east) -- (output);\n\n% Feedback path\n\\draw[->] (output.east) -- ++(1,0) |- (feedback) -| (sum.south);\n\n% Plus and Minus signs\n\\node at (0.2, 0.5) {$+$};\n\\node at (0.2, -0.5) {$-$};\n\n\\end{tikzpicture}\n\\end{document}"Gc=KDs1s+1feedbackcompensatorGp(s)R(s)C(s)+¡
source code
T(s)=KDs(1+KD)s+1T(s) = \frac{K_D s}{(1+K_D)s + 1}
  • introduces an open-loop zero
  • KDK_D increases system might not be stable

in second-order system

T(s)=sKDPωn2s2+2(ζ+KD2Pωn)ωns+ωn2T(s) = \frac{s K_D P \omega_n^2}{s^{2}+ 2(\zeta + \frac{K_D}{2} P\omega_n)\omega_n s + \omega_n^2}

damping effect ζ=ζ+KD2Pωn\zeta^{'} = \zeta + \frac{K_D}{2}P\omega_n

PID control

GC(s)=Kp+KIs+KDsG_C(s) = K_p + \frac{K_I}{s} + K_D s

in time domain:

u(t)=KPe(t)+KI0te(η)dη+KDd(e(t))dtu(t) = K_P e(t) + K_I \int_{0}^{t} e(\eta) d\eta + K_D \frac{d(e(t))}{dt}
ComponentDiscrete-Time Equation
Proportionalu(k)=KPe(k)u(k) = K_P e(k)
Integralu(k)=KITi=1ke(i)u(k) = K_I T \sum_{i=1}^{k} e(i)
Derivativeu(k)=KDT[e(k)e(k1)]u(k) = \frac{K_D}{T}[e(k) - e(k-1)]

approximate of PID controller: u(k)=KPe(k)+KITi=1ne(i)+KDT[e(k)e(k1)]u(k) = K_P e(k) + K_I T \sum_{i=1}^{n} e(i) + \frac{K_D}{T}[e(k) - e(k-1)]