% CONTROL MANUAL Y AUTOMÁTICO DE PÉNDULO INVERTIDO % % Este script ejecuta la simulación de un péndulo que puede ser controlado manualmente

(accionando % una barra deslizante o "slider") o de forma automática, mediante lazos de control PID. El control % automático incorpora un doble lazo incluyendo un lazo con control del ángulo del péndulo (para que se sitúe en % posición vertical) y otro lazo más lento para hacer que la posición de la base se sitúe en un punto dado % en el estado de equilibrio. % % El script puede ser utilizado tanto como un "equipo de prácticas", en el que pueden % estudiarse diversos conceptos de control, así como servir de base para que el profesor (o el % alumno) elaboren otros ejemplos interactivos totalmente distintos mediante el procedimiento % de "cortar y pegar". % % % Fecha: 2006-11-02 % Autor: Ignacio Díaz % Area de Ingeniería de Sistemas y Automática % Universidad de Oviedo

clear; close all; clc; disp('Instrucciones:'); disp('- Pulsar ''0'' para desactivar el sistema de control'); disp('- Pulsar otra tecla para restaurar el sistema de control'); disp(' '); disp('Control manual: actuar sobre la barra deslizante para modificar la base del péndulo.'); pause(2);

% l m J B g

PARÁMETROS DEL PÉNDULO = 2; % Longitud del péndulo = 1; % Masa del péndulo = m*l^2; % Momento de inercia referido al eje = 1; % Coeficiente de fricción = 10; % Aceleración de la gravedad

s = tf('s'). pos = 0.0].1).Tm. % BUFFER CON LA POSICIÓN (X(3) TIENE LA POSICIÓN ACTUAL) % X(k) = get(h.700 700]).'pos'. set(f. Ki = 100.'max'.'tustin'). y = x(1).01*s+1). Cth = c2d(Kp + Ki/s + Kd*s/(0.'Value').04 + 0.% ESTADO INICIAL DEL PÉNDULO x = [pi-0. % Período de muestreo e0 = zeros(2.200. a0 = [0.'min'. xmax = +2.0001/s + s*0.0].Tm. % Para que se vea el efecto del control.4). empezamos % con el péndulo casi vertical (theta = pi +/"algo") % DEFINICIÓN DE UN "SLIDER" PARA CONTROLAR MANUALMENTE EL PÉNDULO f = figure(1). % Valor inicial de la posición de la base del péndulo k = 2. Tm = 0. % PARÁMETROS DEL CONTROL PID DE LA POSICIÓN DE LA BASE Cpos = c2d(.0001/(0.1). % Condiciones iniciales del control de ángulo % Condiciones iniciales del control de posición % Condiciones iniciales del péndulo % PARÁMETROS DEL CONTROL PID DEL ÁNGULO Kp = 10.1. h = uicontrol('style'.01. x0 = [0.'tustin').-4.'slider'.[200. % Empezamos en k=2 para tener acceso al menos a dos muestras anteriores while 1. ep0 = zeros(2.0].1. .[20 20 680 20]. k = k + 1. xmin = -2.'pos'.01*s+1). Kd = .

% Asignamos la entrada % Ecuación de x(1) = x(1) + x(2) = x(2) + % Ecuación de y = x(1). % Asignamos la salida . salida th = y.'value').X(k).e(k) = pi-y. % RESTRINGIMOS EL VALOR DEL ERROR AL INTERVALO [-pi.e0).a0).a0] = filter((1/Tm^2)*[1 -2 1].pos.[1 0 0].den{1}.2*pi)-pi. end % Suavizado de la aceleración (muy conveniente.01. [a.pi] e(k) = mod(e(k)+pi.ep. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ECUACIONES EN ESPACIO DE ESTADOS (NO LINEALES) DEL PÉNDULO u = -a. porque el movimiento del % objeto "slider" con un ratón se produce a saltos. estados Tm*x(2). dando lugar a segundas % derivadas muy elevadas) [X(k).9 .ep0).num{1}.num{1}.Cpos.x0] = filter(.9]). [dpos.poly([. e(k) = e(k) . otherwise [pos.ep0] = filter(Cpos.x0). Tm*(1/J*(-B*x(2)-m*g*l*sin(x(1))+m*u*l*cos(x(1)))).e(k). % CONTROL DE LA POSICIÓN DE LA BASE DEL PÉNDULO ep = 0-pos.Cth. % SELECCIÓN DE CONTROL MANUAL / CONTROL AUTOMÁTICO tecla = get(f. switch tecla case '0' pos = get(h.dpos.e0] = filter(Cth. A(k) = a.'currentchar').den{1}.

p2]).'markersize'.0.40).'. end grid on. end . % Refresco de la imagen drawnow. p1 = X(k).%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % REPRESENTACIÓN GRÁFICA DE LA SIMULACIÓN figure(1). hold on.'.imag([p1.').1. axis([xmin-3 xmax+3 -5 5]).'. hold off. plot(X(k).1.1. xmax = xmax . line(real([p1.p2])). elseif X(k)<xmin+1 xmin = xmin . xmax = xmax + 0. plot(real(p2).0. p2 = X(k)+l*exp(j*(th-pi/2)).imag(p2).0.1. % Sugerencia: pueden dibujarse también otras flechas indicando en tiempo real las fuerzas reales % o de inercia que actúan en cada elemento del sistema % Centrado automático de la perspectiva sobre el objeto de control if X(k)>xmax-1 xmin = xmin + 0.

Sign up to vote on this title
UsefulNot useful