'************************************************************************ '* Programa para manejar cuatro motores paso a paso * '* unipolar de 4 fases con interfaz para puerto paralelo * '* * '* Conexiones: * '* Ver plano 4stepper.sch * '* * '* * '************************************************************************ OUT 888, 0 'inicilizo el puerto DIM status(4) status(1) = 3 'inicializo variables para los pasos status(2) = 6 status(3) = 12 status(4) = 9 paso = 1 'inicializo variable PASO DIM quemotor(4, 2) quemotor(1, 1) = 16 'inicializo variables para quemotor(1, 2) = 15 'usar con el trigger quemotor(2, 1) = 32 quemotor(2, 2) = 31 quemotor(3, 1) = 64 quemotor(3, 2) = 63 quemotor(4, 1) = 128 quemotor(4, 2) = 127 '******************************************************************* '* Inicio del programa * '******************************************************************* motor: CLS PRINT PRINT PRINT "Indique el motor que desea mover (1 a 4)" PRINT PRINT "Pulse 9 para salir del programa" PRINT INPUT motor IF motor = 9 THEN OUT 888, 0 OUT 888, 240 'paro el motor FOR z = 1 TO 100 'delay NEXT z OUT 888, 0 END 'salgo del programa ELSEIF motor < 1 OR motor > 4 THEN GOTO motor END IF direccion: CLS PRINT PRINT PRINT "Presione 1 para mover a la Izquierda" PRINT "Presione 2 para mover a la derecha" PRINT PRINT "Pulse 9 para volver al principio" PRINT INPUT direccion IF direccion = 9 THEN GOTO motor ELSEIF direccion < 1 OR direccion > 2 THEN GOTO direccion END IF PRINT PRINT PRINT PRINT "Indique la cantidad de pasos a mover" PRINT INPUT numpasos '******************************************************************** '* Inicio secuencia de manejo del motor seleccionado * '******************************************************************** SELECT CASE direccion CASE 1 'Giro a la izquierda FOR lospasos = 0 TO numpasos GOSUB DelayPasos ' *********************************************** ' Secuencia para girar un paso a la izquierda ' *********************************************** IF paso = 4 THEN paso = 1 ELSE paso = paso + 1 END IF OUT 888, status(paso) 'coloca el valor en el port 'de salida (TTL0 a TTL3) ' **************************************************************** ' Secuencia de disparo del Flip-Flop correspondiente (IC1 a IC4) ' **************************************************************** trigger = status(paso) OR quemotor(motor, 1) OUT 888, trigger FOR z = 1 TO 100 'delay para el disparo NEXT z trigger = status(paso) AND quemotor(motor, 2) OUT 888, trigger NEXT lospasos 'vuelvo para hacer el siguiente paso GOTO motor 'si termino entonces regreso CASE 2 'giro a la derecha FOR lospasos = 0 TO numpasos GOSUB DelayPasos ' *********************************************** ' Secuencia para girar un paso a la izquierda ' *********************************************** IF paso = 1 THEN paso = 4 ELSE paso = paso - 1 END IF OUT 888, status(paso) ' **************************************************************** ' Secuencia de disparo del Flip-Flop correspondiente (IC1 a IC4) ' **************************************************************** trigger = status(paso) OR quemotor(motor, 1) OUT 888, trigger FOR z = 1 TO 100 'delay para el disparo NEXT z trigger = status(paso) AND quemotor(motor, 2) OUT 888, trigger NEXT lospasos 'voy a dar otro paso GOTO motor 'si ya termoino entonces regreso CASE ELSE GOTO motor END SELECT GOTO motor 'vuelvo para empezar ' ****************************************************************** ' Delay entre pasos, este valor es muy importante ya que regula ' la velocidad del motor. Si es muy bajo el motor fallar . ' Si la PC usada es lenta, entonces ir reduciendo el valor (30000) ' poco a poco hasta alcanzar la velocidad deseada ' ******************************************************************* DelayPasos: FOR z = 1 TO 30000 'delay entre pasos NEXT z RETURN ' ****************************************************************** ' ******************************************************************