4 votos

entender cómo se controla un motor con un L293D y una raspberry pi

Ver actualización imagen del robot que aparece a continuación.

Pues hoy he conectado un motor y lo he hecho girar con mi raspberry pi y un L293D leyendo esto tutorial .

Este es el aspecto del circuito ( imágenes más grandes ):

Controlling motor with RPi

Funciona y estoy bastante contento. Mi objetivo final es entender esto y construir algo que pueda controlar dos motores y estoy listo para construir un pequeño bot :)

Mis problemas:

Si no me equivoco en este circuito, el pin de habilitación del L293D está recibiendo una señal PWM para la velocidad del motor que acciona.

  1. Desde el página de software Puedo seguir lo que hace el python pero no veo donde dice que el pin 18 del GPIO de la frambuesa debe estar habilitado como PWM? El docs dicen que El pin 12 soporta PWM ? ¿Cómo funciona esto?

  2. ¿Y si no me importara la velocidad? ¿Puedo utilizar un pin GPIO normal para la salida de un alto en la habilitación de la L293D? Con el Pi asumo que saldría un 3.3v? Y si estoy mirando el hoja de datos correcta ¿el pin de habilitación puede tomar hasta 7v como alto? (¿A qué velocidad funcionaría?)

  3. Además, si no me importa el control de la velocidad, podría conectar otro GPIO a la segunda habilitación y controlar otro motor también derecho. ¿Y puedo entonces controlar cada una de sus direcciones?


Actualización :

Gracias @Passerby y @JImDearden he conseguido que funcione. Sin PWM, pero con dos motores. Como dice @Passerby, necesito tres GPIO's para cada motor. Uno para activar/desactivar y dos para la dirección.

Esto es lo que he hecho :) Y es controlado por la red wifi (con un dongle wifi conectado) El cable es sólo un cable de alimentación USB :)

Pi Tri wheel robot

6voto

l0b0 Puntos 218

Mientras que usted puede producir una señal PWM de cualquiera de los pines GPIO, el hecho de que la Raspberry Pi no está ejecutando un sistema operativo en tiempo real significa que el uso de cualquier cosa que no sea las salidas PWM de hardware será de bajo rendimiento y / o impredecible, y el mayor rendimiento que intenta para el más impredecible será. Para un control robótico estable quieres que sea lo más predecible posible.

El WiringPi parece soportar tanto la salida PWM por hardware en un pin GPIO como software PWM en cualquiera de los otros pines GPIO. Cuál de ellos es el adecuado para tus aplicaciones depende de cuántas salidas PWM necesites y del rendimiento que quieras obtener de esas salidas.

Si su aplicación tolera una baja resolución de tiempo y una alta jitter entonces podrías utilizar un bucle de sincronización por software. Si quieres una mayor precisión / menor jitter PWM entonces necesitarás asistencia de hardware.

¿Cuándo puede ser adecuado el PWM por software?

Si quieres hacer parpadear un montón de LEDs con diferentes cadencias visibles para el ser humano (10's de hertz) con tiempo real suave entonces el bucle de software podría manejar tantos PWM's como pines GPIO tenga (más con multiplexores).

¿Cuándo puede ser adecuado el PWM por hardware?

Si quieres controlar un servomotor con duro en tiempo real entonces tendrá que utilizar el PWM por hardware. Incluso entonces puede tener problemas para garantizar una respuesta en tiempo real para el bucle de servo que vincula la entrada del codificador a la salida PWM.

Un establo bucle de servo necesita leer los codificadores a un ritmo regular (baja fluctuación), escribir los valores de salida PWM revisados a un ritmo regular y la latencia entre estos debe ser fija (baja fluctuación en general) o tendrá que subajustar su motor para evitar que se vuelva inestable bajo carga. Esto es difícil de hacer con un sistema operativo multitarea sin soporte de bajo nivel.

¿Y si necesito varias salidas PWM por hardware?

Si necesita ejecutar múltiples bucles de servo, entonces probablemente va a tener que descargarlos a otro dispositivo para asegurar el rendimiento en tiempo real duro, relegando su Raspberry Pi a ser un tiempo real suave supervisor .

Una opción, sería algo como el Adafruit 16-Channel 12-bit PWM/Servo Driver - I2C interface - PCA9685 que le permitiría controlar 16 salidas pwm con sólo unos pocos pines de GPIO para el bus I2C. Para un ejemplo de su uso, mira el I2C 16 Channel PWM/Servo Breakout - Funcionando en los foros de Raspberry Pi.

Basado en <a href="https://raspberrypi.stackexchange.com/a/304/141">mi respuesta en Raspberry Pi </a>gracias a <a href="https://raspberrypi.stackexchange.com/a/305/141">Alex Chamberlain por su respuesta</a>

2voto

Passerby Puntos 28913

Desde la página del software puedo seguir lo que hace el python pero no veo donde dice que el pin 18 del GPIO de la frambuesa debe estar habilitado como PWM? Los docs dicen que el pin 12 soporta PWM ? ¿Cómo funciona esto?

Sin conocer los detalles del RPI GPIO Library que utiliza Adafruit, pero mirando la página que enlazas, la habilita con set("mode", "pwm") . Como dice, The Python program first sets-up the two GPIO pins to be outputs. It then defines the same convenience function (“set”) that we used in Lesson 8, to write to the PWM Kernel Module. This is then used to set the parameters for PWM. El PWM por hardware de RPI se habilita a través de esa biblioteca.

¿Y si no me importara la velocidad? ¿Puedo utilizar un pin GPIO normal para la salida de un alto en la habilitación de la L293D? Con el Pi asumo que saldría un 3.3v? Y si estoy mirando la hoja de datos correcta el pin de habilitación puede tomar hasta 7v como un alto? (¿A qué velocidad funcionaría?)

Sí, puedes hacerlo. Funcionaría al 100%, porque simplemente has activado el pin. El voltaje en el pin no es lo que establece la velocidad, sino simplemente lo rápido que apagas o enciendes el pin en un periodo de tiempo determinado que lo hace. Como encender y apagar un interruptor de luz lo suficientemente rápido como para que parezca que las luces están encendidas a medias.

Además, de nuevo, si no me importara el control de la velocidad, podría enganchar otro GPIO al segundo enable y controlar otro motor también correcto. ¿Y puedo entonces controlar cada una de las direcciones?

Sí, pero en realidad necesitarías tres gpio para controlar las dos direcciones de un motor. 1 para la habilitación del motor (on/off), y 2 para la dirección del motor 2. Exactamente como es ahora, excepto sin pwm.

1voto

JIm Dearden Puntos 11666
  1. Cualquier pin de E/S de propósito general puede convertirse en la salida de una señal PWM, simplemente es cuestión de ponerlo en ON durante un tiempo determinado y luego en OFF durante el resto del periodo.

  2. Un HIGH continuo es como un PWM sin periodo de OFF, así que sí, el motor funcionará a toda velocidad. La velocidad del motor es una función de la TENSIÓN DE SUMINISTRO y no del tamaño de la señal de habilitación. La alimentación del motor se toma del paquete de baterías (6V)

  3. Con el software adecuado (véase la respuesta 1) se podría manejar un segundo motor y controlar tanto la velocidad como la dirección

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X