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.salida() 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 )
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 DERECHO_MAX_ms = 2.5 def __init__( yo, alfiler ): yo.alfiler = alfiler yo.dudar = sbc.salida() yo.dudar.establecer_pwm( yo.alfiler, yo.FRECUENCIA_Hz, 0 ) def establecer_ángulo( yo, ángulo_grado ): deber_ms = yo.DUTY_MIN_ms + (yo.DERECHO_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 )
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.salida() 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" )
Continuo
>>> motor.establecer_velocidad( 100, -1 )
>>> hora.dormir( 1 )
>>> motor.establecer_velocidad( 0, 0 )