¿Desea generar datos en GPIO en paralelo, cuál es el retraso entre cada pin?

0

Tengo la siguiente configuración para controlar 256 motores paso a paso bipolares desde un flujo de datos a través de SPI.

Estoy decidiendo entre un MCU (teensy 3.6) o un FPGA.

Cada motor (cuatro cables) es impulsado por un controlador que requiere 2 GPIO (A4988).

Uso 32 registros de desplazamiento de 16 bits para hablar con los 256 controladores de alrededor de 36 GPIO en el MCU / FPGA.

Quiero que cada motor responda al unísono cuando emito comandos, esencialmente deben controlarse en paralelo. Un FPGA debería hacer esto bien, pero la codificación en uno no es tan trivial.

Usando un Teensy 3.6 para el enfoque de MCU, me gustaría saber qué tan paralelo sería el control.

I.E. Tengo 32 líneas de datos que van desde 32 GPIO a 32 registros Shift de 16 bits; Quiero activar todos los motores paso a paso completamente en la misma dirección: ¿cuánto tiempo dura la latencia entre la salida del comando de GPIO 1 a GPIO 32?

Aquí hay un diagrama de bloques para ayudar a la configuración.

Probablemente optaría por el enfoque de MCU si la latencia es despreciable, pero me gustaría saber sus pensamientos. Me imagino que cualquier latencia es un problema ya que puenteo todos los otros pines de control de registro de desplazamiento (pestillo, reloj, etc.).

Gracias

    
pregunta Orbitronics

3 respuestas

1

Depende de cómo se conectan los registros de turnos. Por lo general, los registros de desplazamiento tendrán tres pines de entrada: datos, reloj y cierre. El flanco ascendente en el reloj cambiará en / a través de un bit de datos, el flanco ascendente en el pestillo transferirá el contenido de los registros seriales internos a los registros de salida paralelos. Por lo tanto, si une todos los pasadores de enganche y los maneja al mismo tiempo, todas las salidas del registro de cambios se actualizarán nominalmente al mismo tiempo (dentro de unos pocos ns). Si quieres la menor desviación entre las salidas, esta es la forma de hacerlo.

    
respondido por el alex.forencich
0

Supongamos que tiene una MCU con dos puertos de 32 bits. A continuación, tome catorce registros D de SN74ALVCH16721 de 20 bits. (¡Solo para tener algunos bits de repuesto!) Para escribir en uno, podrías:
- Establecer los datos en port1
- escribe el reloj alto en port2
- Escribe el reloj bajo en el puerto 2

Para catorce chips que son 42 escrituras. Con una CPU de 64MHz que toma ~ 218 nseg. Permite agregar un factor de fudge de diez porque se debe buscar la instrucción: ~ 2uSec. ¿Crees que tus motores se darán cuenta?

    
respondido por el Oldfart
0
Los

GPIOs en MCUs usualmente se organizan como registros de cierto ancho, que típicamente coinciden con la arquitectura interna de MCU. Si adjunta algunas de sus E / S al mismo registro, digamos registro de 8 bits, puede hacer que todos estos GPIO cambien casi simultáneamente, la diferencia estará en el marco de tiempo inferior a los nanosegundos (más la posible discrepancia de longitud de rastreo). Pero si tiene un bus más ancho y sus GPIO se dividen entre diferentes registros de MCU, entonces habrá un retraso entre los grupos, pocos ciclos de reloj de MCU, dependiendo de cómo su software maneje las lecturas y escrituras de registros individuales.

Con respecto a FPGA, la conducción de buses paralelos anchos tiene un problema conocido de falta de energía debido a la capacidad interna limitada de FPGA para entregar corriente a los GPIO. Las especificaciones para FPGA por lo general tienen restricciones muy específicas sobre la cantidad de GPIO que se pueden cambiar simultáneamente, debe consultar las hojas de datos antes de planificar el diseño de FPGA.

    
respondido por el Ale..chenski

Lea otras preguntas en las etiquetas