Visión general:
Me estoy comunicando entre 3 placas de pcb personalizadas con dspic33 en ellas usando SPI. Tengo un maestro y 2 esclavos, pero les envío los mismos datos a ambos esclavos (y les dejo elegir a qué prestarles 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 ejecutan aproximadamente a 3 pies del maestro a cada esclavo y los encabezados son típicos encabezados SAMTECH de paso de paso de 1 ". Cada controlador de motor tiene su propio regulador de 3.3 voltios que ejecuta la electrónica dsPIC / LV. Yo uso un regulador de controlador de motor (vamos a llamarlo A) para alimentar también el DSPIC maestro SPI. Para el otro controlador de motor (vamos a llamarlo B), simplemente ejecuto las líneas SPI y tierra desde el maestro. El SPI clk está funcionando a 100KHz
Llegando al punto (Finalmente):
Sin motores funcionando, todo funciona bien, todos los datos llegan como se esperaba a ambos esclavos. Sin embargo, cuando enciendo los motores, Bslave ya no obtiene los datos correctos. Él está recogiendo relojes adicionales o dejándolos caer, supongo que lo haré con el ruido extra. En cualquier caso, sus sumas de verificación comienzan a fallar. Aslave funciona como un campeón pase lo que pase.
1) ¿Esperaría que todos estos dispositivos necesiten funcionar con la misma fuente de 3.3 voltios? Si es así, ¿puedes convencerme hablando sobre el ciclo de inductancia más largo y la magia negra como esa?
2) ¿Tiene algún tipo de regla general en cuanto a qué tan rápido puedo esperar poder ejecutar el SPI clk y tener éxito con una configuración de hardware como la anterior?
Respuestas:
Ejecuté 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 balanceada. El cable (personalizado) entre los dos también usaba par trenzado y pantalla tanto en datos como en reloj.
También envié energía aislada a la caja remota a través de convertidores de CC a CC. No tuve tiempo suficiente para equivocarme, 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" cayeran 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 tenga su pantalla terminada en el extremo receptor y si debe (por cualquier razón) terminar a regañadientes (también) en el extremo de envío.
Fue para transmitir 128 canales de señales analógicas de baja velocidad a una caja de conexiones desde una PC. Sospecho que si lo necesitara podría operar esto a 20MHz de reloj.
fuente
SPI no es diferente a cualquier otra interfaz eléctrica. Preste atención a los problemas habituales de integridad de señal (blindaje, área de bucle, impedancia, terminación de señal, etc.) y puede ejecutarlo a una distancia razonable. La distancia razonable depende de lo que esté haciendo con ella y de qué tan bien pueda controlar los diversos factores.
¿Puedes correrlo 3 pies? Ciertamente. Deberías? Bueno, hay mejores cosas para usar. Como otros han señalado, 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 descansos. También puede hacer RS-485 normal, usando un UART y similares.
Personalmente, ejecuté SPI sobre cables de 1 pie, dentro de un chasis, a velocidades de hasta 32 MHz sin problemas. También ejecuté I2C a más de 4 pies a 100 KHz en un entorno de alto EMI y SPI es mucho mejor que I2C, por lo que se puede hacer. Pero si no presta atención a los detalles, puede encontrarse fácilmente con problemas. Pero, sinceramente, debe prestar atención a los detalles independientemente de lo que use.
fuente
Considere cuidadosamente su esquema de conexión a tierra. Proteja las líneas de datos, si es útil, y conecte a tierra el escudo correctamente. No ejecute datos y reloj en el mismo par trenzado. Use aislamiento galvánico si es necesario. Aparte de eso, no hay reglas generales que yo sepa.
SPI fue diseñado para (1) comunicación de corto alcance, generalmente dentro de una PCB y (2) en el entorno con poca EMI. Quizás, los únicos autobuses que funcionan peor que SPI en presencia de EMI son I 2 C y 1 cable. Hay buses, que fueron diseñados para comunicación de largo alcance en presencia de EMI (RS-485, CAN, Ethernet).
Es posible extender y fortalecer el SPI. Aquí hay una nota de aplicación , que muestra un bus SPI con líneas diferenciales.
fuente
Hay algunas formas de minimizar los efectos del ruido en las líneas de señal. La forma más fácil es enrutar un plano de cobre o un rastro de cobre adyacente a los rastros 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 para la señalización de alta frecuencia si su conexión a tierra común es simplemente una conexión a tierra de "potencia" entre los circuitos. Causará un área de bucle muy grande para las corrientes de señal que puede permitir una gran cantidad de inyección de ruido debido al acoplamiento magnético disperso.
Si puede, conecte una conexión a tierra adicional entre las tierras 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 la susceptibilidad de su circuito a los motores.
fuente