Comunicación de placa a placa de corta distancia

24

Mi MCU ejecuta un bus SPI con aproximadamente 4 dispositivos. También me gustaría extender este bus para que esté fuera de la placa, es decir, que algunas PCB se conecten a la placa "principal" y amplíen la funcionalidad. La distancia "pad a pad" sería:

traza longitud de placa principal + longitud de cable + traza longitud en la placa extensible

3 "+ 6" + 3 "= aproximadamente 12"

En mi experiencia, incluso una señal de 1 MHz, con tiempos de subida de aproximadamente 7 ns, en esta distancia a través de un cable plano superó en más de 1 V (pero no hubo un timbre excesivo). Las placas estarán alimentadas por la misma fuente de alimentación.

ingrese la descripción de la imagen aquí

Nota: No puede ver los tiempos de subida aquí, pero puede ver el exceso excesivo: esta es una señal de 3.3V. Y sí, esto se midió correctamente con un cable muy corto desde la sonda a tierra. Al igual que a menudo se recomienda en este sitio. No creo que sea un error de medición.

Me gustaría que el sistema funcione a 4 MHz, pero también es aceptable 2 MHz. El máximo. la cantidad de placas que me gustaría conectar sería de aproximadamente 4 y esto ampliaría el bus SPI para tener aproximadamente 12 dispositivos. No creo que esto sea demasiado difícil de administrar a través del código, ya que tengo algo que funciona así. Tener las líneas adicionales de selección de esclavos tampoco es un problema.

Sin embargo, mi preocupación es cómo enviar los datos SPI de una placa a otra. ¿Debo enviar SPI directo o convertirlo a LVDS en un extremo y luego volver a convertirlo en SPI en el otro extremo?

Saad
fuente
1
¿Cuál es tu tiempo de subida?
Kortuk
@Kortuk Olvidé por completo mencionar eso, lo siento. Se actualizó la pregunta.
Sábado
Tiempo de subida 7nS, eso está gritando rápido.
Kortuk
Perdón por dos preguntas irrelevantes ... 1. ¿Cuál es el osciloscopio que usaste? 2. ¿Por qué los anillos importan tanto?
richieqianle

Respuestas:

15

La regla general dice que debe calcular los efectos de la línea de transmisión si la longitud de su conexión es mayor que 1/10 de la longitud de onda de la señal.

ingrese la descripción de la imagen aquí

Las líneas de transmisión causarán reflejos donde mostrarán un cambio repentino en la impedancia. La señal reflejada se suma al original, puede reflejarse nuevamente en el lado del transmisor y de esa manera ir y venir. El resultado se muestra en el gráfico: el sobreimpulso del que estás hablando y algo de repique

Una longitud de cable de 12 "(30 cm) es 1/10 de una longitud de onda de 3 m, o 100 MHz. 1 MHz, e incluso 4 MHz no debería dar muchos problemas aquí. Sin embargo, terminar la línea, como dice Wouter, podría ser una primera medida. la entrada es probablemente de alta impedancia, y eso nunca es una buena combinación. Dado que tiene tres piezas diferentes en su conexión (PCB, cable, PCB), encontrar la impedancia característica será difícil. (También será diferente para la PCB y el cable, así que a frecuencias muy altas también obtendría reflejos en las conexiones del cable. Dada la corta longitud y la baja frecuencia, el valor de su resistencia de terminación no es crítico. 100 puede ser demasiado bajo para el microcontrolador, la mayoría de ellos pueden No suministre 33 mA (o incluso 50 mA, a 5 V). Yo probaría un 1kΩΩΩ resistencia para empezar, y ver qué tan lejos nos lleva.

edit (re question update) El
tiempo de subida parece ser de 7ns. Eso es rápido, como dice Kortuk, significa que tiene un espectro de al menos 400MHz, y esos armónicos sufrirán efectos de línea de transmisión, incluso si su reloj es de solo 1MHz. Intente filtrarlos, un ancho de banda de 20MHz (80MHz para el reloj de 4MHz) le brinda un tiempo de subida más que suficiente. Esta es una onda cuadrada de 1MHz filtrada con una pared de ladrillo LPF a 20MHz:

ingrese la descripción de la imagen aquí

Colocar una resistencia en serie formará un LPF de primer orden con la capacitancia de la línea. Si estimamos eso a 50pF entonces

R=12π100METROHz50pagsF=32Ω

te da una frecuencia de corte de 100MHz. Entonces, una resistencia de la serie 33 debería disminuir su tiempo de subida, pero dejar más que suficiente para tener una buena señal a 4MHz.Ω

stevenvh
fuente
2
La frecuencia de 1MHz es irrelevante. Lo importante es el tiempo de subida.
Rocketmagnet
@stevenvh, intenté agregar una resistencia de 1K a tierra en el destino. Ayudó con los picos, pero también redujo un poco el nivel de la señal. ¿Eso es normal? Cuando digo el nivel donde se establece la señal. También probé 500 Ohms, 220 Ohms mismo efecto pero más pronunciado.
Sábado
@Saad - ¿Cuánto cuesta un poco? 3.3V en 1k es solo 3mA, el controlador debe ser perfectamente capaz de suministrar eso. Puede tener cierta resistencia interna, pero eso es unas pocas decenas de ohmios, por lo que el nivel solo debería bajar en un 2 o 3%.
stevenvh
@stevenvh Olvidé que tengo una resistencia en serie en la línea, así que obviamente dejaré caer algo de voltaje. ¡Tonto de mí! Sin embargo, incluso una resistencia de 180 ohmios no ayudó mucho. Llevó el exceso a 4.5V. Supongo que necesitaré una resistencia mucho menor, pero luego tengo que preocuparme por el empate actual.
Sábado
Además, ¿debería considerar la terminación activa? El uso de baja resistencia aumentará los requisitos de energía en toda la placa y, dado que el bus está funcionando en todo momento, aumenta el consumo de energía. ¿Funcionaría bien usar diodos Schottky como abrazaderas?
Sábado
6

Para un autobús tan corto, intentaría poner una pequeña resistencia en serie con cualquier cosa que conduzca una línea. Esa no es la forma teórica ideal de tener en cuenta la teoría de la línea de transmisión, sino un enfoque pragmático que creo que funcionará lo suficientemente bien para su caso. Pruebe 47 Ω para empezar y vea qué hace eso. Si eso ayuda pero no lo suficiente, puedes ir más alto pero no excedería los 120 Ω. Lo más probable es que en algún lugar de ese rango encuentre un valor que funcione lo suficientemente bien.

Olin Lathrop
fuente
He intentado ese enfoque, Olin. Utilicé una resistencia de 100 ohmios y redujo el sobreimpulso unos 500 mV y lo redujo a 4,3 V desde 4,7 V. ¡Eso sigue siendo un voltio por encima de 3,3 V! El tiempo de subida fue de 12 ns en comparación con los 7 iniciales.
Sábado
Parece que estaba calculando mi resistencia mientras publicabas tu respuesta, Olin. Lo siento
stevenvh
@OlinLathrop Aumenté la resistencia de la serie a 330 Ohms y llevó el sobreimpulso a 3.7V. Estoy muy feliz con esto. El tiempo de subida fue de 10 ns. ¿Debo seguir con esto o poner resistencias de terminación en la próxima revisión de la placa? Le pregunto porque me recomendó no superar los 120 ohmios.
Sábado
@Saad: Estaba preocupado por el efecto de otras cargas en la línea y su susceptibilidad al ruido. Si las señales están limpias y no hay cargas de CC (solo entradas CMOS de alta impedancia, por ejemplo) en las líneas, continúe y use los 300 ohmios.
Olin Lathrop
4

AFAIK el exceso puede eliminarse mediante la terminación adecuada, si su conductor puede manejar la carga. De lo contrario, algún par de controlador / receptor dedicado como LVDS o tal vez incluso RS485 lo hará.

Wouter van Ooijen
fuente
+1: frecuentemente utilizamos LVDS para transportar señales SPI.
Jason S
1

He tenido serios problemas en el pasado ejecutando SPI sobre cables planos, aunque son mucho más largos de lo que usted describe. La inmunidad al ruido se convirtió en un problema real, y los comandos corruptos terminaron llegando a mis periféricos. Fue suficiente para fallar la prueba de inmunidad al ruido CE. Si tiene problemas a este respecto más adelante, le recomiendo colocar un MCU separado en cada placa y conectarlos a través de CANbus.

Stephen Collings
fuente