{ "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", "![prob9.1](./img/prob901.svg)\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", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\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 }