¿Cuáles son algunas de las preocupaciones de diseño para la comunicación SPI externa?

8

Descripción general:

Me estoy comunicando entre 3 placas pcb personalizadas con dspic33 en ellas usando SPI. Tengo un maestro y dos esclavos, pero les envío los mismos datos a ambos esclavos (y les dejo elegir a qué prestar atención).

Configuración de hardware:

Los dos esclavos han incorporado controladores de motor BLDC y el Maestro está controlando estos controladores de motor a través de SPI. Los cables se extienden aproximadamente a 3 pies del maestro a cada esclavo y los encabezados son típicos .1 "paso a través de los encabezados SAMTECH. Cada controlador de motor tiene su propio regulador de 3.3 voltios que funciona con la electrónica dsPIC / LV. Uso un controlador de motor regulador (Llamémosle A) para alimentar también el SPI maestro DSPIC. Para el otro controlador de motor (Llamémosle B), solo ejecuto las líneas SPI y tierra desde el maestro. El SPI clk está funcionando a 100KHz

Cómo llegar al punto (Finalmente):

Sin motores funcionando, todo funciona bien, todos los datos se envían como se espera a ambos esclavos. Sin embargo, cuando arranco los motores, Bslave ya no obtiene los datos correctos. Él está recogiendo relojes adicionales o soltándolos, supongo que debo hacerlo por el ruido adicional. En cualquier caso, sus sumas de comprobación comienzan a fallar. Aslave trabaja como un campeón sin importar qué.

1) ¿Esperaría que todos estos dispositivos deban funcionar con la misma fuente de 3.3 voltios? Si es así, ¿puedes convencerme hablando sobre el bucle de inductancia más largo y la magia negra como esa?

2) ¿Tiene algún tipo de regla general sobre qué tan rápido puedo esperar para poder ejecutar el SPI clk y tener éxito con una configuración de hardware como la anterior?

    
pregunta Matt

4 respuestas

5

He ejecutado SPI (reloj de 2MHz) a unos 5 m de una caja a otra, y no dudé en diseñar el reloj y los datos para una salida equilibrada. El cable (personalizado) entre los dos también usó par trenzado y pantalla tanto de datos como de reloj.

También envié energía aislada a la caja remota a través de convertidores de dc a dc. No tuve el tiempo suficiente para hacer este error, así que posiblemente mi solución fue una exageración, pero bueno, funcionó. Mi razonamiento detrás de esta decisión es que no quería que los picos de "consumo actual" bajaran por las pantallas del par trenzado. Los screenes no estaban conectados a tierra en el extremo de envío de la PC. Trate las señales digitales como señales analógicas preciosas para obtener el mejor rendimiento: siempre haga que su pantalla termine en el extremo receptor y si debe (por cualquier motivo) terminar a regañadientes (también) al final del envío.

Era para transmitir 128 canales de señales analógicas de baja velocidad a un cuadro de salida desde una PC. Sospecho que, si lo hubiera necesitado, podría operar esto a un reloj de 20MHz.

    
respondido por el Andy aka
5

SPI no es diferente a cualquier otra interfaz eléctrica. Preste atención a los problemas habituales de integridad de la señal (blindaje, área de bucle, impedancia, terminación de la señal, etc.) y puede correr una distancia razonable. Cuál es una distancia razonable, depende de lo que esté haciendo con ella y de lo bien que pueda controlar los diversos factores.

¿Puedes correrlo 3 pies? Ciertamente. ¿Debería usted? Bueno, hay mejores cosas para usar. Como han señalado otros, hay RS-4xx que podría funcionar bien. También puede ejecutar SPI, pero use la señalización diferencial a través del cable como RS-4xx. Esto usará más cables, pero esos son los cortes. También puede hacer un RS-485 normal, usando un UART y similares.

Personalmente he ejecutado SPI en cables de 1 pie, dentro de un chasis, a velocidades de hasta 32 MHz sin problemas. También corrí I2C a más de 4 pies a 100 KHz en un entorno de EMI alto y SPI es mucho mejor que I2C, por lo que se puede hacer. Pero si no presta atención a los detalles, puede tener problemas fácilmente. Pero honestamente, debe prestar atención a los detalles, independientemente de lo que use.

    
respondido por el user3624
5

Considere cuidadosamente su esquema de conexión a tierra. Proteja las líneas de datos, si es de ayuda, y conecte a tierra el protector correctamente. No ejecute los datos y el reloj en el mismo par trenzado. Use aislamiento galvánico si es necesario. Aparte de eso, no hay reglas de oro de las que tenga conocimiento.

SPI se diseñó para (1) comunicaciones de corto alcance, generalmente dentro de una PCB y (2) en el entorno sin EMI. Quizás, los únicos buses que se desempeñan peor que SPI en presencia de EMI son I 2 C y 1-wire. Hay buses, que fueron diseñados para comunicación de largo alcance en presencia de EMI (RS-485, CAN, Ethernet).

Es posible extender y reforzar el SPI. Aquí hay una nota de aplicación , que muestra un bus SPI con líneas diferenciales.

    
respondido por el Nick Alexeev
1

Hay algunas maneras de minimizar los efectos del ruido en sus líneas de señal. La forma más fácil es enrutar un plano de cobre o una traza de cobre adyacente a sus trazas de señal. Esto minimiza la inductancia de las trazas y el área del bucle.

A alta frecuencia, a las corrientes de retorno les gusta correr un camino de menor impedancia adyacente a las líneas de señal. Supongo que tiene una conexión a tierra común entre sus circuitos, pero esto puede estar causando problemas en la señalización de alta frecuencia si su conexión a tierra común es simplemente una conexión a tierra de "alimentación" entre los circuitos. Provocará un área de bucle muy grande para las corrientes de señal que pueden permitir una gran cantidad de ruido debido a un acoplamiento magnético parásito.

Si puede, conecte una conexión a tierra adicional entre los terrenos adyacentes a las líneas de señal SPI, además de mantener un plano de tierra de cobre o un trazado enrutado adyacente a las líneas dentro de las placas también. Puede hacer una gran diferencia en cuanto a la susceptibilidad de su circuito a los motores.

    
respondido por el Steinar

Lea otras preguntas en las etiquetas