Consideraciones de terminación de bus SPI


22

Entonces, en mi pregunta anterior , pregunté sobre el uso del bus SPI a corta distancia para la comunicación de placa a placa. Me recomendaron probar las resistencias de terminación. Coloqué una resistencia cerca del destino (pero no exactamente allí, había una distancia de 1 cm) y la conecté a tierra [como se trataba de una placa sin huellas de resistencia de terminación, tuve que improvisar. No pude soldar la resistencia en el dispositivo ya que es un TQFP y tiene pines delicados.]

De algunas pruebas básicas, descubrí que una resistencia de 1K apenas redujo el sobreimpulso. 470 ohmios y 180 ohmios funcionaron mejor. Cuanto más bajo fui, mejor funcionó. Con 180 ohmios, el sobreimpulso fue de aproximadamente un voltio o un poco más bajo. Ahora, desafortunadamente, no puedo bajar mucho más que eso porque la corriente es más de lo que mi MCU puede manejar. Solucioné el problema, en la revisión actual de la placa, usando una resistencia de 330 ohmios en serie. Esto llevó el exceso a 3,7 V y el tiempo de subida fue de 10 u 11 ns. Pero realmente me gustaría una solución 'adecuada' en la próxima revisión. Mis requisitos de frecuencia siguen siendo los mismos: 2 MHz, pero preferiría 4 MHz.

Así que sentí que debería preguntar aquí: en la próxima revisión del tablero, ¿debería colocar tampones fornidos en las líneas? Encontrar un búfer no es realmente un problema, pero el consumo actual aumentará significativamente: tengo 8 dispositivos en el SPI que necesitan terminación y 3 líneas que siempre están activas van a cada uno. Un ejemplo, SCK va a los 8 dispositivos. Cada dispositivo tendrá, por ejemplo, una resistencia de terminación de 100 ohmios. ¡Entonces ese es un consumo de corriente de 12 * 3.3 / 100 = 390 mA!

Entonces, ¿cuál es el mejor recurso aquí? ¿Debo buscar una 'terminación activa' usando diodos Schottky como abrazaderas?

EDITAR: Respecto a la impedancia de línea: como mencioné anteriormente, la intención es conectar 4 placas externas. La distancia de la almohadilla a la almohadilla es la misma para todos (12 pulgadas). Sin embargo, también hay dispositivos en la misma placa que el MCU, pero estos no necesitan terminaciones, las longitudes son de aproximadamente una pulgada (o menos) y hay muy poco sobreimpulso (300 o mV). Las huellas que van a tableros externos son aproximadamente del mismo largo y ancho. La segunda capa en mi tablero es un plano de tierra ininterrumpido.


Un método común es colocar una resistencia en serie que coincida con la impedancia de la línea. Pruebe algo como una terminación en serie de 50ohm. Sería útil si diseñaras tus trazas y conexiones para que sean una impedancia fija. Sin embargo, pruebe terminaciones en serie más bajas y vea lo que encuentra. Sugirió una terminación a tierra de 32 ohmios, en realidad puede hacer esta potencia mucho más baja, bien 3dB menos potencia, al poner un 64 ohm en el riel de alimentación y un 64ohm en el riel de tierra.
Kortuk

@Kortuk Una resistencia de 32 ohmios, desafortunadamente, no redujo el sobreimpulso significativamente. Sin embargo, la huella también estaba en el lugar equivocado (nunca se pensó que fuera un terminador) y no en la fuente, por lo que podría ser eso, no estoy seguro. En cuanto a la impedancia de línea, todas las líneas tienen, aproximadamente, la misma longitud y anchura. Todos corren sobre un terreno completo en un avión, que está en la segunda capa.
Sábado

1
La terminación de la serie está en la fuente, si la coloca en la carga no hace nada. Intente colocar un 50ohm directamente en su fuente en serie para ver el efecto.
Kortuk

Puede considerarlo como stevenvh descrito, está toda la línea actuando como un condensador y esa resistencia actúa como la R con ella para un paso bajo, si lo considera un modelo agrupado. Una resistencia coincidente allí si observa el modelo de línea de transmisión significa que tiene la mitad del recorrido de la onda de amplitud y luego cuando golpea el otro extremo y refleja que se golpea al máximo.
Kortuk

Respuestas:


32

Hablar sobre la terminación de la señal es como abrir una lata de gusanos. Este es un tema ENORME que es difícil de resumir en solo un par de cientos de palabras. Por lo tanto, no lo haré. Voy a dejar una gran cantidad de cosas fuera de esta respuesta. Pero también le daré una gran advertencia: hay mucha información errónea sobre la terminación de resistencias en la red. De hecho, diría que la mayoría de lo que se encuentra en la red es incorrecto o engañoso. Algún día escribiré algo grande y lo publicaré en mi blog, pero no hoy.

Lo primero que debe tener en cuenta es que el valor de la resistencia a utilizar para su terminación debe estar relacionado con su impedancia de rastreo. La mayoría de las veces el valor de la resistencia es el mismo que la impedancia de rastreo. Si no sabe cuál es la impedancia de la traza, entonces debe averiguarlo. Hay muchas calculadoras de impedancia en línea disponibles. Una búsqueda en Google mostrará docenas más.

La mayoría de las trazas de PCB tienen una impedancia de 40 a 120 ohmios, por lo que descubrió que una resistencia de terminación de 1k no hizo casi nada y una resistencia de 100 ish ohmios fue mucho mejor.

Existen muchos tipos de terminación, pero podemos clasificarlos en dos categorías: terminación de origen y finalización. La terminación de origen está en el controlador, la terminación final está en el otro extremo. Dentro de cada categoría, hay muchos tipos de terminación. Cada tipo es el mejor para diferentes usos, ya que ningún tipo es bueno para todo.

Su terminación, una sola resistencia a tierra en el otro extremo, en realidad no es muy buena. De hecho, está mal. La gente lo hace, pero no es lo ideal. Idealmente, esa resistencia iría a un carril de alimentación diferente a la mitad de su carril de alimentación. Entonces, si el voltaje de E / S es 3.3v, entonces esa resistencia no irá a GND, sino a otro riel de potencia a la mitad de 3.3v (también conocido como 1.65v). El regulador de voltaje para este riel tiene que ser especial porque necesita generar Y hundir corriente, donde la mayoría de los reguladores solo generan corriente. Los reguladores que funcionan para este uso mencionarán algo sobre la terminación en la primera página de la hoja de datos.

El gran problema con la mayoría de las terminaciones finales es que consumen mucha corriente. Hay una razón para esto, pero no voy a entrar en eso. Para uso de baja corriente debemos mirar la terminación de la fuente. La forma más fácil y más común de terminación de fuente es una resistencia en serie simple en la salida del controlador. El valor de esta resistencia es el mismo que la impedancia de rastreo.

La terminación de origen funciona de manera diferente que la finalización de finalización, pero el efecto neto es el mismo. Funciona controlando los reflejos de la señal, no previniendo los reflejos en primer lugar. Debido a esto, solo funciona si la salida de un controlador alimenta una sola carga. Si hay múltiples cargas, entonces se debe hacer algo más (como usar terminación final o resistencias de terminación de fuente múltiple). El gran beneficio de la terminación de origen es que no carga el controlador como lo hace la terminación final.

Dije antes que su resistencia en serie para la terminación de la fuente debe estar ubicada en el controlador, y debe tener el mismo valor que su impedancia de rastreo. Eso fue una simplificación excesiva. Hay un detalle importante para saber sobre esto. La mayoría de los controladores tienen cierta resistencia en su salida. Esa resistencia generalmente está en el rango de 10-30 ohmios. La suma de la resistencia de salida y su resistencia deben igualar su impedancia de rastreo. Digamos que su traza es de 50 ohmios y su controlador tiene 20 ohmios. En este caso, su resistencia sería de 30 ohmios ya que 30 + 20 = 50. Si las hojas de datos no dicen cuál es la impedancia / resistencia de salida del controlador, entonces puede suponer que son 20 ohmios; luego observe las señales en la PCB y vea si es necesario ajustarlas.

Otra cosa importante: cuando observa estas señales en un osciloscopio, DEBE sondear el receptor. El sondeo en cualquier otro lugar probablemente te dará una forma de onda distorsionada y te hará pensar que las cosas son peores de lo que realmente son. Además, asegúrese de que su clip de tierra sea lo más corto posible.

Conclusión: Cambie a la terminación de fuente con una resistencia de 33 a 50 ohmios y debería estar bien. Se aplican las advertencias habituales.


David, muchas gracias por una respuesta exhaustiva. Todo tenía sentido, pero creo que hay una complicación más en mi sistema: las líneas SPI van de una placa a otra. Por lo tanto, estimar la impedancia de la línea puede ser difícil: la señal recorre aproximadamente 3 "en la placa principal, atraviesa un cable plano de 6" y luego viaja a lo largo de un trazado de 3 "nuevamente hasta llegar a su destino. Los cables del cable plano son alternativos tierra (como SCK, GND, MOSI, GND, etc.) ¿Su recomendación de 30-20 Ohm sigue en pie?
Saad

@Saad Lo que he hecho en casos como ese (y lo he hecho mucho) es usar una sola resistencia en el controlador y ajustar su valor una vez que se construye el prototipo. Es un compromiso, pero funciona. En realidad, tengo varios sistemas en este momento que ejecutan SPI sobre cables de 1 pie con 3-6 pulgadas de trazas en cada PCB. ¡Algunos de ellos están funcionando a 30 MHz! Sí, comience con 33 o 47 ohmios y modifique desde allí.

3
+1 ya, pero un diagrama que muestra cómo conectar una terminación de fuente (es decir, en serie, no desde la línea a tierra) sería muy útil.
El fotón

16

Como va a recorrer distancias cortas, no creo que las resistencias de terminación sean una buena idea. Como descubrió, tienen que ser bastante bajos para hacer el trabajo, y luego la línea consume mucha corriente y el voltaje se atenúa en 2 si también conduce la línea con la misma impedancia.

Su velocidad de reloj no es tan alta, por lo que las frecuencias que necesita para soportar incluso una velocidad de bits de 4 MHz no son las que causan el problema. El problema es que tiene bordes rápidos que conducen las líneas, que tienen armónicos en los 100s de MHz, que causan el problema. En las frecuencias deseadas, tiene un sistema agrupado, no una línea de transmisión. Esto hace las cosas considerablemente más fáciles.

Por lo tanto, la solución es atenuar las frecuencias altas que realmente no necesita pero que causan el problema. Esto se puede hacer con un simple filtro de paso bajo RC inmediatamente después de todo lo que impulsa una línea. Esto es en parte lo que están haciendo las resistencias de 330 Ω ahora. Forman un filtro de paso bajo con la capacitancia parásita de la línea. Aparentemente, eso no es suficiente y / o no es lo suficientemente predecible. Esto se puede solucionar con cierta capacidad deliberada en cada línea.

Desea ejecutar el bus a 4 MHz, lo que significa que la señal más rápida que necesita para admitir es una onda cuadrada de 4 MHz. Eso significa que la longitud de cada nivel es de 125 ns. Digamos que queremos que sean al menos 4 constantes de tiempo, lo que implica un 98% de tiempo de establecimiento. Eso significa que la constante de tiempo máxima que queremos permitir es 31 ns. 31ns / 330Ω = 94 pF. Esa es la carga total en las resistencias de la serie 330 Ω que necesita para obtener una constante de tiempo de 31 ns. Siempre habrá alguna capacitancia parásita que no puedes predecir, así que vería cómo se ven las cosas con 47 pF. Eso deja espacio para 10-20 pF de capacitancia oculta sin exceder nuestra constante de tiempo máxima permitida.

Las resistencias en serie deben estar lo más cerca posible de todos los pines que conducen el bus. Esto supone que todos los demás pines en el bus serán entradas CMOS cuando se conduce. Para las líneas que solo son impulsadas por un solo pin (como la línea del reloj, que solo es impulsada por el maestro), coloque el 47 pF lo más cerca posible después de la resistencia. Para líneas que pueden ser conducidas por diferentes pines en diferentes momentos (como MISO), coloque el 47 pF en algún lugar cerca del medio de todos los controladores. Cada línea tiene un solo condensador de 47 pF, sin importar cuántos controladores, pero hay una resistencia para cada controlador.

Los cálculos anteriores están destinados a ser una buena guía para comenzar. Algunos parámetros no se pueden conocer y, por lo tanto, se explican por adelantado. Comience con los 330 Ω en serie y 47 pF a tierra, pero no tenga miedo de cambiar las cosas según los resultados reales observados.


2

En ausencia de cualquier terminación, cuando se envía una señal desde una fuente de muy baja impedancia a un receptor de muy alta impedancia, la señal rebotará repetidamente; la fase de la señal se invertirá 180 grados en cada viaje de ida y vuelta.

Si uno no desea que se reflejen las señales cuando llegan al destino, puede usar la terminación final. Esto hará que la señal se absorba limpiamente en el destino sin reflejarse, pero muchas implementaciones comunes harán que la fuente vea una carga de CC significativa.

En muchos casos, uno puede lograr resultados que son prácticamente tan útiles si uno inserta una resistencia en serie en la fuente de señal. Si no hay receptor en el extremo más alejado de la línea, la señal se reflejará cuando llegue allí, pero la fuente absorberá cualquier reflejo en lugar de volver a reflejarlo. Tenga en cuenta también que la terminación de la fuente no impone una carga de CC en el dispositivo que conduce la línea.

En ausencia de terminación, si una línea es conducida por una baja impedancia y recibida con una alta impedancia, el dispositivo receptor puede ver un voltaje más alto que el voltaje de activación (en teoría, hasta el doble del voltaje, si la impedancia de origen es cero y la impedancia de recepción es infinita). Si la fuente o el receptor están correctamente terminados, la tensión recibida será casi igual a la tensión de activación (si una fuente de impedancia cero controlara un receptor de impedancia adecuada o una fuente de impedancia adecuada impulsara un receptor de impedancia infinita) el voltaje recibido será igual al voltaje del variador). Si ambos tienen una terminación adecuada, el voltaje de recepción será la mitad del voltaje del variador.

La simulación aquí demuestra esto. Incluye un generador de pulsos que produce una cadena de pulsos aproximadamente 49 veces por segundo, dos líneas de retardo de 5 ms en serie (tiempo de ida y vuelta 1/50 segundos) y resistencias de terminación conmutables en ambos extremos.

El circuito incluye tres interruptores SPDT; haga clic en uno para cambiar su estado. Los dos interruptores inferiores controlan la terminación de origen y destino. Para aquellos, "arriba" representa una buena terminación y "abajo" representa una mala. El interruptor superior controla si la línea debe ser conducida por un generador de pulso automático o por una entrada lógica manual. Para enviar pulsos por la línea manualmente, cambie el interruptor superior hacia "abajo" y luego registre la "L" al lado.

Las señales que llegan al destino estarán limpios, si bien el origen o el destino está correctamente terminado. Si ambos se terminan correctamente, el voltaje de la señal recibida será la mitad del voltaje del variador. Si uno está correctamente terminado pero el otro no, el voltaje recibido será aproximadamente el 91% del voltaje del variador (las resistencias "malas" están "mal" en un factor de diez y, por lo tanto, no absorben aproximadamente (10/11) de la energía). Si ninguno de los dos termina, el voltaje recibido inicialmente será aproximadamente 1.656 veces el voltaje del variador, pero aparecerán reflejos extraños cada 20 ms.


1

Pruebe una terminación de CA (por ejemplo, un condensador de 470 pF en serie con una resistencia de 110 Ohmios) y conecte esta combinación en serie desde la salida del destino del reloj SPI a tierra. La terminación tomará aproximadamente 30 mA para la duración del tiempo de borde, algo que puede hacer fácilmente, pero corriente cero de lo contrario. Para la línea de datos bidireccional se vuelve un poco más complicado. Puse una terminación de CA de 470 pF, 220 Ohmios en el extremo maestro y esclavo de la línea de datos SPI y eso funciona, es decir, sobreimpulso y subimpulso aceptables.

Agradezco comentarios sobre esto.


0

No profundizar demasiado en los detalles ya que las publicaciones anteriores dieron en el clavo. Se reduce a SPI como líneas no balanceadas. Incluso si tiene una frecuencia de reloj baja, deben respetarse los bordes rápidos del reloj ns. En mi caso encontré una resistencia de 470 ohm en serie con la línea SPI CLK en el lado Master. Quitando esa resistencia e implementando la solución recomendada para líneas no balanceadas de Lattice y las sugerencias publicadas anteriormente (solo pude implementar la mitad de la solución desde el lado Esclavo, ajusté las tapas del filtro en consecuencia) pude extender la longitud de mi cable de comunicaciones de cinta SPI desde 10 cm a 160 cm sin errores de comunicación:

Mejora de la inmunidad al ruido para la interfaz en serie : un informe técnico de semiconductores de celosía (julio de 2014)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.