27 votos

Consideraciones sobre la terminación del bus SPI

Así que, en mi pregunta anterior He preguntado sobre el uso del bus SPI a corta distancia para la comunicación entre placas. Me recomendaron que probara con 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 esta era 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].

Haciendo algunas pruebas básicas, descubrí que una resistencia de 1K apenas reducía el rebasamiento. 470 Ohms y 180 Ohms funcionaron mejor. Cuanto más bajo iba, mejor funcionaba. Con 180 Ohms, el sobreimpulso era de un voltio o un poco menos. Ahora, desafortunadamente, no puedo bajar mucho más que eso porque la corriente es más de lo que mi MCU puede manejar. Arreglé el problema, en la revisión actual de la placa, usando una resistencia de 330 Ohm en serie. Esto llevó el exceso de velocidad 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 placa, ¿debería colocar búferes robustos en las líneas? Encontrar un buffer no es realmente un problema, pero el consumo de corriente aumentará significativamente - Tengo 8 dispositivos en el SPI que necesitan terminación y 3 líneas que están siempre activas van a cada uno. Un ejemplo, SCK va a los 8 dispositivos. Cada dispositivo tendrá, digamos, una resistencia de terminación de 100 Ohm. Así que el consumo de corriente es de 12 * 3,3/100 = 390 mA.

¿Cuál es el mejor recurso en este caso? ¿Debo optar por la "terminación activa" utilizando diodos Schottky como pinzas?

EDIT: En cuanto a la impedancia de la línea: Como mencioné anteriormente, la intención es conectar 4 placas externas. La distancia entre pads 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 alrededor de una pulgada (o menos) y hay muy poco sobreimpulso (300 o mV). Las trazas que van a las placas externas son aproximadamente de la misma longitud y anchura. La segunda capa en mi placa es un plano de tierra sin romper.

47voto

Hablar de la terminación de la señal es como abrir una lata de gusanos. Se trata de un tema ENORME que es difícil de resumir en 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 las resistencias de terminación en la red. De hecho, yo diría que la mayor parte de lo que se encuentra en la red es erróneo o engañoso. Algún día escribiré algo grande y lo publicaré en mi blog, pero hoy no.

Lo primero que hay que tener en cuenta es que el valor de la resistencia a utilizar para la terminación debe estar relacionado con la impedancia de la traza. La mayoría de las veces el valor de la resistencia es el mismo que la impedancia de la traza. Si no sabes cuál es la impedancia de la traza, debes averiguarlo. Hay muchos calculadoras de impedancia en línea disponible. Si buscas en Google, encontrarás docenas más.

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

Hay muchos tipos de terminación, pero a grandes rasgos podemos clasificarlos en dos categorías: La terminación en origen y la terminación final. La terminación en origen está en el conductor, la terminación final está en el extremo más alejado. Dentro de cada categoría, hay muchos tipos de terminación. Cada tipo es mejor para diferentes usos, y no hay un tipo que sirva para todo.

Su terminación, una sola resistencia a tierra en el extremo más alejado, no es muy buena. De hecho, está mal. La gente lo hace, pero no es lo ideal. Lo ideal sería que esa resistencia fuera a un riel de alimentación diferente a la mitad de tu riel de alimentación. Así que si el voltaje de E/S es de 3,3v entonces esa resistencia no irá a GND, sino a otro raíl de alimentación a la mitad de 3,3v (también conocido como 1,65v). El regulador de voltaje para este carril tiene que ser especial porque necesita una fuente Y corriente de disipación, mientras que la mayoría de los reguladores sólo son fuente de 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 de la mayoría de las terminaciones es que consumen mucha corriente. Hay una razón para esto, pero no voy a entrar en ella. Para el uso de baja corriente debemos buscar la terminación en la fuente. La forma más fácil y común de terminación de fuente es una simple resistencia en serie a la salida del controlador. El valor de esta resistencia es el mismo que la impedancia de la traza.

La terminación en origen funciona de forma diferente a la terminación final, pero el efecto neto es el mismo. Funciona controlando las reflexiones de la señal, no evitando las reflexiones en primer lugar. Por ello, sólo funciona si la salida de un conductor alimenta una sola carga. Si hay varias cargas, entonces hay que hacer algo más (como usar una terminación final o varias resistencias de terminación de fuente). La gran ventaja de la terminación en origen es que no carga el controlador como lo hace la terminación final.

He dicho antes que tu resistencia en serie para la terminación de la fuente debe estar situada en el conductor, y debe tener el mismo valor que la impedancia de tu traza. Eso fue una simplificación excesiva. Hay un detalle importante que hay que saber sobre esto. La mayoría de los controladores tienen cierta resistencia en su salida. Esa resistencia suele estar en el rango de 10-30 ohmios. La suma de la resistencia de salida y su resistencia debe ser igual a la impedancia de su traza. Digamos que tu traza es de 50 ohmios, y tu driver tiene 20 ohmios. En este caso tu 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 driver, entonces puedes asumir que es de 20 ohmios - entonces mira las señales en la PCB y ve si necesita ser ajustada.

Otra cosa importante: cuando mire estas señales en un o-scopio DEBE sondear en el receptor. Si sondea en cualquier otro lugar, probablemente obtendrá una forma de onda distorsionada y le hará pensar que las cosas están peor de lo que realmente están. Además, asegúrese de que su pinza de tierra sea lo más corta 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.

19voto

RelaXNow Puntos 1164

Dado que vas a recorrer distancias cortas, no creo que las resistencias de terminación sean una buena idea. Como has comprobado, tienen que ser bastante bajas para hacer el trabajo, y luego la línea consume mucha corriente y la tensión se atenúa por 2 si también conduces la línea con la misma impedancia.

Tu tasa de reloj no es tan alta, así que las frecuencias que necesitas para soportar incluso una tasa de bits de 4 MHz no son las que causan el problema. El problema es que tienes bordes rápidos conduciendo las líneas, que tienen armónicos en los 100s de MHz, que sí causan el problema. A las frecuencias que deseas, tienes un sistema de bultos, no una línea de transmisión. Esto facilita considerablemente las cosas.

Por lo tanto, la solución es atenuar las frecuencias altas que no se necesitan realmente pero que causan problemas. Esto se puede hacer con un simple filtro de paso bajo R-C inmediatamente después de cualquier cosa que conduzca una línea. Esto es en parte lo que hacen ahora las resistencias de 330 Ω. Ellos forman un filtro de paso bajo con la capacitancia parásita de la línea. Aparentemente eso no es suficiente y/o no es suficientemente predecible. Esto puede ser arreglado con alguna capacitancia deliberada en cada línea.

Quieres que el bus funcione a 4 MHz, lo que significa que la señal más rápida que debe 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 98% de tiempo de asentamiento. Eso significa que la máxima constante de tiempo que queremos permitir es de 31 ns. 31ns / 330Ω = 94 pF. Esa es la carga total en las resistencias en serie de 330 Ω que necesitas para obtener la constante de tiempo de 31 ns. Siempre habrá alguna capacitancia parásita que no puedes predecir, así que yo vería cómo quedan las cosas con 47 pF. Eso deja espacio para 10-20 pF de capacitancia oculta mientras no se excede 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 del bus serán entradas CMOS cuando uno esté conduciendo. Para las líneas que sólo son conducidas por un solo pin (como la línea de reloj, que sólo es conducida por el maestro), pon los 47 pF tan cerca como sea posible después de la resistencia. Para las líneas que pueden ser manejadas por diferentes pines en diferentes momentos (como MISO), pon los 47 pF en algún lugar cerca del medio de todos los conductores. Cada línea tiene un solo condensador de 47 pF sin importar el número de controladores, pero hay una resistencia para cada controlador.

Los cálculos anteriores pretenden ser una buena guía para empezar. Algunos parámetros no se pueden conocer y, por tanto, se tienen en cuenta de antemano. Comience con los 330 Ω en serie y 47 pF a tierra, pero no tenga miedo de cambiar las cosas sobre la base de los resultados reales observados.

5voto

Alex Andronov Puntos 178

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 no se desea que las señales se reflejen al llegar al destino, se puede utilizar 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, se pueden conseguir resultados igual de útiles en la práctica si se inserta una resistencia en serie en la fuente de la señal. Si no hay un receptor en el extremo más alejado de la línea, la señal se reflejará cuando llegue allí, pero dicha reflexión será absorbida por la fuente en lugar de ser retransmitida. 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 una tensión mayor que la tensión de conducción (en teoría, hasta el doble de la tensión, si la impedancia de conducción de la fuente es cero y la impedancia de recepción es infinita). Si la fuente o el receptor están bien terminados, la tensión recibida será casi igual a la tensión de conducción (si una fuente de impedancia cero conduce un receptor de impedancia adecuada, o una fuente de impedancia adecuada conduce un receptor de impedancia infinita, la tensión recibida será igual a la tensión de conducción). Si ambos están correctamente terminados, la tensión de recepción será la mitad de la tensión de accionamiento.

La simulación aquí lo demuestra. 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; haz clic en uno para cambiar su estado. Los dos interruptores inferiores controlan la terminación de origen y destino. Para ellos, "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 pulsos automático, o por una entrada lógica manual. Para enviar pulsos por la línea de forma manual, conmuta el interruptor superior a "abajo", y luego marca la "L" junto a él.

Las señales que llegan al destino serán limpias si o bien el origen o el destino está correctamente terminado. Si ambos están correctamente terminados, la tensión de la señal recibida será la mitad de la tensión de accionamiento. Si uno de ellos está correctamente terminado pero el otro no, la tensión recibida será aproximadamente el 91% de la tensión de accionamiento (las resistencias "malas" están "equivocadas" por un factor de diez, y por tanto no absorben aproximadamente (10/11) de la energía). Si ninguna de las dos está terminada, la tensión recibida será inicialmente unas 1,656 veces la tensión de accionamiento, pero aparecerán reflexiones extrañas cada 20ms.

1voto

whostheboss1990 Puntos 11

Prueba con una terminación AC (por ejemplo un condensador de 470 pF en serie con una resistencia de 110 Ohm) y conecta esta combinación en serie desde la salida del destino del Reloj SPI a tierra. La terminación consumirá unos 30 mA durante el tiempo de flanco algo que puede hacer fácilmente, pero cero corriente en caso contrario. Para la línea de datos bidireccional se pone un poco más complicado. Puse una terminación de CA de 470 pF, 220 Ohm en el extremo maestro y esclavo de la línea de datos SPI y eso funciona, es decir, sobreimpulso y subimpulso aceptables.

Agradezco los comentarios al respecto.

1voto

Ahmadreza Momeni Puntos 123

No voy a profundizar demasiado en los detalles ya que los posts anteriores han dado en el clavo. Todo se reduce a que el SPI es una línea desequilibrada. Incluso si usted tiene una baja frecuencia de reloj de los bordes de reloj ns rápidos deben ser respetados. En mi caso encontré una resistencia de 470 ohmios en serie con la línea SPI CLK en el lado del Maestro. Quitando esa resistencia e implementando la solución recomendada para líneas no balanceadas de Lattice y las sugerencias publicadas arriba (sólo pude implementar la mitad de la solución desde el lado Esclavo, ajustando las tapas de filtro en consecuencia) fui capaz de extender la longitud de mi cable de comunicaciones de cinta SPI de 10cm a 160cm sin errores de comunicación:

Mejora de la inmunidad al ruido para la interfaz en serie : Un libro blanco de Lattice Semiconductor (julio de 2014)

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