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: } _________________________________________________________________