Consideraciones de terminación de bus SPI

19

Entonces, en mi pregunta anterior pregunté sobre el uso del Bus SPI a corta distancia para la comunicación de a bordo. Me recomendaron probar 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 [ya que era una tabla 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.]

A partir de algunas pruebas básicas, encontré que una resistencia de 1K apenas redujo el exceso. 470 ohmios y 180 ohmios funcionaron mejor. Cuanto más bajo fui, mejor funcionó. Con 180 ohmios, el exceso fue de alrededor de 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. Resolví el problema, en la revisión actual de la placa, utilizando una resistencia de 330 Ohm 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 debía preguntar aquí: en la próxima revisión de la pizarra, ¿debo colocar búferes carnosos 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 para cada uno. Un ejemplo, SCK va a los 8 dispositivos. Cada dispositivo tendrá, digamos, una resistencia de terminación de 100 ohmios. ¡Así que ese es un sorteo actual de 12 * 3.3 / 100 = 390 mA!

Entonces, ¿cuál es el mejor recurso aquí? ¿Debo optar por la "terminación activa" utilizando diodos Schottky como pinzas?

EDITAR: Con respecto a la impedancia de la línea: Como mencioné anteriormente, la intención es conectar 4 tarjetas externas. La distancia entre almohadilla y almohadilla es la misma para todos (12 pulgadas). Sin embargo, también hay dispositivos en la misma placa que la MCU, pero no necesitan terminaciones, las longitudes son aproximadamente de una pulgada (o menos) y hay muy poco rebasamiento (300 o mV). Las trazas que van a los tableros externos son ásperas de la misma longitud y anchura. La segunda capa de mi tablero es un plano de tierra ininterrumpido.

    
pregunta Saad

5 respuestas

26

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 te 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 hoy no.

Lo primero que debe tener en cuenta es que el valor de resistencia que debe usar para su terminación debe estar relacionado con su impedancia de traza. La mayoría de las veces, el valor de la resistencia es el mismo que su impedancia de traza. Si no sabes cuál es la impedancia de la traza, deberías averiguarlo. Hay muchas calculadoras de impedancia en línea disponibles. Una búsqueda en Google te 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 hacía casi nada y una resistencia de 100 ish ohmios era mucho mejor.

Hay muchos tipos de terminación, pero podemos clasificarlos en dos categorías: Fuente y terminación final. La terminación de la fuente está en el controlador, la terminación del extremo está en el extremo lejano. Dentro de cada categoría, hay muchos tipos de terminación. Cada tipo es mejor para diferentes usos, sin ningún tipo bueno para todo.

Su terminación, una única resistencia a tierra en el extremo lejano, 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 riel eléctrico diferente en la mitad de su riel eléctrico. Entonces, si el voltaje de E / S es 3.3v, entonces esa resistencia no irá a GND, sino a otro riel eléctrico a la mitad de 3.3v (a.k.a. 1.65v). El regulador de voltaje para este riel tiene que ser especial porque necesita fuente de corriente de sumidero Y , donde la mayoría de los reguladores solo generan corriente. Los reguladores que trabajan 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 la terminación final es que consumen mucha corriente. Hay una razón para esto, pero no voy a entrar en ello. 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 un resistor de serie simple en la salida del controlador. El valor de esta resistencia es el mismo que la impedancia de traza.

La terminación de la fuente funciona de manera diferente a la terminación de la terminación, pero el efecto neto es el mismo. Funciona controlando las reflexiones de la señal, no impidiendo las reflexiones en primer lugar. Debido a esto, solo funciona si una salida del controlador está alimentando una sola carga. Si hay varias cargas, entonces se debe hacer algo más (como usar la terminación de extremo o las resistencias de terminación de fuente múltiple). El gran beneficio de la terminación de origen es que no carga su controlador como lo hace la terminación final.

Antes dije 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 está generalmente en el rango de 10-30 ohmios. La suma de la resistencia de salida y su resistencia debe ser igual a su impedancia de traza. Digamos que su trazo 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, puede asumir que son de 20 ohmios, luego observe las señales en la PCB y vea si es necesario ajustarlas.

Otra cosa importante: cuando mire estas señales en un o-scope, DEBE probar el receptor. Probar en cualquier otro lugar probablemente le dará una forma de onda distorsionada y le hará creer que las cosas son peores de lo que realmente son. Además, asegúrate de que el clip de fondo sea lo más corto posible.

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

    
respondido por el user3624
16

Dado que vas a 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 la tensión se atenúa en 2 si también maneja la línea con la misma impedancia.

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

Por lo tanto, la solución es atenuar las altas frecuencias que realmente no necesita pero que causan problemas. Esto se puede hacer con un simple filtro de paso bajo de R-C inmediatamente después de cualquier cosa que conduzca una línea. Esto es en parte lo que los resistores de 330 Ω están haciendo 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 alguna capacitancia 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 soportar 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 tiempo de establecimiento del 98%. 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 los resistores de la serie de 330 Ω que necesita para obtener la constante de tiempo de 31 ns. Siempre habrá una capacitancia parasitaria que no se puede predecir, así que vería cómo se ven las cosas con 47 pF. Eso deja espacio para 10-20 pF de capacitancia oculta y no excede nuestra máxima constante de tiempo permitido.

Las resistencias en serie deben estar lo más cerca posible de todos los pines que impulsan el bus. Esto supone que todas las demás patillas del bus serán entradas CMOS cuando se esté conduciendo. Para las líneas que solo son manejadas por un solo pin (como la línea del reloj, que solo es manejada por el maestro), ponga 47 pF lo más cerca posible después de la resistencia. Para líneas que pueden ser manejadas por diferentes pines en diferentes momentos (como MISO), coloque el 47 pF en algún lugar cerca de la mitad de todos los controladores. Cada línea obtiene solo un condensador de 47 pF, independientemente de la cantidad de controladores, pero hay una resistencia para cada controlador.

Para comenzar, los cálculos anteriores son una buena guía. Algunos parámetros no se pueden conocer y, por lo tanto, se deben contabilizar por adelantado. Comience con el 330 Ω en serie y 47 pF a tierra, pero no tenga miedo de cambiar las cosas basándose en los resultados reales observados.

    
respondido por el Olin Lathrop
2

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

Si uno no desea que las señales se reflejen cuando llegan al destino, puede usar la terminación final. Esto hará que la señal se absorba limpiamente en el destino sin que se refleje, 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 útiles si en su lugar inserta una resistencia en serie en la fuente de la señal. Si no hay un receptor en el extremo lejano de la línea, la señal se reflejará cuando llegue allí, pero cualquier reflejo de este tipo será absorbido por la fuente en lugar de reflejado nuevamente. Tenga en cuenta también que la terminación de la fuente no impone una carga de CC en el dispositivo que controla la línea.

En ausencia de terminación, si una línea es impulsada por una baja impedancia y se recibe 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 fuente la impedancia de conducción es cero y la impedancia de recepción es infinita). Si la fuente o el receptor están terminados correctamente, el voltaje recibido será casi igual al voltaje del variador (si una fuente de impedancia cero controlara un receptor de impedancia adecuada, o si una fuente de impedancia adecuada impulsara un receptor de impedancia infinita, la tensión recibida será igual a la tensión de la unidad). Si ambos están terminados correctamente, el voltaje de recepción será la mitad del voltaje del variador.

La simulación aquí lo demuestra. Incluye un generador de impulsos que produce una cadena de impulsos aproximadamente 49 veces por segundo, dos líneas de retardo de 5 ms en serie (tiempo de ida y vuelta de 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 fuente y la terminación del destino. Para aquellos, "arriba" representa una buena terminación y "abajo" representa una mala. El interruptor superior controla si la línea debe ser manejada por un generador automático de impulsos o por una entrada lógica manual. Para enviar pulsos hacia abajo de la línea manualmente, cambie el interruptor superior "abajo" y luego marque la "L" junto a él.

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

    
respondido por el supercat
0

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 de series desde la salida del destino del reloj SPI a tierra. La terminación consumirá aproximadamente 30 mA durante el tiempo de borde, algo que puede hacer fácilmente, pero de lo contrario, cero corriente. Para la línea de datos bidireccional se vuelve un poco más complicado. Puse una terminación de 470 pF, 220 ohmios de CA en el extremo maestro y esclavo de la línea de datos SPI y eso funciona, es decir, sobrepasar y sobrepasar de manera aceptable.

Doy la bienvenida a los comentarios sobre esto.

    
respondido por el ken
0

No profundizar demasiado en los detalles ya que las publicaciones anteriores dieron en el clavo en la cabeza. Todo se reduce a que SPI sea líneas desequilibradas. Incluso si tiene una frecuencia de reloj baja, los bordes del reloj rápido ns deben ser respetados. En mi caso, encontré una resistencia de 470 ohmios en serie con la línea SPI CLK en el lado Maestro. Eliminando 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 del esclavo, ajusté las tapas del filtro en consecuencia) Pude extender la longitud de mi cable de comunicaciones SPI desde 10 cm a 160 cm sin errores de comunicación:

www.latticesemi.com% 2F ~% 2Fmedia% 2FLatticeSemi% 2FDocuments% 2FWhitePapers% 2FHM% 2FImprovingNoiseImmunityforSpañe en el juego de la computadora por el que se trata en el contenido de la computadora     

respondido por el Ben

Lea otras preguntas en las etiquetas