Motores paso a paso & driver TB6600

Tutorial que describe de forma completa y con vídios ilustrativos el controlador de motores paso a paso TB6600 y su conexión a diferentes microcontroladores y sistemas de desarrollo embebido

SISTEMAS EMBEBIDOS

Biblioman09

5/30/20243 min read

Introducción al control de motores paso a paso bipolares con el driver TB6600

Hace tiempo publique el siguiente vídeo de como controlar un motor paso a paso bipolar con el driver TB6600:

El código del ejemplo con arduino que utilice en su día es el siguiente:

int PUL = 7; // Pin para la señal de pulso
int DIR = 6; // Pin de dirección del motor
int EN = 5; // Pin Enable (no es imprescindible conectarlo)

void setup(){
pinMode(PUL, OUTPUT);
pinMode(DIR, OUTPUT);
pinMode(EN, OUTPUT);
digitalWrite(EN, HIGH);

}

void loop(){

digitalWrite(DIR, LOW);
for (int i=0; i < 1600; i++) // 1600 pasos sentido horario
{

digitalWrite(PUL, HIGH);
delayMicroseconds(400);
digitalWrite(PUL, LOW);
delayMicroseconds(400);
}
delay(100);
digitalWrite(DIR, HIGH);

for (int i=0; i < 1600; i++) // 1600 pasos sentido anti-horario
{
digitalWrite(PUL, HIGH);
delayMicroseconds(400);
digitalWrite(PUL, LOW);
delayMicroseconds(400);
}
}

Fue uno de los vídeos con mas visitas del canal, el siguiente vídeo es una continuación del anterior:

Código ESP32

int PUL=33; //pin para la señal de pulso

int DIR=32; //define pin de dirección

void setup() {

pinMode (PUL, OUTPUT);

pinMode (DIR, OUTPUT);

}

void loop() {

digitalWrite(DIR,LOW);

for (int i=0; i<1600; i++) //1600 pasos sentido horario

{

digitalWrite(PUL,HIGH);

delayMicroseconds(400);

digitalWrite(PUL,LOW);

delayMicroseconds(400);

}

delay(100);

digitalWrite(DIR,HIGH);

for (int i=0; i<1600; i++) //1600 pasos sentido anti horario

{

digitalWrite(PUL,HIGH);

delayMicroseconds(400);

digitalWrite(PUL,LOW);

delayMicroseconds(400);

}

}

Código en Python para la VisiónFive 2

"""
Conexion motor paso a paso
-----------------------------------------
_______Funcion_________Pin Number_____Pin Name
Pulso 22 GPIO50
Dir 40 GPIO44
Masa 34 GND
-----------------------------------------
"""

import time
import VisionFive.gpio as GPIO

dir = 40
pulso = 22

def initMotor():
# Set gpio modo 'BOARD'.
GPIO.setmode(GPIO.BOARD)

# Configuro los pines como salida.
GPIO.setup(pulso, GPIO.OUT)
GPIO.setup(dir, GPIO.OUT)
# Configuro a nivel alto el voltaje de salida.
GPIO.output(pulso, GPIO.HIGH)
# Configuro a nivel alto el pin de dirección.
GPIO.output(dir, GPIO.HIGH)

global p
# Configuro la frecuencia del motor a 500 Hz.
p = GPIO.PWM(pulso, 500)
# Inicializo el duty (Ton) al 50% de la señal
p.start(50)

def variar_velocidad():
dc = input("Introduce el valor de la frecuencia de la señal: ")
p.start(50)
p.ChangeFrequency(float(dc))
time.sleep(1)
print("Cambio de velocidad efectuado")

def giro_sentido_horario():
GPIO.output(dir, GPIO.HIGH)
p.start(50)
p.ChangeFrequency(500)
time.sleep(1)
print("Motor girando en sentido horario")

def giro_sentido_anti_horario():
GPIO.output(dir, GPIO.LOW)
p.start(50)
p.ChangeFrequency(500)
time.sleep(1)
print("Motor girando en sentido horario")

def parar_motor():
p.start(0)
print("Motor detenido")

def mostrar_menu():
print("\n--- Menu ---")
print("1) Giro horario")
print("2) Giro anti_horario")
print("3) Variar velocidad")
print("4) Parar motor")
print("5) Salir de la aplicación")

if name == "__main__":

initMotor()

while True:
mostrar_menu()
opcion = input("Elige una opción: ")

if opcion == '1':
giro_sentido_horario()
elif opcion == '2':
giro_sentido_anti_horario()
elif opcion == '3':
variar_velocidad()
elif opcion == '4':
parar_motor()
elif opcion == '5':
print("Saliendo de la aplicación...")
break
else
:
print("Opción no valida. Por favor, elige una opción valida.")