/******************************************************************************** PPI_10.CPP: (motor paso a paso de 6 hilos - control paso completo)
El programa permite controlar a través de un PPI el avance en sentido horario o antihorario pulsando las teclas (D)erecha e (I)zquierda.
Los valores digitales a enviarse al motor son 10, 9, 5 y 6 para giro horario y 6, 5, 9 y 10 para giro antihorario. Se sale del programa cuando se pulsa ESC.
Descripción:
a) Conecte con un cable flat los 4 bits menos significativos del PA del PPI con las entradas al driver L293D.
b) Las salidas del driver irán a las bobinas del motor de paso. c) Escriba el programa en Visual C++ (modo consola)
d) Compile (Ctrl + F7) -> Build (F7) -> Execute program (Ctrl + F5) Autor: Ing. Javier Barriga Hoyle
********************************************************************************/ #include <windows.h>
#include <stdio.h> #include <conio.h>
#include "BymWin.h" // Librería usada por la tarjeta LPT V2.0
int Base = 0x378; // Dirección base del puerto paralelo
/* Variables globales */
unsigned char Giro[4]={10,9,5,6}; // Valores de activación de las bobinas unsigned char car;
int i, fin, sentido;
/* Inicia programa principal */ void main (void)
{
inicio_tarjeta(); // Inicializa Tarjeta de interfase LPT V2.0
xout(0x7B,0x80); // Configura PPI, PA=PB=PC=salidas
i = 0; // Inicializa variables
fin = 0; sentido = 1;
printf ("\n********* CONTROL DE UN MOTOR PAP *********\n"); printf (" (Modo: paso completo)\n");
printf ("\nGIRO A LA DERECHA ... : pulse (D)\n"); printf ("\nGIRO A LA IZQUIERDA ... : pulse (I)\n"); printf ("\nPARA SALIR DEL PROGRAMA ... : pulse (ESC)\n\n"); while(!fin)
{
car = getch();
if(car == 27) fin = 1; // Si es ESC, sale del programa
if(car == 'D') sentido = 1; // Gira a la derecha if(car == 'd') sentido = 1;
if(car == 'I') sentido = 0; // Gira a la izquierda if(car == 'i') sentido = 0;
if(sentido) {
xout(0x78, Giro[i]); // Envía dato al PA del PPI, derecha
i++; if(i>3) i=0; } else { i--; if(i<0) i=3;
xout(0x78, Giro[i]); // Envía dato al PA del PPI, izquierda
} } }
Programa 10.11: (PPI_11.CPP) Control de un motor de paso en modo medio paso (figura 10.13).
/******************************************************************************** PPI_11.CPP: (motor paso a paso de 6 hilos - control medio paso)
El programa permite controlar a través de un PPI el avance en sentido horario o antihorario pulsando las teclas (D)erecha e (I)zquierda.
Los valores digitales a enviarse al motor son 10,8,9,1,5,4,6,2 para giro horario y 2,6,4,5,1,9,8,10 para giro antihorario. Se sale del programa cuando se pulsa ESC.
Descripción:
a) Conecte con un cable flat los 4 bits menos significativos del PA del PPI con las entradas al driver L293D.
b) Las salidas del driver irán a las bobinas del motor de paso. c) Escriba el programa en Visual C++ (modo consola)
d) Compile (Ctrl + F7) -> Build (F7) -> Execute program (Ctrl + F5) Autor: Ing. Javier Barriga Hoyle
********************************************************************************/ #include <windows.h>
#include <stdio.h> #include <conio.h>
#include "BymWin.h" // Librería usada por la tarjeta LPT V2.0
int Base = 0x378; // Dirección base del puerto paralelo
/* Variables globales */
unsigned char Giro[8]={10,8,9,1,5,4,6,2}; // Valores para las bobinas unsigned char car;
int i, fin, sentido;
/* Inicia programa principal */ void main (void)
{
inicio_tarjeta(); // Inicializa Tarjeta de interfase LPT V2.0
xout(0x7B,0x80); // Configura PPI, PA=PB=PC=salidas
i = 0; // Inicializa variables
fin = 0; sentido = 1;
printf ("\n********* CONTROL DE UN MOTOR PAP *********\n"); printf (" (Modo: medios pasos)\n");
printf ("\nGIRO A LA DERECHA ... : pulse (D)\n"); printf ("\nGIRO A LA IZQUIERDA ... : pulse (I)\n"); printf ("\nPARA SALIR DEL PROGRAMA ... : pulse (ESC)\n\n"); while(!fin){
car = getch();
if(car == 27) fin = 1; // Si es ESC, sale del programa
if(car == 'D') sentido = 1; // Gira a la derecha if(car == 'd') sentido = 1;
if(car == 'I') sentido = 0; // Gira a la izquierda if(car == 'i') sentido = 0;
if(sentido){
xout(0x78, Giro[i]); // Envía dato al PA del PPI, derecha
i++; if(i>7) i=0; } else{ i--; if(i<0) i=7;
xout(0x78, Giro[i]); // Envía dato al PA del PPI, izquierda
} } }
Programa 10.12: (PPI_12.CPP) Control de un motor de paso en modo una sola bobina (figura
10.13).
/******************************************************************************** PPI_12.CPP: (motor paso a paso de 6 hilos - control una sola bobina)
El programa permite controlar a través de un PPI el avance en sentido horario o antihorario pulsando las teclas (D)erecha e (I)zquierda.
Los valores digitales a enviarse al motor son 8,1,4,2 para giro horario y 2,4,1,8 para giro antihorario. Se sale del programa cuando se pulsa ESC.
Descripción:
a) Conecte con un cable flat los 4 bits menos significativos del PA del PPI con las entradas al driver L293D.
b) Las salidas del driver irán a las bobinas del motor de paso. c) Escriba el programa en Visual C++ (modo consola)
d) Compile (Ctrl + F7) -> Build (F7) -> Execute program (Ctrl + F5) Autor: Ing. Javier Barriga Hoyle
********************************************************************************/ #include <windows.h>
#include <stdio.h> #include <conio.h>
#include "BymWin.h" // Librería usada por la tarjeta LPT V2.0
int Base = 0x378; // Dirección base del puerto paralelo
/* Variables globales */
unsigned char Giro[4]={8,1,4,2}; unsigned char car;
int i, fin, sentido;
/* Inicia programa principal */ void main (void)
{
inicio_tarjeta(); // Inicializa Tarjeta de interfase LPT V2.0
xout(0x7B,0x80); // Configura PPI, PA=PB=PC=salidas
i = 0; // Inicializa variables
fin = 0; sentido = 1;
printf ("\n********* CONTROL DE UN MOTOR PAP *********\n"); printf (" (Modo: una sola bobina por vez)\n");
printf ("\nGIRO A LA DERECHA ... : pulse (D)\n"); printf ("\nGIRO A LA IZQUIERDA ... : pulse (I)\n"); printf ("\nPARA SALIR DEL PROGRAMA ... : pulse (ESC)\n\n"); while(!fin){
car = getch();
if(car == 27) fin = 1; // Si es ESC, sale del programa
if(car == 'D') sentido = 1; // Gira a la derecha if(car == 'd') sentido = 1;
if(car == 'I') sentido = 0; // Gira a la izquierda if(car == 'i') sentido = 0;
if(sentido){
xout(0x78, Giro[i]); // Envía dato al PA del PPI, derecha
i++; if(i>3) i=0; } else { i--; if(i<0) i=3;
xout(0x78, Giro[i]); // Envía dato al PA del PPI
} } }
Programa 10.13: (PPI_13.CPP) Control de la velocidad de un motor de paso en modo paso
completo (figura 10.13).
/******************************************************************************** PPI_13.CPP:(motor paso a paso de 6 hilos - control de velocidad en paso completo) El programa permite controlar a través de un PPI el avance en sentido horario o antihorario pulsando las teclas (D)erecha e (I)zquierda.
También podemos aumentar o disminuir la velocidad en cualquier sentido.
Los valores digitales a enviarse al motor son 8,1,4,2 para giro horario y 2,4,1,8 para giro antihorario.
Se sale del programa cuando se pulsa ESC. Descripción:
a) Conecte con un cable flat los 4 bits menos significativos del PA del PPI con las entradas al driver L293D.
b) Las salidas del driver irán a las bobinas del motor de paso. c) Escriba el programa en Visual C++ (modo consola)
d) Compile (Ctrl + F7) -> Build (F7) -> Execute program (Ctrl + F5) Autor: Ing. Javier Barriga Hoyle
********************************************************************************/ #include <windows.h>
#include <stdio.h> #include <conio.h>
#include "BymWin.h" // Librería usada por la tarjeta LPT V2.0
int Base = 0x378; // Dirección base del puerto paralelo
/* Prototipos */
void velocidad (int x); // Controla velocidad del motor
/* Variables globales */
unsigned char GiroCo[8]={10,9,5,6,10,9,5,6}; // Paso completo
int Veloci[8]={1500,1200,900,600,300,200,100,50}; // max=50, min=1500 unsigned char car;
int i,v,fin,vel,tecla,sentido; /* Inicia programa principal */ void main (void)
{
inicio_tarjeta(); // Inicializa Tarjeta de interfase LPT V2.0
xout(0x7B,0x80); // Configura PPI, PA=PB=PC=salidas
i = 0; // Inicializa variables
fin = 0;
v = 0; // Variable para la velocidad
sentido = 1;
printf ("\n****** CONTROL DE VELOCIDAD DE UN MOTOR PAP ******\n"); printf (" (Modo: paso completo)\n");
printf ("\nGIRO A LA DERECHA ... : pulse (D)\n"); printf ("\nGIRO A LA IZQUIERDA ... : pulse (I)\n"); printf ("\nAUMENTO DE VELOCIDAD ... : pulse (A)\n"); printf ("\nDISMINUYE VELOCIDAD ... : pulse (Z)\n"); printf ("\nPARA SALIR DEL PROGRAMA ... : pulse (ESC)\n\n"); while(!fin)
{
tecla = 0; car = getch();
car = toupper(car); // Convierte a mayúscula
if(car == 27) {
tecla = 1; }
if(car == 'D') sentido = 1; // Gira a la derecha if(car == 'I') sentido = 0; // Gira a la izquierda if(car == 'A') { v++; // Aumenta velocidad if(v>7) v=7; } if(car == 'Z') { v--; // Disminuye velocidad if(v<0) v=0; }
vel = Veloci[v]; // Retorna factor de velocidad
while(!tecla) {
if(sentido) {
xout(0x78, GiroCo[i]); // Envía dato al PA del PPI
velocidad(vel); // Llama a retardo de velocidad
i++; if(i>7) i=0; } else { i--; if(i<0) i=7;
xout(0x78, GiroCo[i]); // Envía dato al PA del PPI
velocidad(vel); // Llama a retardo de velocidad
} if (kbhit()) tecla=1; } } } /* Fin de main */ void velocidad(int x) { int m, n, p; p = x; for(m=0; m<=p; m++) {
for(n=0; n<=20000; n++); // Bucle de retardo }