Conecte diferentes motores a su SBC

En este tutorial veremos cómo conectar los tipos de motores más comunes al SBC. También le mostraremos cómo manejarlos con algunos ejemplos. Los tipos de motores más comunes son:

  • Los motores de CC son baratos y fáciles de controlar, solo se necesita una salida de potencia y esta se puede activar con una señal PWM.

  • Los servomotores son similares a los motores de CC, pero incluyen una pequeña electrónica y un potenciómetro interno para formar un circuito de control cerrado, lo que permite controlar el ángulo de rotación. El control también es por PWM, pero en este caso la señal de control es de baja potencia y la etapa de potencia está integrada en el propio servomotor.

  • Los motores paso a paso tienen varios devanados y requieren una secuencia para ser controlados, pero a cambio brindan una gran precisión ya que avanzan paso a paso cada vez que se invierte la polaridad de sus devanados.

1. Motores de corriente continua

Para controlar un motor DC, lo conectaremos al SBC como se indica en el siguiente esquema:

Necesitaremos conocer algunos parámetros de nuestro motor, en concreto la relación entre los voltios aplicados y la velocidad del motor o Kv.

La clase Dc_Motor representa el motor de CC, controlado por un PWM a 50 Hz. Como se puede observar, se deben proporcionar algunos parámetros, como el voltaje de alimentación y la constante Kv, así como el pin a utilizar. A cambio obtenemos dos funciones: set_voltage y set_speed.

 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
clase Motor de corriente continua: FRECUENCIA_Hz = 50
    def __init__( yo, pin, vm, kv ):
        yo.vm = vm
        yo.kv = kv
        yo.alfiler = alfiler
        yo.dudar = sbc.Dout()
        yo.dudar.establecer_pwm( yo.alfiler, yo.FRECUENCIA_Hz, 0 )
        yo.establecer_voltaje( 0 )
    
    def establecer_voltaje( yo, v ): pulso_porcentaje_encendido = 100*v/yo.vm
        yo.dudar.establecer_pwm( yo.alfiler, yo.FRECUENCIA_Hz, 100-pulse_percent_on )
    
    def velocidad fijada( yo, rpm ):
        yo.establecer_voltaje(rpm/yo.kv)

Un ejemplo de uso sería el siguiente:

>>> tiempo de importación
>>> importar sbc_mtr
>>> motor = sbc_mtr.Dc_Motor( "DOUT3", vm=12, kv=0.5 )
>>> imprimir( "Control de voltaje" )
Control de tensión
>>> motor.configurar_voltaje( 6 )
>>> hora.dormir( 1 )
>>> motor.configurar_voltaje( 0 )
>>> imprimir( "Control de velocidad" )
Control de velocidad
>>> motor.establecer_velocidad( 100 )
>>> hora.dormir( 1 )
>>> motor.establecer_velocidad( 0 )

2. Servomotores

El servomotor utiliza un solo pin de control para controlar el ángulo de rotación de un motor.

 El código de la clase Servo_Motor:

 1 2 3 4 5 6 7 8 9 10 11 12 13 14
clase Servo motor: FRECUENCIA_Hz = 50
    DUTY_MIN_ms = 0.5
    DUTY_MAX_ms = 2.5
    
    def __init__( yo, alfiler ):
        yo.alfiler = alfiler
        yo.dudar = sbc.Dout()
        yo.dudar.establecer_pwm( yo.alfiler, yo.FRECUENCIA_Hz, 0 )
        
    def establecer_ángulo( yo, ángulo_grado ): deber_ms = yo.DUTY_MIN_ms + (yo.DUTY_MAX_ms-yo.DUTY_MIN_ms)*ángulo_deg/ 180
        pulse_percent_on = yo.FRECUENCIA_Hz*deber_ms/ 10
        yo.dudar.establecer_pwm( yo.alfiler, yo.FRECUENCIA_Hz, 100-pulse_percent_on )

Y un ejemplo de uso:

>>> tiempo de importación
>>> importar sbc_mtr
>>> motor = sbc_mtr.Servo_Motor( "DOUT3" )
>>> print("Ajuste el ángulo a 90 grados" )
Ajuste el ángulo a 90 grados
>>> motor.establecer_ángulo( 90 )
>>> hora.dormir( 1 )
>>> print("Ajuste el ángulo a 0 grados" )
Ajuste el ángulo a 0 grados
>>> motor.establecer_ángulo( 0 )

3. Motores paso a paso

Para conectar un motor paso a paso seguiremos un esquema similar al de la figura:

El código de la clase Stepper_Motor es básicamente una máquina de estado que implementa la tabla que se muestra arriba.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
clase Motor paso a paso:
   
    def __init__( yo, alfileres):
        yo.patas = patas
        yo.dudar = sbc.Dout()
        yo.estado = 0
        yo.pasos = 0
        yo.dir = 1
        yo.minutero = máquina.Temporizador( -1 )
    
    def paso( yo, dirección ):
        if( yo.estado == 0 ):
            yo.dudar.escribir( yo.patas[0], 1 )
            yo.dudar.escribir( yo.patas[1], 1 )
            yo.dudar.escribir( yo.patas[2], 0 )
            yo.dudar.escribir( yo.patas[3], 0 )
        elif( yo.estado == 1 ):
            yo.dudar.escribir( yo.patas[0], 0 )
            yo.dudar.escribir( yo.patas[1], 1 )
            yo.dudar.escribir( yo.patas[2], 1 )
            yo.dudar.escribir( yo.patas[3], 0 )
        elif( yo.estado == 2 ):
            yo.dudar.escribir( yo.patas[0], 0 )
            yo.dudar.escribir( yo.patas[1], 0 )
            yo.dudar.escribir( yo.patas[2], 1 )
            yo.dudar.escribir( yo.patas[3], 1 )
        elif( yo.estado == 3 ):
            yo.dudar.escribir( yo.patas[0], 1 )
            yo.dudar.escribir( yo.patas[1], 0 )
            yo.dudar.escribir( yo.patas[2], 0 )
            yo.dudar.escribir( yo.patas[3], 1 )
        yo.pasos += dirección
        yo.estado = (yo.estado + dirección) & 0x03
    
    def velocidad fijada( yo, pasos_s, dirección ):
        if(pasos_s y dirección ):
            yo.minutero.init(punto=int(1000 /pasos_s), modo=máquina.Minutero.PERIÓDICO, devolución de llamada=lambda tmr: yo.paso (dirección))
        más:
            yo.minutero.definición()

Por último, un ejemplo de uso:

>>> tiempo de importación
>>> importar sbc_mtr
>>> motor = sbc_mtr.Stepper_Motor( ["DOUT1", "DOUT2", "DOUT3", "DOUT4"] )
>>> imprimir("Paso a paso" )
Paso a paso
>>> para i en el rango (100):
... motor.paso( 1 )
... tiempo.sleep_ms( 10 )
>>> imprimir( "Continuo" )
ASESORIA CONTINUA
>>> motor.establecer_velocidad( 100, -1 )
>>> hora.dormir( 1 )
>>> motor.establecer_velocidad( 0, 0 )

¿Quieres saber más sobre GPS/RTK?

1. Nuestro equipo de ingeniería se pondrá en contacto contigo para resolver cualquier duda
2. Lo mantendremos informado sobre promociones y lanzamientos de nuevos productos.
3. Solo sabrá de nosotros cuando tengamos noticias importantes, no enviaremos spam a su correo electrónico.