25 votos

Comunicación a corta distancia entre consejos de administración

Mi MCU ejecuta un bus SPI con unos 4 dispositivos. Me gustaría extender este bus también fuera de la placa, es decir, tener algunos PCBs conectados a la placa "principal" y extender la funcionalidad. La distancia "pad to pad" sería:

longitud de traza de la placa principal + longitud del cable + longitud de traza en la placa de extensión

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

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

enter image description here

Nota: Aquí no se pueden ver los tiempos de subida, pero sí el excesivo sobreimpulso: se trata de una señal de 3,3 V. Y sí, esto se midió correctamente con un cable muy corto de 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 funcionara a 4 MHz, pero 2 MHz también es aceptable. El número máximo de placas que me gustaría conectar sería de unas 4 y esto extendería el bus SPI para tener unos 12 dispositivos. No creo que esto sería demasiado difícil de manejar a través de código como ya tengo algo trabajando como esto. Tener las lineas adicionales de slave select tampoco es un problema.

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

16voto

lillq Puntos 4161

La regla empírica dice que hay que calcular los efectos de la línea de transmisión si la longitud de la conexión es superior a 1/10 de la longitud de onda de la señal.

enter image description here

Las líneas de transmisión provocarán reflexiones cuando presenten un cambio brusco de impedancia. La señal reflejada se suma a la original, puede reflejarse de nuevo en el lado del transmisor, y así ir y venir. El resultado se muestra en el gráfico: el sobreimpulso del que hablas, y algo de timbre.

Una longitud de cable de 12" (30cm) es 1/10 de una longitud de onda de 3m, o 100MHz. 1MHz, e incluso 4MHz no deberían dar muchos problemas aquí. Terminar la línea, como dice Wouter, podría ser una primera medida. La entrada es probablemente de alta impedancia, y eso nunca es un buen emparejamiento. Como tienes tres piezas diferentes en tu conexión (PCB, cable, PCB) encontrar la impedancia característica será difícil. (También será diferente para la PCB y el cable, por lo que a frecuencias muy altas también obtendrías reflexiones en las conexiones del cable). Dada la corta longitud y la baja frecuencia, el valor de la resistencia de terminación no es crítico. 100 \$\Omega\$ puede ser demasiado bajo para el microcontrolador, la mayoría de ellos no pueden suministrar 33mA (o incluso 50mA, a 5V). Yo probaría con un 1k \$\Omega\$ resistencia para empezar, y ver hasta dónde nos lleva.

editar (actualización de la pregunta)
El tiempo de subida parece ser de 7ns. Eso es rápido, como dice Kortuk, significa que tienes un espectro al menos hasta 400MHz, y esos armónicos sufrirán de hecho efectos de línea de transmisión, incluso si tu reloj es de sólo 1MHz. Intenta filtrarlos, un ancho de banda de 20MHz (80MHz para el reloj de 4MHz) te da tiempo de subida más que suficiente. Esta es una onda cuadrada de 1MHz filtrada con un muro de ladrillos LPF a 20 MHz:

enter image description here

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

\$ R = \dfrac{1}{2 \pi \cdot 100 MHz \cdot 50 pF} =32 \Omega \$

te da una frecuencia de corte de 100MHz. Así que un 33 \$\Omega\$ La resistencia en serie debería disminuir tu tiempo de subida, pero deja más que suficiente para tener una buena señal a 4MHz.

7voto

RelaXNow Puntos 1164

Para un bus tan corto, yo probaría a poner una pequeña resistencia en serie con cualquier cosa que conduzca una línea. Esa no es la forma teórica ideal teniendo en cuenta la teoría de líneas de transmisión, sino un enfoque pragmático que creo que funcionará lo suficientemente bien para tu caso. Pruebe 47 Ω para empezar y ver lo que hace. Si eso ayuda pero no lo suficiente, puedes ir más arriba pero yo no pasaría de 120 Ω. Lo más probable es que en algún punto de ese rango encuentres un valor que funcione lo suficientemente bien.

4voto

GetFree Puntos 495

AFAIK el overshoot se puede eliminar por la terminación propper, si su conductor puede conducir la carga. De lo contrario, un par controlador/receptor dedicado como LVDS o incluso RS485 será suficiente.

1voto

Stephen Collings Puntos 8713

He tenido serios problemas en el pasado ejecutando SPI sobre cables de cinta, aunque unos mucho más largos que los que describes. La inmunidad al ruido se convirtió en un verdadero problema, y los comandos corruptos acabaron llegando a mis periféricos. Fue suficiente para suspender las pruebas de inmunidad al ruido de la CE. Si te encuentras con problemas en este sentido más adelante, yo recomendaría poner una MCU separada en cada placa y conectarlos a través de CANbus.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X