Download A continuación se muestra el código fuente con el que se

Document related concepts
no text concepts found
Transcript
DISEÑO:
Figura
Como se aprecia, lo que separa al puerto paralelo del circuito para controlar el motor paso
a paso es el espacio entre los LED’s y los fototransistores dentro de los opto-acopladores.
Los diodos son utilizados para aislar cada bobina del motor al momento de polarizarlas.
Los transistores TIP31 están configurados como conmutadores, varían entre corte y
saturación.
MATERIALES:










Transistores - TIP31 (x4)
LED (x4)
Diodos - 1N4004 (x4)
Opto acoplador – 4N25 (x4)
Cable de impresora
Conector macho y hembra de 25 pines
Un paso a paso unipolar
Un Protoboard
Cables para protoboard
Resistencias (1/4 watt)
DESCRIPCIÓN:
En este laboratorio se hace uso de programación con lenguaje de alto nivel como
C++, y del uso de los puertos de la PC.
Se requiere controlar la cantidad de pasos del motor p-p y el sentido de giro, esto
se logrará si controlamos la secuencia en la cual las bobinas del motor son
activadas. El motor que estamos utilizando es unipolar, es decir, de la siguiente
manera:
Motor unipolar
La secuencia de activación de los embobinados se hará de tal modo que se
aproveche al máximo el campo magnético generado por las bobinas sobre el rotor.
La secuencia que aprovecha mejor el campo generado por las bobinas es:
A
B
C
D
decimal
0
1
1
0
6
1
1
0
0
12
1
0
0
1
9
0
0
1
1
3
Cada vez que se hace cero (tierra) el extremo de una bobina esta está siendo
activada, la tabla anterior se puede entender mejor de la siguiente manera:
Para la secuencia: 0011 (3 decimal)
Como se nota se aprovecha al máximo el campo magnético porque se utilizan
simultáneamente dos bobinas.
Para controlar los bits de salida del puerto se requiere un programa capas de
comunicarse con el puerto para así poder controlarlo. Utilizamos el C++ y como
compilador al Turbo C++. Procedemos a diseñar el programa de a cuerdo a los
objetivos.
Para el giro derecha usamos la secuencia:
0110
1100
1001
0011
Para el giro a la izquierda usamos la secuencia:
0011
1001
1100
0110
Se nota que una secuencia es la simétrica de la otra, ya que lo único que se hace
es cambiar el orden en que se activan las bobinas para dar el efecto de giro
derecha y de giro izquierda.
Secuencia para giro derecha:
Que es lo mismo que:
06d
12d
09d
03d
06d
12d
09d
03d




0000 0110(2) (en binario)
0000 1100(2) (en binario)
0000 1001(2) (en binario)
0000 0011(2) (en binario)
La secuencia anterior que está en binario es lo que tiene que salir por el puerto
paralelo a nuestro motor p-p.
A continuación se muestra el código fuente con el que se controla el motor
Código fuente:
_________________________________________________________________
#include<iostream.h>
#include<conio.h>
#include<dos.h>
#include<ctype.h>
#include<graphics.h>
#define base 0x378
void main (void)
{
clrscr();
{int controlador= DETECT, modo = 0,x,y;
initgraph (& controlador,& modo, " ");
settextstyle (10,0,1);
setcolor (YELLOW);
outtextxy(115,30,"Control I - Laboratorio N§ 3");
settextstyle (10,0,1);
outtextxy(170,90,"MOTOR PASO A PASO");
settextstyle (3,0,4);
setcolor (RED);
outtextxy (25,175,"Alumnos: * Alfaro Trelles, Walker");
outtextxy (25,220,"
* Ortiz Pacheco, Elio");
outtextxy (25,265,"
* Usucachi Loayza, William");
setcolor (3);
outtextxy (236,360,"FIEE - UNAC");
outtextxy (280,390,"2009");
getch();
restorecrtmode();
}
clrscr();
int data[4],m,i,j,alfa,procede,key,REGRESO,OP,SALIR;
clrscr();
REGRESO:
gotoxy(180,150);cout<<"Elija el sentido del giro\n";
cout<<"-------------------------\n\n\n";
cout<<"1.- Giro DERECHA\n";
cout<<"2.- Giro IZQUIERDA\n";
cout<<"3.- SALIR\n\n"; cin>>OP;
if (OP==1)
{
clrscr();
cout<<"Ingrese la posicion angular final: ";cin>>alfa;
m = alfa/2.02;j=0;data[0]=6;data[1]=12;data[2]=9;data[3]=3;
for(i=0;i<m;i++)
{
clrscr();
gotoxy(35,2);cout<<"GIRANDO";
outport (base,data[j]);j=j+1;
if (j==4) j=0; else j=j; delay (30);
}
clrscr();
outport (base,0);
}
if (OP==2)
{
clrscr();
cout<<"Ingrese la posicion angular final: ";cin>>alfa;
m = alfa/2.02;j=0;data[0]=3;data[1]=9;data[2]=12;data[3]=6;
for(i=0;i<m;i++)
{
clrscr();
gotoxy(35,2);cout<<"GIRANDO";
outport (base,data[j]);j=j+1;
if (j==4) j=0; else j=j; delay (30);
}
clrscr();
outport (base,0);
}
if (OP==3) goto SALIR;
goto REGRESO;
SALIR:
}
_________________________________________________________________