Me gustaría controlar un pequeño servo RC (5 V, 500 mA) desde los pines GPIO a través de Python .
Hardware
- ¿Cuáles son las conexiones eléctricas requeridas?
- ¿Puedo conectar varios servos a la Raspberry Pi?
- ¿Hay alguna limitación actual? ¿Necesito proteger el pin de salida con un transistor?
- ¿Puedo alimentar el servo directamente desde la Raspberry Pi o debo usar una fuente de alimentación externa? ¿Necesito un condensador para suavizar el consumo de energía desigual del servo?
Software
- ¿Qué software / código de Python necesito? Sé que necesito pulsos de 20 ms, ¿cómo puedo lograr esto?
- ¿Qué tipo de carga de CPU puedo esperar al usar Raspberry Pi de esta manera?
Respuestas:
Las conexiones eléctricas requeridas dependen del servo que tenga. El GPIO proporciona 3.3 V y hasta 16 mA , lo cual es insuficiente para su servo, por lo que deberá protegerlo con un transistor.
Hay 8 pines GPIO en el encabezado de expansión , aunque se pueden reconfigurar otros pines para dar hasta 17 pines GPIO en total. Si necesita más, tendrá que agregar algún tipo de multiplexor.
Obtener señales cronometradas con precisión será complicado en Raspberry Pi o en cualquier sistema operativo que no sea en tiempo real, ya que las interrupciones y los cambios de tareas pueden ocurrir en cualquier momento. Probablemente necesitará componentes electrónicos externos para proporcionar señales temporizadas con precisión.
Andrew te ha señalado algún software. La carga de la CPU dependerá de lo que esté haciendo, pero el GPIO en sí no agrega ninguna carga.
fuente
Si está ejecutando un sistema operativo en tiempo real en su Raspberry Pi, esto es realmente posible. Como ya han dicho otros, necesitará una fuente de alimentación externa para los servos, pero a excepción de eso, no necesita ningún otro hardware adicional.
Si está ejecutando Xenomai (parche en tiempo real para Linux) puede ejecutar un sistema Linux completamente familiar, pero con capacidades adicionales en tiempo real.
He escrito una pequeña biblioteca C con el propósito de controlar servos desde la Raspberry Pi. He intentado controlar 3 servos al mismo tiempo, pero realmente no hay ninguna razón por la que no debería funcionar con más.
Puede encontrar mi pequeña biblioteca aquí: https://github.com/simonfi/pi-servo Agregar un envoltorio de Python para ello debería ser trivial. Xenomai para Raspberry Pi se puede encontrar aquí: http://powet.eu/2012/07/25/raspberry-pi-xenomai/
Generar las señales necesarias para tres servos está básicamente consumiendo una cantidad insignificante de CPU. No he probado con más de tres todavía.
fuente
Si no le importa usar un controlador de kernel de Linux, hay un servoblaster que expone los servos como un dispositivo char.
https://github.com/richardghirst/PiBits
He bifurcado una nueva versión que no consume todos los pines gpio para el uso de servos. Actualmente lo estoy usando en un pequeño robot servo impulsado por el que construí y demostré para nuestro club de robots usando IPGamePad para controlarlo.
https://github.com/jronald/PiBits
Además, realmente no desea la potencia de los servos a través del RPI, sino que utiliza una fuente de alimentación separada. Por supuesto, necesitas unir esos motivos. Dado que las salidas RPI al servo no se requieren cambios de voltaje, pero debe tener mucho cuidado de no cablear las cosas incorrectamente.
fuente
Los servos son, en general, controlados utilizando señales PWM; debe referirse a GPIO como salida PWM .
Hay soporte PWM en el chip, por lo que deberíamos poder usarlo en el futuro. Básicamente, todo lo que hace el software es decirle al hardware que produzca pulsos a una frecuencia determinada. Algunas personas han tenido éxito usando controladores PWM externos sobre I2C.
fuente
Hay una placa de extensión disponible para la Raspberry Pi llamada Gertboard que se usa para controlar servos y otras cargas que la Pi no puede manejar por sí misma.
fuente
El conocimiento de cómo hacer las cosas en el Pi ha mejorado bastante en los años transcurridos desde que se hizo esta pregunta.
Hay al menos cuatro formas de generar pulsos PWM / Servo temporizados por hardware en los gpios de Pi sin usar hardware externo.
El uso de módulos de kernel para hacer esto es bastante obsoleto. Las siguientes soluciones de usuario están disponibles.
fuente
Me sorprendería si puede cronometrar las salidas lo suficientemente bien mientras ejecuta Linux para controlar con precisión un servo.
El pulso debe controlarse en un rango de 2 milisegundos. Incluso si la marca del planificador tiene una resolución de 100us (que la está presionando, generalmente es de 10 ms), solo puede resolver 20 pasos. Y eso sin tener en cuenta la inquietud introducida por el cambio de tareas.
Si hay otro temporizador disponible, podría escribir un controlador de muy bajo nivel que pueda adelantarse incluso al sistema operativo para que su sincronización sea precisa. ¡Suena divertido!
fuente
Creo que tratar de ejecutar un servo directamente desde el puerto GPIO sería difícil y causaría una sobrecarga de la CPU si es posible. Utilizo un servocontrolador USB y funciona muy bien y casi no usa CPU, aunque es un poco complicado de configurar. El que tengo es de 24 canales, pero hacen una versión de 6 canales. También he visto controladores de 2 y 4 canales de otros proveedores que usan serie que sería más fácil y más barato que USB si no necesita controlar tantos servos.
fuente
Hay un servicio web GPIO en pleno funcionamiento para el que puede escribir sus propios complementos. Parece que ya tiene soporte para controlar cualquier número de servos. Vea su directorio de "Contenido" para ver un montón de imágenes y también para el diseño del tablero.
https://bitbucket.org/PaulTechGuy/raspberrypi.dotnet.gpioweb
Parece estar en C # ejecutando Mono en el Pi.
fuente