Communication de carte à carte courte distance

24

Mon MCU utilise un bus SPI avec environ 4 appareils. J'aimerais étendre ce bus pour qu'il soit également hors carte, c'est-à-dire que certains PCB soient connectés à la carte "principale" et étendent les fonctionnalités. La distance "pad to pad" serait:

longueur de trace de la carte principale + longueur de câble + longueur de trace sur la carte d'extension

3 "+ 6" + 3 "= environ 12"

D'après mon expérience, même un signal de 1 MHz, avec environ 7 ns de temps de montée, sur cette distance via un câble ruban dépassait de plus de 1 V (mais il n'y avait pas de sonnerie excessive). Les cartes seront alimentées par la même alimentation.

entrez la description de l'image ici

Remarque: Vous ne pouvez pas voir les temps de montée ici, mais vous pouvez voir le dépassement excessif - il s'agit d'un signal de 3,3 V. Et oui, cela a été mesuré correctement avec un fil très court de la sonde à la terre. Tout comme il est souvent recommandé sur ce site. Je ne pense pas que ce soit une erreur de mesure.

J'aimerais que le système fonctionne à 4 MHz, mais 2 MHz est également acceptable. Le max. le nombre de cartes que je souhaite connecter serait d'environ 4, ce qui étendrait le bus SPI à 12 appareils environ. Je ne pense pas que ce serait trop difficile à gérer via du code car j'ai déjà quelque chose qui fonctionne comme ça. Avoir les lignes de sélection d'esclaves supplémentaires n'est pas non plus un problème.

Cependant, ma préoccupation est de savoir comment envoyer les données SPI d'une carte à une autre. Dois-je simplement envoyer SPI directement ou le convertir en LVDS à une extrémité, puis le reconvertir en SPI à l'autre extrémité?

Saad
la source
1
Quel est votre temps de montée?
Kortuk
@Kortuk J'ai complètement oublié de lister cela, désolé. Mis à jour la question.
Saad
Temps de montée 7nS, qui crie vite.
Kortuk
Désolé pour deux questions non pertinentes .. 1. quel est l'oscilloscope que vous avez utilisé? 2. Pourquoi les anneaux sont-ils si importants?
richieqianle

Réponses:

15

La règle générale dit que vous devez calculer les effets de la ligne de transmission si la longueur de votre connexion est supérieure à 1 / 10e de la longueur d'onde du signal.

entrez la description de l'image ici

Les lignes de transmission provoquent des réflexions là où elles montrent un changement soudain d'impédance. Le signal réfléchi s'ajoute à l'original, peut se refléter à nouveau du côté de l'émetteur, et ainsi aller et venir. Le résultat est montré dans le graphique: le dépassement dont vous parlez, et quelques sonneries.

ΩΩ résistance pour commencer, et voir jusqu'où cela nous mène.

edit (re question update) Le
temps de montée semble être de 7ns. C'est rapide, comme le dit Kortuk, cela signifie que vous avez un spectre d'au moins 400 MHz, et ces harmoniques subiront en effet des effets de ligne de transmission, même si votre horloge n'est qu'à 1 MHz. Essayez de les filtrer, une bande passante de 20 MHz (80 MHz pour l'horloge de 4 MHz) vous donne plus que suffisamment de temps de montée. Il s'agit d'une onde carrée de 1 MHz filtrée avec un LPF de mur de briques à 20 MHz:

entrez la description de l'image ici

Le placement d'une résistance série formera un LPF de premier ordre avec la capacité de la ligne. Si nous estimons qu'à 50pF alors

R=12π100MHz50pF=32Ω

Ω

Stevenvh
la source
2
La fréquence de 1 MHz n'est pas pertinente. C'est le temps de montée qui est important.
Rocketmagnet
@stevenvh, J'ai essayé d'ajouter une résistance 1K à la masse à la destination. Cela a aidé avec les pointes mais a également fait baisser un peu le niveau du signal. Est-ce normal? Quand je dis le niveau où le signal se stabilise. A également essayé 500 Ohms, 220 Ohms même effet mais plus prononcé.
Saad
@Saad - Combien coûte un peu? 3,3 V en 1k n'est que de 3 mA, le conducteur devrait être parfaitement capable de fournir cela. Il peut avoir une certaine résistance interne, mais cela fait quelques dizaines d'ohms, donc le niveau ne devrait baisser que de 2 ou 3%.
stevenvh
@stevenvh J'ai oublié que je résistances en série sur la ligne, donc évidemment je vais laisser tomber une certaine tension. Que je suis bête! Cependant, même une résistance de 180 Ohms n'a pas beaucoup aidé. Cela a amené le dépassement à 4,5 V. Je suppose que j'aurai besoin d'une résistance beaucoup plus faible, mais je dois alors m'inquiéter du tirage actuel.
Saad
Dois-je également envisager une résiliation active? L'utilisation d'une faible résistance augmentera les besoins en énergie sur l'ensemble de la carte et, comme le bus fonctionne à tout moment, il augmente la consommation d'énergie. L'utilisation de diodes Schottky comme pinces fonctionnerait-elle bien?
Saad
6

Pour un bus aussi court, j'essaierais de mettre une petite résistance en série avec tout ce qui entraîne une ligne. Ce n'est pas la manière idéale théorique de prendre en compte la théorie des lignes de transmission, mais une approche pragmatique qui, je pense, fonctionnera assez bien pour votre cas. Essayez 47 Ω pour commencer et voyez ce que cela fait. Si cela aide mais pas assez, vous pouvez aller plus haut mais je ne dépasserais pas 120 Ω. Les chances sont que quelque part dans cette plage, vous trouverez une valeur qui fonctionne assez bien.

Olin Lathrop
la source
J'ai essayé cette approche, Olin. J'ai utilisé une résistance de 100 Ohms et elle a baissé le dépassement d'environ 500 mV et l'a ramené à 4,3 V contre 4,7 V. C'est toujours un volt supérieur à 3,3 V! Le temps de montée était alors de 12 ns par rapport au 7 initial.
Saad
On dirait que je calculais ma résistance pendant que tu publiais ta réponse, Olin. Désolé à ce sujet
stevenvh
@OlinLathrop J'ai augmenté la résistance série à 330 Ohms et cela a porté le dépassement à 3,7 V. J'en suis assez content. Le temps de montée était de 10 ns. Dois-je simplement m'en tenir à cela ou mettre des résistances de terminaison sur la prochaine révision de la carte? Je vous le demande car vous avez recommandé de ne pas dépasser 120 Ohms.
Saad
@Saad: J'étais inquiet de l'effet des autres charges sur la ligne et de la sensibilité au bruit. Si les signaux sont propres et qu'il n'y a pas de charges CC (juste des entrées CMOS à haute impédance, par exemple) sur les lignes, alors allez-y et utilisez les 300 Ohms.
Olin Lathrop
4

AFAIK le dépassement peut être éliminé par une terminaison propper, si votre conducteur peut conduire la charge. Sinon, une paire pilote / récepteur dédiée comme LVDS ou peut-être même RS485 fera certainement l'affaire.

Wouter van Ooijen
la source
+1: nous utilisons fréquemment LVDS pour transporter des signaux SPI.
Jason S
1

J'ai eu de graves problèmes dans le passé avec SPI sur des câbles plats, bien que ceux-ci soient beaucoup plus longs que ce que vous décrivez. L'immunité au bruit est devenue un vrai problème et des commandes corrompues ont fini par arriver sur mes périphériques. Il suffisait d'échouer aux tests d'immunité au bruit CE. Si vous rencontrez des problèmes à cet égard plus tard, je vous recommande de mettre un MCU distinct sur chaque carte et de les connecter via CANbus.

Stephen Collings
la source