TECNOLÓGICO NACIONAL
DE MÉXICO
INSTITUTO TECNOLÓGICO DE
QUERÉTARO
INGENIERÍA MECATRÓNICA
INSTRUMENTACIÓN
Practicas Unidad 4 (Matlab)
Y control de motor a pasos
ALUMNOS:
CAMPOS BAUTISTA PEDRO ISMAEL
BÁRCENAS RAMÍREZ ERICK ALEJANDRO
LÓPEZ RIBERO ADRIÁN
SÁNCHEZ DÍAZ FÁTIMA ESTEFANÍA
1. Programación de diagrama de bloques
clc; clear all; close all;
num=[2,1]; %numerador
den=[ 1, 1]; %denominador
G=tf(num,den); %crea la función de transferencia
num1=[1, 2]; %numerador
den1=[1, 1]; %denominador
G1=tf(num1,den1); %crea la función de transferencia
disp('Diagrama serie');
% calcula la con?guraci´on serie o cascada:
G1_T=series(G1,G)
% calcula la con?guraci´on paralelo:
disp('Diagrama paralelo');
G2_T=parallel(G,G1)
% calcula la con?guraci´on con retroalimentación negativa en el lazo de
control:
disp('Diagrama en lazo cerrado');
G3_T=feedback(G,G1)
Resultados
Diagrama serie
G1_T=
2 s^2 + 5 s + 2
---------------
s^2 + 2 s + 1
Continuous-time transfer function.
Diagrama paralelo
G2_T =
3 s^2 + 6 s + 3
---------------
s^2 + 2 s + 1
Continuous-time transfer function.
Diagrama en lazo cerrado
G3_T =
2 s^2 + 3 s + 1
---------------
3 s^2 + 7 s + 3
Continuous-time transfer function.
2. Polos y Ceros
clc; clear all; close all ;
% ceros y polos de la funci´on: G1
num1=[1,4];
den1=[4,3,8];
[c1, p1, k1]=tf2zp(num1,den1)
[num1a, den1a]=zp2tf(c1,p1,k1);
num1a=den1(1)*num1a
den1a=den1(1)*den1a
% ceros y polos de la funci´on: G2
num2=[4,3,1];
den2=[7,2,1,3];
[c2, p2, k2]=tf2zp(num2,den2)
[num2a, den2a]=zp2tf(c2,p2,k2);
num2a=den2(1)*num2a
den2a=den2(1)*den2a
% ceros y polos de la funci´on: G3
num3=[6,1,0.6,0.9];
den3=[5,8,1,2,-1];
[c3, p3, k3]=tf2zp(num3,den3)
[num3a, den3a]=zp2tf(c3,p3,k3);
num3a=den3(1)*num3a
den3a=den3(1)*den3a
Resultados:
c1 =
-4
p1 =
-0.3750 + 1.3636i
-0.3750 - 1.3636i
k1 =
0.2500
num1a =
0 1 4
den1a =
4.0000 3.0000 8.0000
c2 =
-0.3750 + 0.3307i
-0.3750 - 0.3307i
p2 =
-0.7906 + 0.0000i
0.2525 + 0.6916i
0.2525 - 0.6916i
k2 =
0.5714
num2a =
0 4.0000 3.0000 1.0000
den2a =
7.0000 2.0000 1.0000 3.0000
c3 =
0.1783 + 0.5048i
0.1783 - 0.5048i
-0.5233 + 0.0000i
p3 =
-1.6671 + 0.0000i
-0.1214 + 0.6102i
-0.1214 - 0.6102i
0.3099 + 0.0000i
k3 =
1.2000
num3a =
0 6.0000 1.0000 0.6000 0.9000
den3a =
5.0000 8.0000 1.0000 2.0000 -1.0000
3. Diagrama de Bode
clc;clear all; close all; format short
K=3;
G=tf(K);
figure
w=logspace(-3,3,1000);
bode(G,w)
num=[1];
den=[1,0];
G1=tf(num,den);
figure
bode(G1,w);
num=[1,0];
den=[1];
G2=tf(num,den);
figure
bode(G2,w);
grid on
Resultados
Figura 1.
Figura 2
Figura 3
4. Bode 2
clc; clear all; close all;
num=[1, 3, 1];
den=[1. 0.8, 0.3]
G=tf(num,den);
figure
w=10^(0):1:10^(3);
bode(G,w)
figure
w1=logspace(0,3,1000);
bode(G,w1)
figure
bodeplot(G,w)
figure
bodemag(G,w)
Resultados
Figura 1
Figura 2 Figura 3
Figura 4
5. Bode 3
clc; clear all; close all; format short
num=[1, 3, 1]; den=[1. 0.8, 0.3];
G=tf(num,den);
w=logspace(0,3,1000);
figure
bode(G,w)
[mag, fase]=bode(G,w);
[m n]=size(w);
y1=0; y2=0;
mag1=zeros(1,n); fase1=zeros(1,n);
for i=1:n
y1=mag(1,1,i);
y2=fase(1,1,i);
mag1(i)=y1;
fase1(i)=y2;
end
figure
semilogx(w,20*log10(mag1))
figure
semilogx(w,fase1)
Resultados
Figura 1 Figura 2
Figura 3
6. Procedimiento para obtener la curva Nyquist
clc; clear all; close all;
num=[1];
den=[1 2 3];
w=0.1:0.1:1000;
figure
nyquist(num,den,w);
grid on
num1=[1,1];
den1=[1, 3, 2.3];
figure
G1=tf(num1,den1);
nyquist(G1,w);
Resultados
Figura 1 Figura 2
7. LTI Viewer
clc; clear all; close all;
num=[1];
den=[1 2 3];
w=0.1:0.1:1000;
figure
nyquist(num,den,w);
grid on
num1=[1,1];
den1=[1, 3, 2.3];
figure
G1=tf(num1,den1);
nyquist(G1,w);
Resultados:
8. Sisotool
clc ;
clear all;
close all ;
format short;
num=[1, 2, 1] ;
den=[1, 4, 2];
G=tf(num, den);
sisotool('bode',G)
Resultados:
9. Sistemas lineales de segundo orden
clc; clear all; close all;
format short;
tini=0; h=0.001; tfinal = 20;
t=tini:h:tfinal;
wn=1;
rho=0.2;
num=[wn*wn];
den=[1, 2*rho*wn, wn*wn];
step(num,den,t)
Resultados:
10. Sistema de Impulso de rampa
clc; clear all; close all; format short;
tini=0; h=0.001; tfinal = 100;
t=tini:h:tfinal;
wn=1; rho=1.2;
num=[wn*wn];
den=[1, 2*rho wn, wn*wn];
figure
impulse(num, den,t)
grid
figure
num1=[wn*wn];
den1=[1, 2*rho wn, wn*wn, 0];
step(num1,den1,t)
grid
Resultados:
Figura 1 Figura 2
11. Variables canonicas del modelo de espacio de estados
clc; clear all; close all; format short;
A=[0,1; -4, -5]; B=[0;1]; c=[1,0]; D=[0];
sys=ss(A,B,c,D);
den=poly(sys.A);
n=length(den);
lambda=roots(den);
T=[lambda(1,1),lambda(2,1); 1, 1];
A_c=T*A*T^(-1);
B_c=T*B;
c_c=c*T^(-1);
D_c=D;
sys1=ss2ss(sys,T);
sys1.A
sys1.B
sys1.c
sys1.D
Resultados:
12. Modelo de espacio de estados en tiempo discreto
clc;
clear all;
close all;
format short;
syms q
Phi=[q-2, -1; 0, q-2];
Gamma=[1 ; 1];
c=[1, 0];
Gq=simplify(c*inv(Phi)*Gamma)
Resultados:
13. Modelo Comparativo
clc;clear all;
close all;format short
num=[1];den=[1, 0.2, 1];
G=tf(num,den);pzmap(G)
grid on
Resultados:
14. Filtro para bajas
clc;
clear all;
close all;
format short;
ti=0; h=0.001; tf = 10;
t=(ti:h:tf);
u=5*sin(2*pi*t)+random('Normal',t,t);
[renglones, columnas]=size(t);
Fu=zeros(renglones, columnas);
lambda=3;
for k=2:renglones
Fu(k)=exp(-h*lambda)*Fu(k-1)+(1-exp(-h*lambda))*u(k-1);
end
subplot(2,1,1); plot(t,u)
subplot(2,1,2); plot(t,Fu)
Resultados:
Práctica de motor a pasos
Motor a pasos:
Simulación en Fritzing
Código para Arduino
#include <Stepper.h>
int pin8 = 8;
int pin9 = 9;
int pin10 = 10;
int pin11 = 11;
float pasos, grados_deseados=180.0;
#define num_pasos 64
Stepper mimotorapasos(num_pasos, pin8, pin10, pin9, pin11);
void setup()
Serial.begin(9600);
mimotorapasos.setSpeed(200);
void loop()
pasos=grados_deseados*2048.0/360;
mimotorapasos.step(-pasos);
delay(3000);
mimotorapasos.step(pasos);