0% encontró este documento útil (0 votos)
110 vistas16 páginas

Motor A Pasos MATLAB

Este documento presenta el código y la simulación para controlar un motor a pasos utilizando Arduino. Contiene el código para configurar los pines del motor a pasos, definir el número de pasos y la velocidad, y hacer que el motor gire 180 grados en un sentido y luego regrese girando los mismos 180 grados en el sentido opuesto. Adicionalmente, incluye la simulación del circuito del motor a pasos en Fritzing.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
110 vistas16 páginas

Motor A Pasos MATLAB

Este documento presenta el código y la simulación para controlar un motor a pasos utilizando Arduino. Contiene el código para configurar los pines del motor a pasos, definir el número de pasos y la velocidad, y hacer que el motor gire 180 grados en un sentido y luego regrese girando los mismos 180 grados en el sentido opuesto. Adicionalmente, incluye la simulación del circuito del motor a pasos en Fritzing.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 16

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);

También podría gustarte