Comunicazione Board to Board a breve distanza


24

La mia MCU esegue un bus SPI con circa 4 dispositivi. Vorrei estendere questo bus anche fuori scheda, ovvero avere alcuni PCB collegati alla scheda "principale" ed estenderne la funzionalità. La distanza "pad to pad" sarebbe:

lunghezza della traccia della scheda madre + lunghezza del cavo + lunghezza della traccia sulla scheda di estensione

3 "+ 6" + 3 "= circa 12"

Nella mia esperienza, anche un segnale da 1 MHz, con tempi di salita di circa 7 ns, su questa distanza tramite un cavo a nastro stava superando di oltre 1 V (ma non c'era un suono eccessivo). Le schede saranno alimentate dallo stesso alimentatore.

inserisci qui la descrizione dell'immagine

Nota: qui non puoi vedere i tempi di salita ma puoi vedere l'eccessivo superamento - questo è un segnale da 3,3 V. E sì, questo è stato misurato correttamente con un filo molto corto dalla sonda a terra. Proprio come è spesso consigliato su questo sito. Non credo sia un errore di misurazione.

Vorrei che il sistema funzionasse a 4 MHz ma anche 2 MHz è accettabile. Il max. il numero di schede che mi piacerebbe connettere sarebbe circa 4 e questo estenderebbe il bus SPI per avere circa 12 dispositivi. Non penso che sarebbe troppo difficile da gestire tramite codice poiché ho già qualcosa che funziona in questo modo. Anche avere le linee di selezione slave aggiuntive non è un problema.

Tuttavia, la mia preoccupazione è come inviare i dati SPI da una scheda all'altra. Devo semplicemente inviare SPI direttamente o convertirlo in LVDS a un'estremità e poi riconvertirlo in SPI all'altra estremità?


1
Qual è il tuo tempo di salita?
Kortuk,

@Kortuk Dimenticato completamente di elencarlo, scusa. Aggiornato la domanda.
Saad,

7nS tempo di salita, che sta urlando velocemente.
Kortuk,

Ci scusiamo per due domande irrilevanti ... 1. qual è l'oscilloscopio che hai usato? 2. Perché gli anelli contano così tanto?
richieqianle,

Risposte:


15

La regola empirica afferma che è necessario calcolare gli effetti della linea di trasmissione se la lunghezza della connessione è superiore a 1/10 della lunghezza d'onda del segnale.

inserisci qui la descrizione dell'immagine

Le linee di trasmissione causeranno riflessi laddove mostrano un improvviso cambiamento di impedenza. Il segnale riflesso si aggiunge all'originale, potrebbe riflettersi di nuovo sul lato del trasmettitore e in questo modo andare avanti e indietro. Il risultato è mostrato nel grafico: il superamento di cui stai parlando e alcuni squilli.

Una lunghezza del filo di 12 "(30 cm) è 1/10 di una lunghezza d'onda di 3 m, o 100 MHz. 1 MHz e 1 MHz non dovrebbe dare molti problemi qui. Terminare la linea, come dice Wouter, potrebbe essere una prima misura, però. l'ingresso è probabilmente un'alta impedenza, e non è mai una buona corrispondenza. Dato che hai tre diversi pezzi nella tua connessione (PCB, filo, PCB) trovare l'impedenza caratteristica sarà difficile (sarà anche diverso per il PCB e il filo, quindi a frequenze molto elevate si otterrebbero anche riflessi sulle connessioni del cavo.) Data la breve lunghezza e la bassa frequenza, il valore della resistenza terminale non è critico.ΩΩ resistenza per cominciare, e vedere fino a che punto ci arriva.

modifica (ri domanda aggiornamento) Il
tempo di salita sembra essere 7 ns. È veloce, come dice Kortuk, significa che hai uno spettro di almeno 400 MHz e quelle armoniche subiranno effettivamente effetti sulla linea di trasmissione, anche se il tuo orologio è solo 1 MHz. Prova a filtrarli, una larghezza di banda di 20 MHz (80 MHz per l'orologio a 4 MHz) ti dà un tempo di salita più che sufficiente. Si tratta di un'onda quadra da 1 MHz filtrata con un LPF a muro a 20 MHz:

inserisci qui la descrizione dell'immagine

Posizionare un resistore in serie formerà un LPF del primo ordine con la capacità della linea. Se lo stimiamo a 50pF, allora

R=12π100MHz50pF=32Ω

Ω


2
La frequenza 1MHz è irrilevante. È importante il tempo di salita.
Rocketmagnet,

@stevenvh, ho provato ad aggiungere una resistenza da 1K a terra a destinazione. Ha aiutato con i picchi ma ha anche abbassato un po 'il livello del segnale. È normale? Quando dico il livello in cui il segnale si stabilizza. Ho anche provato 500 Ohm, 220 Ohm stesso effetto ma più pronunciato.
Saad,

@Saad - Quanto costa un po '? 3.3V in 1k è solo 3mA, il driver dovrebbe essere perfettamente in grado di fornirlo. Potrebbe avere una certa resistenza interna, ma sono poche decine di ohm, quindi il livello dovrebbe scendere solo del 2 o 3%.
Stevenvh,

@stevenvh Ho dimenticato di resistere in serie sulla linea, quindi ovviamente lascerò cadere un po 'di tensione. Sciocco me! Tuttavia, anche una resistenza da 180 Ohm non ha aiutato molto. Ha portato il superamento a 4,5 V. Immagino che avrò bisogno di una resistenza molto più bassa, ma poi devo preoccuparmi del sorteggio attuale.
Saad,

Inoltre, dovrei considerare la risoluzione attiva? L'uso di una bassa resistenza aumenterà i requisiti di alimentazione dell'intera scheda e poiché il bus è sempre operativo, aumenta il consumo di energia. L'uso dei diodi Schottky come morsetti funzionerebbe bene?
Saad,

6

Per un bus così corto, proverei a mettere un piccolo resistore in serie con qualsiasi cosa guida una linea. Questo non è il modo ideale teorico che tiene conto della teoria della linea di trasmissione, ma un approccio pragmatico che penso funzionerà abbastanza bene per il tuo caso. Prova 47 Ω per i principianti e guarda cosa succede. Se questo aiuta ma non abbastanza, puoi andare più in alto ma non supererei 120 Ω. È probabile che da qualche parte in quell'intervallo troverai un valore che funziona abbastanza bene.


Ho provato questo approccio, Olin. Ho usato una resistenza da 100 Ohm e ha lasciato cadere il superamento di circa 500 mV e lo ha portato a 4,3 V da 4,7 V. Questo è ancora un volt sopra 3,3 V! Il tempo di salita era quindi di 12 ns rispetto al 7 iniziale.
Saad,

Sembra che stavo calcolando il mio resistore mentre hai pubblicato la tua risposta, Olin. Mi dispiace per quello
Stevenvh

@OlinLathrop Ho aumentato la resistenza in serie a 330 ohm e ha portato il superamento a 3,7 V. Sono abbastanza contento di questo. Il tempo di salita è stato di 10 ns. Dovrei semplicemente attenermi a questo o mettere resistori di terminazione sulla prossima revisione della scheda? Lo chiedo perché mi hai consigliato di non superare i 120 Ohm.
Saad,

@Saad: ero preoccupato per l'effetto di altri carichi sulla linea e diventavo sensibile al rumore. Se i segnali sono puliti e non ci sono carichi CC (solo ingressi CMOS ad alta impedenza, ad esempio) sulle linee, quindi andare avanti e utilizzare i 300 Ohm.
Olin Lathrop,

4

AFAIK il superamento può essere eliminato dalla terminazione dell'elica, se il conducente può guidare il carico. Altrimenti alcune coppie di driver / ricevitori dedicati come LVDS o forse anche RS485 lo faranno sicuramente.


+1: usiamo spesso LVDS per trasportare segnali SPI.
Jason S,

1

Ho avuto seri problemi in passato con SPI su cavi a nastro, anche se molto più lunghi di quelli che descrivi. L'immunità al rumore divenne un vero problema e i comandi corrotti finirono per arrivare alle mie periferiche. È bastato fallire il test di immunità al rumore CE. In caso di problemi a questo proposito in seguito, ti consiglio di mettere un MCU separato su ciascuna scheda e di collegarli tramite CANbus.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.