• No results found

National Grids: Past and Present

/******************************************************************************** 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 }

11.

Aplicaciones del TIMER 82C54

Para hacer uso del TIMER de la Tarjeta LPT ByM V2.0, tiene que entender en primer lugar como

Related documents