entendiendo cómo se controla un motor con un L293D y una frambuesa pi

4

Vea actualización , la imagen del robot a continuación.

Así que hoy conecté un motor y lo hice girar con mi frambuesa pi y un L293D leyendo esto tutorial .

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

Funcionayestoymuyfeliz.Miobjetivofinalesentenderestoyconstruiralgoquepuedacontrolardosmotoresyestoypreparadoparaconstruirunpequeñobot:)

Misproblemas:

Sinomeequivocoenestecircuito,elpindehabilitacióndelaL293DestárecibiendounaseñalPWMparalavelocidaddelmotorquemaneja.

  1. Dela página de software ¿Puedo seguir lo que está haciendo el python pero no veo dónde dice que el pin 18 en la GPIO de frambuesa debería estar habilitado como PWM? Los docs dicen que Pin 12 es compatible con PWM ? ¿Cómo funciona esto?

  2. ¿Qué pasa si no me importa la velocidad? ¿Puedo usar un pin GPIO normal para obtener un alto rendimiento en la habilitación de la L293D? Con el Pi supongo que saldría un 3.3v? Y si estoy viendo la hoja de datos correcta , el pin de habilitación puede tomar hasta 7v como máximo ? (¿A qué velocidad se ejecutaría?)

  3. Otra vez, si no me importara el control de velocidad, podría conectar otro GPIO a la segunda habilitación y controlar otro motor también a la derecha. ¿Y entonces puedo controlar cada una de las direcciones?

Actualizar :

Gracias, @Passerby y @JImDearden lo hice funcionar. No PWM, pero solo dos motores. Como dice @Passerby, necesito tres GPIO para cada motor. Uno para habilitar / deshabilitar y dos para la dirección.

Esto es lo que hice :) Y está controlado por una red wifi (con una llave wifi conectada) El cable es solo un cable de alimentación USB :)

    
pregunta gideon

3 respuestas

2
  

Desde la página del software, puedo seguir lo que está haciendo Python, pero no veo dónde dice que el pin 18 en la GPIO de frambuesa debería estar habilitado como PWM. Los documentos dicen que Pin 12 es compatible con PWM? ¿Cómo funciona esto?

Al no conocer los detalles específicos de la biblioteca RPI GPIO que usa Adafruit, pero al mirar la página a la que se vincula, 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 de hardware RPI se habilita a través de esa biblioteca.

  

¿Qué pasa si no me importa la velocidad? ¿Puedo usar un pin GPIO normal para obtener un alto rendimiento en la habilitación de la L293D? Con el Pi supongo que saldría un 3.3v? ¿Y si estoy viendo la hoja de datos correcta, el pin de habilitación puede tomar hasta 7v como máximo? (¿A qué velocidad se ejecutaría?)

Sí, puedes hacer eso. Se ejecutaría al 100%, porque simplemente activaste el pin. El voltaje en el pin no es lo que establece la velocidad, sino simplemente la velocidad con la que se activa o desactiva el pin en un período de tiempo determinado. Al igual que encender y apagar un interruptor de luz lo suficientemente rápido como para que parezca que las luces están solo a la mitad.

  

También en este caso, si no me importara el control de velocidad, podría conectar otro GPIO a la segunda habilitación y controlar otro motor también a la derecha. ¿Y entonces puedo controlar cada una de las direcciones?

Sí, pero realmente necesitarías tres gpio para controlar ambas direcciones de un motor. 1 para la habilitación del motor (encendido / apagado) y 2 para la dirección del motor 2. Exactamente como está ahora, excepto sin pwm.

    
respondido por el Passerby
1
  1. Se puede hacer que cualquier pin de E / S de propósito general emita una señal PWM. Es simplemente una cuestión de encenderlo por un tiempo dado y luego apagarlo por el resto del período.

  2. Un ALTO continuo es como un PWM sin período de apagado, así que sí, el motor funcionará a toda velocidad. La velocidad del motor es una función de VOLTAJE DE SUMINISTRO y no del tamaño de la señal de habilitación. La alimentación del motor se toma de la batería (6V)

  3. Con el software adecuado (ver respuesta 1), podría operar un segundo motor y controlar la velocidad y la dirección

respondido por el JIm Dearden
1

Si bien puede producir una señal PWM desde 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 otra salida que no sea la salida de hardware PWM será de bajo rendimiento y / o impredecible. y cuanto mayor sea el rendimiento que intentes, más impredecible será. Para un control robótico estable desea que sea tan predecible como sea posible.

La biblioteca WiringPi parece ser compatible con la salida PWM del hardware en un pin GPIO y software PWM en cualquiera de los otros pines GPIO. Cuál de estos es adecuado para sus aplicaciones depende de cuántas salidas de PWM necesite y qué rendimiento desea obtener de esas salidas.

Si su aplicación es tolerante con una resolución de temporización baja y una alta fluctuación de fase , entonces puede usar un bucle de temporización de software. Si desea PWM de mayor precisión / menor jitter, entonces necesitará asistencia de hardware.

¿Cuándo podría ser adecuado el software PWM?

Si desea encender un montón de LED con diferentes cadencias humanas visibles (10 de hertz) con suave requisitos de respuesta en tiempo real, entonces el bucle de software podría manejar tantos PWM como pines GPIO (más con multiplexados).

¿Cuándo podría ser adecuado PWM de hardware?

Si desea controlar un servomotor con requisitos de respuesta difíciles en tiempo real , entonces Tendrá que usar el hardware PWM. Incluso entonces es posible que tenga problemas para garantizar una respuesta en tiempo real para el bucle de servo que vincula la entrada del codificador a la salida PWM.

Un servo loop necesita leer los encoders a una velocidad regular (bajo jitter), escriba PWM revisado los valores de salida a una velocidad regular y la latencia entre estos deben ser fijos (baja fluctuación de fase en general) o tendrá que afinar 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.

¿Qué sucede si necesito varias salidas PWM de hardware?

Si necesita ejecutar varios bucles de servo, es probable que deba descargarlos en otro dispositivo para garantizar un rendimiento en tiempo real, lo que hace que su Raspberry Pi sea un supervisor suave en tiempo real .

Una opción, sería algo como Adafruit PWM / Servo Driver de 16 bits y 12 bits - Interfaz I2C - PCA9685 que le permitiría controlar 16 salidas pwm con solo unos pocos pines de GPIO para el bus I2C. Para ver un ejemplo de su uso, consulte I2C 16 Channel PWM / Servo Breakout - Working post en los foros de Raspberry Pi.

Basado en mi respuesta en Raspberry Pi gracias a Alex Chamberlain por su respuesta

    
respondido por el Mark Booth

Lea otras preguntas en las etiquetas