{
"cells": [
{
"cell_type": "markdown",
"id": "f15c4e0d",
"metadata": {},
"source": [
"# Problema 9.1\n",
"\n",
"\n",
"\n",
"Sea el sistema de control representado en la figura:\n",
"\n",
"\n",
"\n",
"donde $G_1=\\frac{1}{s+1}$ y $G_2 = \\exp(-1.02 s)$.\n",
"\n",
"1. Si $G_c = K_c$, determinar el _offset_ de la respuesta para una entrada en escalón unidad.\n",
"2. Para eliminar el _offset_ se recomienda que el controlador sea PID. ¿Qué valores de diseño recomendaría para los parámetros del controlador PID? Se sugiere usar el método de Ziegler-Nichols.\n",
"\n",
"---\n",
"\n",
"**Solución**\n",
"\n",
"a) En primer lugar, encontraremos la función de transferencia del lazo de control, $G=\\frac{C}{R}$, y, a continución calcularemos el _offset_.\n",
"\n",
"Empezamos cargando el archivo `clase.jl` que ya carga las liberías y funciones necesarias, además también define las variables `s` y `t`:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "bb1285e3",
"metadata": {},
"outputs": [],
"source": [
"include(\"../clase.jl\");"
]
},
{
"cell_type": "markdown",
"id": "2ec94fef",
"metadata": {},
"source": [
"Buscamos la función de transferencia $G$ y calculamos el _offset_:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "de8de1b6",
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\begin{equation*}\\frac{1}{K_{c} + 1}\\end{equation*}$\n"
],
"text/plain": [
" 1 \n",
"───────\n",
"K_c + 1"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Definición de la variable Kc\n",
"@vars Kc=>\"K_c\" positive=true\n",
"\n",
"# Definición de las funciones de transferencia del lazo\n",
"G1 = 1/(s+1)\n",
"G2 = exp(-1.02s)\n",
"Gc = Kc\n",
"\n",
"# Función de transferencia del lazo de control\n",
"G = Gc*G1*G2/(1+Gc*G1*G2)\n",
"\n",
"# Cambio en la consigna en forma de escalón unidad\n",
"R = 1/s\n",
"\n",
"# Respuesta del lazo de control\n",
"C = G*R\n",
"\n",
"# Cálculo del offset\n",
"Offset = limit(s*(R-G*R), s, 0)"
]
},
{
"cell_type": "markdown",
"id": "565d51c7",
"metadata": {},
"source": [
"b) Para el método de Ziegler-Nichols, en primer lugar, hay que encontrar la frecuencia de cruce. Es decir, aquella frecuencia que provoca un retraso de $-\\pi$ rad. A partir de este valor, se puede encontrar la ganancia última $K_u$, que marca el límite de estabilidad, y el periodo último $P_u$ en esas condiciones.\n",
"\n",
"Podemos encontrar $\\omega_{co}$ a partir del digrama de Bode:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "6363a075",
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"Dict{Any, Any} with 3 entries:\n",
" \"wco\" => 1.99558\n",
" \"RAco\" => 0.448006129689489\n",
" \"phico\" => -3.14159"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"salida = bode(G1*G2; co=true)"
]
},
{
"cell_type": "markdown",
"id": "250ec268",
"metadata": {},
"source": [
"Es importante destacar que en el primero de los gráficos realmente se está representando $\\frac{RA}{K_c}$.\n",
"\n",
"Con el valor de la frecuencia de cruce, se puede calcular el periodo último de oscilación:\n",
"\n",
"$$P_u =\\frac{2 \\pi}{\\omega_{co}}$$"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "b6188356",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"3.1485565419006822"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Pu = 2*pi/salida[\"wco\"]"
]
},
{
"cell_type": "markdown",
"id": "de1e742c",
"metadata": {},
"source": [
"La ganancia última es el inverso de la razón de amplitudes para la frecuencia de cruce:\n",
"\n",
"$$K_u = \\frac{1}{RA_{co}}$$"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "0f36f241",
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\begin{equation*}2.2321123166174\\end{equation*}$\n"
],
"text/plain": [
"2.23211231661740"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Ku = 1/salida[\"RAco\"]"
]
},
{
"cell_type": "markdown",
"id": "7f2f992c",
"metadata": {},
"source": [
"Sustituyendo los valores $K_u$ y $P_u$ en las fórmulas de Ziegler y Nichols se encuentra la sintonía del controlador PID:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "55ac06f8",
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\begin{equation*}1.31300724506906\\end{equation*}$\n"
],
"text/plain": [
"1.31300724506906"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Kc = Ku/1.7"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "3377acf3",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1.5742782709503411"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"τI = Pu/2"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "a3a4099e",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.3935695677375853"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"τD = Pu/8"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Julia 1.6.0",
"language": "julia",
"name": "julia-1.6"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
"version": "1.6.1"
}
},
"nbformat": 4,
"nbformat_minor": 5
}