Está en la página 1de 27

UNIVERSIDAD DE CONCEPCION

Tarea 5 servomotores
Fundamento de máquinas eléctricas y
servosistemas
Nolbert Cuevas Alarcón
11/07/2013

Control de posición ocupando servomotor


I. Generación de referencias

i) Definir convenientemente el sistema coordenado X e Y de la mesa de trabajo y el punto inicial


escogido de la herramienta de corte. Hacer figura mostrando claramente los ejes coordenados, su
origen, y la posición en este sistema que tendrá la pieza de trabajo y el punto inicial de la
herramienta de corte.

A continuación se presenta el sistema coordenado escogido convenientemente.

Figura 1.1 Sistema coordenado X e Y para la mesa de trabajo.

El punto inicial que tendrá la herramienta de corte en este sistema será el indicado por el punto H,
el cual es el origen del sistema coordenado (0,0). Luego la herramienta de corte se moverá hacia
los puntos C, D, E, F, G, B. Con esto se podrá obtener la pieza solicitada que es un hexágono
regular de lado L=20 cms.
ii) A partir de las coordenadas (x,y) de la pieza hexagonal, determinar las señales de referencia de
posición , ( ) y , ( ) para los servosistemas de cada eje. Estas referencias deben ser tales
que idealmente uno de los ejes se encuentre trabajando a la máxima velocidad de operación
permitida o acelerando a la máxima tasa permitida hasta alcanzar la velocidad máxima. Esta
velocidad se considera igual al 90% de la velocidad nominal del servomotor y para ella el avance
lineal de cada eje es de 0.02 [m/s]. Hacer gráficos de , ( ), , ( ), , ( ) y , ( ).

Para llevar a cabo este análisis se analizarán los ejes coordenados por separado, primeramente se
analizará lo que pasa con el servomotor conectado al eje X.

Figura 1.2 Señal de referencia de posición correspondiente al servomotor en el eje X.

Para obtener la figura 1.2 se hizo un análisis de cada tramo que recorría el servomotor ubicado en
el eje X. Para ello se tomo como referencia es sistema de ejes coordenados mostrado en la figura
1.1, donde se fueron tomando los movimientos que realizaba el servomotor a través del eje X en
función de la distancia que recorría a una velocidad de 0.02 [m/s]
Figura 1.3 Señal de referencia de posición correspondiente al servomotor en el eje y.

Para la referencia de velocidad se utilizó una trayectoria triangular, ya que esta elección causará
menos error al llegar al punto final, también se considero el hecho de que la velocidad máxima
permitida es el 90% de la velocidad nominal.

Figura 1.4 Referencia de velocidad , ( ) para eje coordenado X.


Figura 1.4 Referencia de velocidad , ( ) para eje coordenado X.
II. Síntesis de lazos de control

Ambos servosistemas son idénticos, por lo que se requiere hacer el procedimiento de


sintonización solo en uno de ellos y luego copiar los valores obtenidos en el otro eje. El lazo de
corriente se asume ideal y sólo requieren sintonizarse los lazos de velocidad y posición.

2.1 Síntesis controlador de velocidad

Siguiendo el método de ajuste por zonas, determinar los valores de las ganancias Kvp y Kvi del
controlador PI de velocidad. En particular

i) Ajuste de ganancia Kvp. Desarrollar simulación para el ajuste de la ganancia Kvp en modo de
control de velocidad, con la componente integrativa del controlador nula (Kvi=0). Aplicar onda
cuadrada de 10% de y obtener respuesta del lazo para las distintas ganancias Kvp.

Para la sintonización se ocupará el siguiente diagrama en bloques realizado en el modulo simulink


de Matlab.

Figura 2.1 Diagrama en bloques para sintonización

Ocupando el diagrama en bloques anterior y guardando las variables en workspace, se procede a


tomar distintos valores de Kvp con Kvi=0, de este modo se podrá ver qué valor de Kvp es: Bajo,
Correcto y Alto. Luego se irá aumentando el valor de Kvi desde cero hasta lograr un sobrepaso
menor al 15%.
Control Lazo Velocidad con Kvp Bajo
30 Wref
Wm

25

20
Velocidad [rad/s]

15

10

0
0 1 2 3 4 5 6
t[s]

10
Ia
Imax

5
Ia[A]

-5

-10
0 1 2 3 4 5 6
t [s]

Figura 2.2 Respuesta ante escalón del 10% de para Kvp=0.06 (bajo).
Control Lazo Velocidad con Kvp Correcto
30 Wref
Wm

25

20
W[rad/s]

15

10

0
0 1 2 3 4 5 6
t[s]

10
Ia
Imax

5
Ia[A]

-5

-10
0 1 2 3 4 5 6
t[s]

Figura 2.3 Respuesta ante escalón del 10% de para Kvp=0.35 (correcto).
Control Lazo Velocidad con Kvp Alto
30 Wref
Wm

25

20
Wm[rad/s]

15

10

0
0 1 2 3 4 5 6
t[s]

60 Ia
Imax
40

20
Ia[A]

-20

-40

-60

0 1 2 3 4 5 6
t [s]

Figura 2.4 Respuesta ante escalón del 10% de para Kvp=2.1 (alto).
Se puede inferir a través de las simulaciones realizadas que:

-Para un Kvp bajo, según figura 2.2, la corriente queda en niveles bajísimos, quedando fuera de
cualquier peligro el motor, pero se observa que el sistema no sigue la referencia de la mejor
forma. Por lo tanto este valor de Kvp bajo queda descartado para ser catalogado como correcto.

-Para un Kvp alto, según figura 2.4, se observa que el sistema sigue a la referencia entregada casi
perfectamente, pero a un costo elevado, la corriente del motor supera por mucho a la corriente
máxima permitida

-Finalmente en la figura 2.3 se puede apreciar que el Kvp escogido es el correcto, ya que el peak de
corriente no supera el máximo permitido por el motor, y el seguimiento de la señal de referencia
es aceptable.

-Por lo tanto el Kvp con el cual se procederá a sintonizar el lazo de corriente tendrá el valor de
Kvp=0.35.
ii) Ajuste de ganancia Kvi. Desarrollar simulación para el ajuste de Kvi en modo de control de
velocidad, con la componente proporcional del controlador Kvp ajustada al valor correcto
encontrado en i). Aplicar onda cuadrada de 10% de y obtener la respuesta del lazo para
distintos Kvi. Bajo, correcto y alto.

Lazo Velocidad para Kvi Bajo


25 Wref
Wm
Sobrepaso max
20

15
Wm[rad/s]

10

-5
0 1 2 3 4 5 6
t[s]

10
Ia
Imax

5
Ia[A]

-5

-10
0 1 2 3 4 5 6
t[s]

Figura 2.5 Respuesta ante escalón del 10% de para Kvi=0.4 (bajo), con Kvp=0.35.
Lazo Velocidad para Kvi Correcto
25 Wref
Wm
Sobrepaso max
20

15
Wm[rad/s]

10

-5
0 1 2 3 4 5 6
t[s]

8
Ia
6 Imax

2
Ia[A]

-2

-4

-6

-8
0 1 2 3 4 5 6
t[s]

Figura 2.6 Respuesta ante escalón del 10% de para Kvi=1.3 (correcto), con Kvp=0.35.
Lazo Velocidad para Kvi Alto
30 Wref
Wm
25 Sobrepaso max

20
Wm[rad/s]

15

10

-5
0 1 2 3 4 5 6
t[s]

10
Ia
Imax

5
Ia[A]

-5

-10
0 1 2 3 4 5 6
t[s]

Figura 2.7 Respuesta ante escalón del 10% de para Kvi=8 (alto), con Kvp=0.35.
Se puede inferir a través de las simulaciones realizadas que:

-Para Kvi bajos el sistema no posee tanto sobrepaso en el seguimiento de posición, pero con esto
se sacrifica la rapidez, siendo la respuesta lenta.

-Para Kvi altos la respuesta se hace más rápida, pero se ve claramente en la figura 2.7 que el
sobrepaso es mayor que el deseado, aparte de presentar oscilaciones considerables.

-Finalmente para el Kvi correcto, se trata obtener una respuesta lo más rápida posible, pero
cuidando que no tenga un sobrepaso mayor al 15%, ya que esto ocasionaría imperfecciones en
aplicaciones de precisión.
2.2 Síntesis controlador de posición

i) Ajuste de ganancia Kpp. Desarrollar simulación para el ajuste de la ganancia Kpp en modo de
control anteriores. Generar referencia de posición sinusoidal de amplitud máxima de 30*pi [rad]
de modo que la máxima velocidad durante el ciclo no exceda del 90% de la velocidad nominal del
servomotor. Aplicar referencia desarrollada y obtener respuesta del servosistemas para distintas
ganancias Kpp. Bajo, correcto y alto.

Para la simulación se utilizó el siguiente esquema simulink en conjunto con código Matlab anexo.

Figura 2.8 Esquema simulink para determinación de Kpp.

Posición para Kpp bajo Pref


800
Pm

600
theta [rad]

400

200

0
0 1 2 3 4 5 6 7 8 9 10
t [s]
Velocidad para Kpp Bajo
100
Wref
80 Wm
Wm [rad/s]

60

40

20

0
0 1 2 3 4 5 6 7 8 9 10
t [s]
Corriente Ia para Kpp Bajo
2
Ia
1
Ia [A]

-1

-2
0 1 2 3 4 5 6 7 8 9 10
t[s]

Figura 2.8 Respuesta ante referencia sinusoidal para Kpp=2 bajo, con Kvp=0.35 y Kvi=1.3
Posicion para Kpp Correcto
800
Pref
600 Pm
theta[rad]

400

200

0
0 1 2 3 4 5 6 7 8 9 10
t[s]
Velocidad para Kpp Correcto
100
Wref
80 Wm
Wm[rad/s]

60

40

20

0
0 1 2 3 4 5 6 7 8 9 10
t[s]
Corriente para Kpp Correcto
4
Ia
2
Ia[A]

-2

-4
0 1 2 3 4 5 6 7 8 9 10
t[s]

Figura 2.9 Respuesta ante referencia sinusoidal para Kpp=30 correcto, con Kvp=0.35 y Kvi=1.3
Posicion para Kpp Alto
800
Pref
600 Pm
theta[rad]

400

200

0
0 1 2 3 4 5 6 7 8 9 10
t[s]
Velocidad para Kpp Alto
100
Wref
80 Wm
Wm[rad/s]

60

40

20

0
0 1 2 3 4 5 6 7 8 9 10
t[s]
Corriente para Kpp Alto
4
Ia
2
Ia[A]

-2

-4
0 1 2 3 4 5 6 7 8 9 10
t[s]

Figura 2.10 Respuesta ante referencia sinusoidal para Kpp=100 correcto, con Kvp=0.35 y Kvi=1.3
Usando los valores obtenidos de las sintonizaciones de lazo de velocidad y posición, se procedió a
determinar la sintonización del lazo de posición.

-Para Kpp bajos se ve que la respuesta del sistema no sigue de la mejor forma a la referencia
sinusoidal impuesta, con un error considerable. Respecto a la corriente, esta se mantiene en
rangos normales.

-Para Kpp alto se puede observar que la referencia sigue perfectamente a la referencia, pero la
corriente presenta muchas oscilaciones, por tanto sería se puede concluir que sería provechoso
desde el punto de vista del error, pero se paga un precio respecto a las oscilaciones de la
corriente.
III) Evaluación sistema

i) Evaluar la operación del servomotor en el eje X durante la realización del ciclo de corte
hexagonal usando la referencia obtenida en la sección I y los valores de los controladores
ajustados en la sección II. Para ello, desarrollar simulación en Matlab o simulink que permita
evaluar la respuesta del sistema para la referencia sinusoidal obtenida en I.

Para la simulación de utilizaron los valores de los controladores ajustados obtenidos


anteriormente, Kvp=0.35, Kvi=1.3 y Kpp=30, junto con la referencia obtenida en I.

Se utilizó el siguiente esquema en simulink para poder llevar a cabo la simulación.

Figura 3.1 Diagrama en bloques utilizado para evaluar el sistema.

Considerando el ajuste realizado y el diagrama de la figura 3.1 se procede a evaluar el sistema en


el eje X.
thetaref

thetar ef y thetam thetam


40
theta

20

0
0 5 10 15 20 25 30 35 40
t[s]
thetam
40
theta [vtas]

20

0
0 5 10 15 20 25 30 35 40
t[s]
Error de posición
0.1 Error

0.05

-0.05
0 5 10 15 20 25 30 35 40
Wm
velocidad motor W ref
2000
Wm[rpm]

1000

-1000
0 5 10 15 20 25 30 35 40
t[s]

Figura 3.2 Evaluación del sistema


Corriente
20

10
Ia[A]

-10

-20
0 5 10 15 20 25 30 35 40
tiempo [s]
potencia
4

3
Pot[W]

0
0 5 10 15 20 25 30 35 40
t[s]
pérdidas
2

1.5
Per[J]

0.5

0
0 5 10 15 20 25 30 35 40
tiempo [s]

Figura 3.2 Corriente, Potencia y pérdidas.


-De la grafica del error de posición podemos inferir que este es muy pequeño, no alcanza a ser de
0.5[mm], y aunque este error fuera superior, se ve que al terminar el proceso la soldadora se ubica
en el lugar que corresponde, dado que tiene cero error con respecto a su referencia (cero error
estado estacionario), esto quiere decir que el sistema sigue casi perfectamente la dinámica de la
referencia.

-De la grafica de la corriente de operación observamos que para invertir la velocidad de operación,
es decir, pasar de acelerar el sistema a desacelerarlo, necesitamos invertir la corriente de
operación, esto se ve dado que en el momento de cambio de velocidad, la corriente torna hacia
valores negativos.
Código Utilizado

clear all
close all
clc

%Datos Motor:
Mnom=25;Inom=3.1;Vnom=179;Nnom=2000;K_T=0.820;Ra=0.193;
La=3.5e-3;J_m=0.0280;J_l=0.0280;
J_total=J_m+J_l; %Inercia total
Wnom=2000*pi/30; %velocidad nominal
Iamax=2.5*Inom; %corriente maxima
t1=linspace(0,10,1000);

%Ajuste Ganancias
K_vi=0; %componente integrativa 0

K_vp=0.06;
sim('Lazo_Velocidad') %referencia a Diagrama en simulink

%Plot para Kvp Bajo


figure(1)
subplot(2,1,1)
plot(Wref.time, Wref.signals.values, Wm.time,
Wm.signals.values,'linewidth',2)
grid on; axis([0 6 0 30]); ylabel('Velocidad [rad/s]'),xlabel('t[s]')
title('Control Lazo Velocidad con Kvp Bajo'),legend('Wref','Wm')
subplot(2,1,2)
plot(Ia.time, Ia.signals.values,t1,-Iamax,'-r',t1,Iamax,'-
r','linewidth',2)
grid on,axis([0 6 -10 10]); ylabel('Ia[A]'), xlabel('t
[s]'),legend('Ia','Imax')

%Plot para Kvp correcto


K_vp = 0.35;
sim('Lazo_Velocidad') %referencia a diagrama Simulink
figure(2)
subplot(2,1,1)
plot(Wref.time, Wref.signals.values, Wm.time,
Wm.signals.values,'linewidth',2)
grid on,axis([0 6 0 30]),ylabel('W[rad/s]'),xlabel('t[s]')
title('Control Lazo Velocidad con Kvp Correcto'),legend('Wref','Wm')
subplot(2,1,2)
plot(Ia.time, Ia.signals.values,t1,-Iamax,'-r',t1,Iamax,'-
r','linewidth',2)
axis([0 6 -10 10]),grid
on,ylabel('Ia[A]'),xlabel('t[s]'),legend('Ia','Imax')

%Plot para Kvp Alto


K_vp = 2.1;
sim('Lazo_Velocidad') %referencia a diagrama Simulink
figure(3)
subplot(2,1,1)
plot(Wref.time, Wref.signals.values, Wm.time,
Wm.signals.values,'linewidth',2)
grid on,axis([0 6 0 30]),ylabel('Wm[rad/s]'),xlabel('t[s]')
title('Control Lazo Velocidad con Kvp Alto'),legend('Wref','Wm')
subplot(2,1,2)
plot(Ia.time, Ia.signals.values,t1,-Iamax,'-r',t1,Iamax,'-
r','linewidth',2)
axis([0 6 -70 70]),grid on,ylabel('Ia[A]'),xlabel('t
[s]'),legend('Ia','Imax')

clear all
close all
clc

%Datos Motor:
Mnom=25;Inom=3.1;Vnom=179;Nnom=2000;K_T=0.820;Ra=0.193;
La=3.5e-3;J_m=0.0280;J_l=0.0280;
J_total=J_m+J_l; %Inercia total
Wnom=2000*pi/30; %velocidad nominal
Iamax=2.5*Inom; %corriente maxima
t1=linspace(0,10,1000);

%Ajuste Ganancias
K_vp = 0.35; %Kvp correcto que se obtuvo

%Plot para Kvi Bajo


K_vi=0.4;
sim('Lazo_Velocidad')
figure(4)
subplot(2,1,1)
plot(Wref.time,Wref.signals.values,Wm.time,Wm.signals.values,t1,24.08,'-
r','linewidth',2)
grid on,axis([0 6 -5
25]),ylabel('Wm[rad/s]'),xlabel('t[s]'),legend('Wref','Wm','Sobrepaso
max')
title('Lazo Velocidad para Kvi Bajo')
subplot(2,1,2)
plot(Ia.time,Ia.signals.values,t1,-Iamax,'-r',t1,Iamax,'-
r','linewidth',2)
axis([0 6 -10 10]),grid
on,ylabel('Ia[A]'),xlabel('t[s]'),legend('Ia','Imax')

%Plot para Kvi Correcto


K_vi=1.3;
sim('Lazo_Velocidad')
figure(5)
subplot(2,1,1)
plot(Wref.time,Wref.signals.values,Wm.time,Wm.signals.values,t1,24.08,'-
r','linewidth',2)
grid on,axis([0 6 -5
25]),ylabel('Wm[rad/s]'),xlabel('t[s]'),legend('Wref','Wm','Sobrepaso
max')
title('Lazo Velocidad para Kvi Correcto')
subplot(2,1,2)
plot(Ia.time, Ia.signals.values,t1,-Iamax,'-r',t1,Iamax,'-
r','linewidth',2)
axis([0 6 -8 8]),grid on,
ylabel('Ia[A]'),xlabel('t[s]'),legend('Ia','Imax')

%Plot para Kvi Alto


K_vi=8;
sim('Lazo_Velocidad')
figure(6)
subplot(2,1,1)
plot(Wref.time,Wref.signals.values,Wm.time,Wm.signals.values,t1,24.08,'-
r','linewidth',2)
grid on,axis([0 6 -5
30]),ylabel('Wm[rad/s]'),xlabel('t[s]'),legend('Wref','Wm','Sobrepaso
max')
title('Lazo Velocidad para Kvi Alto')
subplot(2,1,2)
plot(Ia.time,Ia.signals.values,t1,-Iamax,'-r',t1,Iamax,'-
r','linewidth',2)
axis([0 6 -10 10]),grid
on,ylabel('Ia[A]'),xlabel('t[s]'),legend('Ia','Imax')

clear all
close all
clc

%Datos Motor:
Mnom=25;Inom=3.1;Vnom=179;Nnom=2000;K_T=0.820;Ra=0.193;
La=3.5e-3;J_m=0.0280;J_l=0.0280;
J_total=J_m+J_l; %Inercia total
Wnom=2000*pi/30; %velocidad nominal

%Ajuste ganancias
K_vp = 0.35; %Kvp correcto que se obtuvo
K_vi = 1.3; %Kvi correcto que se obtuvo

%Plot para Kpp Bajo


K_pp = 2;
sim('Lazo_Posicion') %referencia a diagrama simulink
figure(7)
subplot(3,1,1) %tetha
plot(Pref.time, Pref.signals.values,Pm.time,
Pm.signals.values,'linewidth',2)
grid on, ylabel('theta [rad]'),xlabel('t [s]'),legend('Pref','Pm')
title('Posición para Kpp bajo')
error=sqrt((Pref.signals.values-Pm.signals.values).^2); %calculo
error
error1=(error*100)/(Pref.signals.values)
subplot(3,1,2) %Velocidad
plot(Ref.time, Ref.signals.values,Wm.time,
Wm.signals.values,'linewidth',2)
grid on, ylabel('Wm [rad/s]'), xlabel('t [s]'),legend('Wref','Wm')
title('Velocidad para Kpp Bajo')
subplot(3,1,3) %corriente
plot(Ia.time, Ia.signals.values,'linewidth',2)
grid, ylabel('Ia [A]'),xlabel('t[s]'),legend('Ia')
title('Corriente Ia para Kpp Bajo')
%plot para Kpp Correcto
K_pp=30;
sim('Lazo_Posicion') %referencia a diagrama simulink
figure(8)
subplot(3,1,1) %tetha
plot(Pref.time,
Pref.signals.values,Pm.time,Pm.signals.values,'linewidth',2)
error2=sqrt((Pref.signals.values-Pm.signals.values).^2); %calculo
error
error3=error2*100/Pref.signals.values
grid on, ylabel('theta[rad]'),xlabel('t[s]'),legend('Pref','Pm')
title('Posicion para Kpp Correcto'),legend('Pref','Pm')
subplot(3,1,2) %velocidad
plot(Ref.time,Ref.signals.values,Wm.time,Wm.signals.values,'linewidth',2)
grid on, ylabel('Wm[rad/s]'),xlabel('t[s]'),legend('Wref','Wm')
title('Velocidad para Kpp Correcto')
subplot(3,1,3) %corriente
plot(Ia.time, Ia.signals.values,'linewidth',2)
grid on, ylabel('Ia[A]'),xlabel('t[s]'),legend('Ia')
title('Corriente para Kpp Correcto')

%Plot Para Kpp Alto


K_pp = 100;
sim('Lazo_posicion') %referencia a diagrama simulink
figure(9)
subplot(3,1,1) %tetha
plot(Pref.time,
Pref.signals.values,Pm.time,Pm.signals.values,'linewidth',2)
error4=sqrt((Pref.signals.values-Pm.signals.values).^2);
error5=error4*100/Pref.signals.values %calculo error
grid on, ylabel('theta[rad]'),xlabel('t[s]'),,legend('Pref','Pm')
title('Posicion para Kpp Alto')
subplot(3,1,2) %velocidad
plot(Ref.time,Ref.signals.values,Wm.time,Wm.signals.values,'linewidth',2)
grid on, ylabel('Wm[rad/s]'),xlabel('t[s]'),legend('Wref','Wm')
title('Velocidad para Kpp Alto')
subplot(3,1,3) %Corriente
plot(Ia.time, Ia.signals.values,'linewidth',2)
grid on,ylabel('Ia[A]'),xlabel('t[s]'),legend('Ia')
title('Corriente para Kpp Alto')

figure(1)
subplot(4,1,1);
plot(t,pos,t,posref,'linewidth',2), legend('posiscion', 'posicion
referencia')
ylabel('x[cm]'), xlabel('tiempo [s]'), grid on
title('Posicion Evaluación')
subplot(4,1,2);
plot(t,pos,'linewidth',2), grid on, ylabel('x[cm]'), xlabel('tiempo [s]')
title('posicion carro')
subplot(4,1,3);
plot(t,err,'linewidth',2),title('error posición Kpp Alto')
ylabel('x[cm]'), xlabel('tiempo [s]'), grid on
subplot(4,1,4)
plot(t,wm,t,wmref,'linewidth',2),legend('velocidad', 'velocidad
referencia')
ylabel('vel[cm/s]'), xlabel('tiempo [s]'), grid on
title('Velocidad carro')
figure(2)
subplot(3,1,1)
plot(t,Ia,'linewidth',2), title('Corriente'), grid on
xlabel('tiempo [s]'), ylabel('Corriente [A]')
subplot(3,1,2)
plot(t,pot,'linewidth',2), title('Potencia')
grid on, xlabel('tiempo [s]'), ylabel('[W]')
subplot(3,1,3)
plot(t, per,'linewidth',2), title('perdida energia')
grid on, xlabel('tiempo [s]'), ylabel('[J]')

También podría gustarte