OpenServo y I2C Syncronization

1

Necesito enviar un comando a varios dispositivos I2C en el mismo cable. Los dispositivos son OpenServos. Cada dispositivo recibe el comando y comienza a procesar la información en el comando.

¿Cómo me aseguro de que todos comiencen a procesar el comando al mismo tiempo?

EDIT: Solo para aclarar, esta pregunta es principalmente acerca de la capacidad de I2C para admitir la sincronización.

    
pregunta

2 respuestas

2

Algunas posibilidades vienen a la mente:

  1. Tenga un dispositivo maestro I2C dedicado para cada servo (un microcontrolador, por ejemplo) y un único microcontrolador dedicado para generar una señal de sincronización que irá a cada uno de los Maestros I2C.

  2. Si es posible, configure todos los servos para que tengan la misma dirección I2C. Todos recibirán el comando al mismo tiempo pensando que es para ellos Absolutamente no funcionará si cada motor necesita su propio Parámetros - solo si van a recibir exactamente el mismo idéntico comandos Problemas posibles: varios dispositivos que intentan conducir el La línea durante ACK o durante una respuesta puede causar un bus impredecible contención. Podría valer la pena intentarlo, aunque si todos van a recibir comandos idénticos .

Un vistazo rápido a la página de OpenServo me dice que estos dispositivos son reprogramables y que puede escribir su propio firmware. Me parece que el I2C simple puede no ser la mejor opción aquí, considerando su problema de sincronización y que puede haber una oportunidad para hacer algo inteligente al modificar el firmware del controlador del motor para aceptar una señal de 'sincronización' adicional.

EDITAR: Nombre falso menciona una dirección de transmisión en I2C y esto puede ser hackeado a tu favor. La Especificación I2C oficial admite una dirección de "llamada general" que es opcional para el dispositivo. En la especificación para llamadas generales se establecen: cambio de dirección con restablecimiento, cambio de dirección sin restablecimiento y restablecimiento de software. Supongo que es posible modificar el firmware para admitir un comando personalizado y usar (/ abuso) la llamada general para sus propios fines.

    
respondido por el Jon L
0

Los términos como OpenServo deben explicarse en las preguntas y los enlaces deben proporcionarse a los sitios web relevantes.

A continuación se proporcionan algunos detalles y enlaces a recursos de OpenServo.

Hay dos formas obvias de lograr el inicio simultáneo de varios servos. Habrá otras formas.

  • Como OpenServo es de código abierto y basado en procesador, sería "fácil" agregar características no estándar. Un método de este tipo que debería ser posible con un mínimo de modificación del sistema sería permitir que todos los servos escuchen una dirección I ^ 2C común e implementen señales de "parada total" y "inicio" que pueden ser decodificadas por todos los servos conectados. . Los comandos para un servo individual recibido durante "todas las paradas" se cuestionan y se implementan inmediatamente después de que se recibe un "todo inicio: así.
  • Enviar toda la señal de parada.
  • Enviar códigos a cada servos conectado.
  • Enviar Y'All comienza ahora

    - Control de hardware.

El diagrama del circuito SparkFun Openservo que se encuentra a continuación utiliza el controlador H Bridge que se encuentra debajo. Si se interrumpe la alimentación de +12 V en la parte superior central, el servo no conducirá. Si este punto de alimentación es común a un grupo de servos, todos pueden activarse y desactivarse fácilmente con un solo "interruptor" (probablemente un MOSFET de canal P en el lado alto.

OpenServo es un proyecto abierto basado en la comunidad con el objetivo de crear un servo digital de alta calidad para robótica. Ellos dicen

  • Algunas de las muchas características de OpenServo incluyen:

    - Microcontrolador AVR de 8 bits de alto rendimiento
    -Pacto H-Bridge con MOSFET de alto rendimiento
    -Control de precisión sobre la posición y velocidad del servo. Interfaz basada en I2C / TWI para control y retroalimentación
    -Realimentación de posición, velocidad, voltaje y potencia. -Apoyado soporte de perfil de movimiento basado en curva
    -EEPROM almacenamiento de información de configuración de servo
    -Software escrito en C usando herramientas de desarrollo gratuitas. -I2C / TWI bootloader y programador GUI

Página de documentación
Página de índice de SparkFun
Circuito de implementación de sparkFun.

    
respondido por el Russell McMahon

Lea otras preguntas en las etiquetas