Frage:
1 kHz Takt über langes Kabel
Geoxion
2019-11-01 14:34:34 UTC
view on stackexchange narkive permalink

Ich werde einen Draht haben, der bis zu 1000 m lang ist und an den viele Knoten angeschlossen sind. Die Leitung verläuft entlang eines CAN-Busses und einer Erdungsleitung und muss ein 1-kHz-Rechteckwellen-Taktsignal mit 50% Einschaltdauer zu jedem Knoten transportieren.

Ich werde dies von einem 3,3-V-Mikrocontroller ausführen und das Signal wird auch von einem 3,3-V-Mikrocontroller und einer Zeitmessschaltung empfangen.

Kurz gesagt, die Uhr wird als globale Zeit verwendet und die Zeitmessschaltung bestimmt die Zeitdifferenz zwischen einem Ereignis und der Taktflanke. Diese Schaltung kann mit einer Genauigkeit von etwa 0,1 ns messen. Das ideale Szenario besteht darin, dass die Uhr so ​​genau ist wie die Zeitmessschaltung.

Jede Verzögerung vom Master zu einem Knoten wird gemessen / bekannt und berücksichtigt.

Was kann ich tun, um die Zuverlässigkeit und Stabilität dieses Kabels / Signals zu erhöhen?

Da es sich um eine sehr langsame Uhr handelt, stelle ich mir vor, dass keine umfangreichen Arbeiten durchgeführt werden müssen und dass etwas Einfaches wie ein Schmitt-Trigger an den Knoten in Ordnung wäre.


Hier ist ein Diagramm:

block diagram

Um die Verzögerungen für alle Knoten zu messen, verhindert der Master, dass alle Knoten arbeiten (Über CAN kommuniziert es das). Dann fordert es den ersten Knoten auf, das Signal zu reflektieren, das er über die andere Leitung empfangen wird. Alle anderen Knoten lassen die Drähte jetzt schweben.

Der Master setzt sein rechtes Kabel hoch und löst den Start der Zeitschaltung aus. Nach einiger Verzögerung gelangt das Signal zum Knoten, der es dann auf der zweiten Leitung durchlässt. Nach einer weiteren Verzögerung erhält der Master sie zurück, wodurch die Zeitschaltung gestoppt wird.

Jetzt kann der Master den Zeitschaltkreiswert lesen und die Verzögerung bestimmen. Wenn alle Knotenverzögerungen bekannt sind, startet der Master die Operation. Alle Knoten lassen den Rückleitungsdraht schwebend und nehmen den Taktdraht (Master rechts) als Eingang.

Wenn ein Ereignis an einem der Knoten auftritt, wird die Zeitschaltung ausgelöst. Der nächste Takt der Uhr stoppt den Zeitkreis. Wir kennen jetzt die Zeit zwischen dem Beginn des Ereignisses und dem nächsten Takt. Der Knoten sendet zurück, bei welcher Taktzahl das Ereignis erkannt wurde und wie viel Zeit die Zeitschaltung anzeigt.Zusammen mit den gemessenen Verzögerungen kann der Master die globale Zeit des Ereignisses abrufen.

Oh, welche Genauigkeit ist akzeptabel: Das Ziel ist 1 ns, würde sich über 3 ns freuen und wäre mit 10 ns in Ordnung.Abhängig vom endgültigen Design des Systems besteht möglicherweise die Möglichkeit, dass das Ereignis mehrmals ausgelöst wird und die Ergebnisse gemittelt werden, was ebenfalls die Genauigkeit verbessern würde.

Das eigentliche Timing wird nicht von mir, sondern von TI festgelegt. TDC7200

Die Anwendung ist TDOA.Die Ereigniszeiten werden in einen Algorithmus eingespeist, um zu bestimmen, woher das Ereignis stammt.Das Ereignis ist die Erkennung eines Funksignals (was ebenfalls eine Herausforderung sein wird, um so genau zu werden, wie ich möchte).

* Weil es ein sehr langsamer Takt ist * Es ist ** aber ** eine 1-kHz-Rechteckwelle enthält ** Harmonische ** und diese können sich bis zu sehr hohen Frequenzen erstrecken (GHz ist möglich), vorausgesetzt, die Steigungen von 1 kHz sind steil genug.Diese hochfrequenten Harmonischen können an den Enden Ihres Kabels ** reflektieren ** und Ihre schöne 1-kHz-Rechteckwelle verzerren!Begrenzen Sie also die Bandbreite und schließen Sie das Kabel mit seiner charakteristischen Impedanz ab.
Was wichtiger als die Frequenz ist, ist daher die Bandbreite: Wie ** schnell ** benötigen Sie die Flanken Ihrer Uhr, um am Empfänger zu sein?Wie gut auf den Dosenbus abgestimmt?
(Hier müssen noch viele weitere Fragen aufgeworfen werden: Jitter- / Stabilitätsanforderungen für die Uhr, Allen dev und vieles mehr: Also: Was ist Ihr Anwendungsfall für die 1-kHz-Uhr?)
@MarcusMüller Die Idee war, eine Hauptuhr für die Zeitmessung und die darauf folgenden Knoten zu haben.Der Haupttakt würde seinen Takt von einem genauen Quarzoszillator erhalten und das Timer-Peripheriegerät des Mikrocontrollers verwenden, um ihn auf 1 kHz zu skalieren. Die Knoten verwenden die Uhr für die Zeitsynchronisation.(Verzögerung wird berücksichtigt)
Ok, das macht die 1-kHz-Frequenz etwas umständlich;jedoch: Was ist der Zweck der Synchronisation hier?Wie genau muss es sein?Wie wollen Sie Verzögerungen berücksichtigen?
(Übrigens, bitte fügen Sie diese Verwendungsinformationen zu Ihrer Frage hinzu; sie ändert viele der Dinge, die ich in Betracht gezogen habe!)
Wie in einer der Antworten berücksichtigt, sind RS-485-Treiber / Empfänger und Twisted Pair für große Entfernungen gedacht.Ein Treiber für Multidrop-Hochgeschwindigkeitskommunikation über 40 m wird bei 1 kHz und 1000 m hart gedrückt.Geschweige denn Stichlänge.
Es kann einfacher sein, dies zu vereinfachen, indem die Berechnung in zwei Schritten durchgeführt wird.Lassen Sie alle Knoten die Zeiten der Ereignisse in einem lokalen Zeitsystem mit einer ausreichend hohen Genauigkeit berechnen.Lassen Sie die Knoten gleichzeitig eine Zeitschaltung verwenden, um das Verhalten der lokalen Uhren (d. H. Drift) zu quantifizieren.Dies gibt Ihnen viel Zeit für die Durchführung von Taktdifferenzmessungen und ermöglicht die Nachbearbeitung, um Ausreißer zu entfernen.Es macht es auch einfach, Testsignale zu verwenden, um Ihr System wie die Schindeln eines Filmregisseurs zu kalibrieren
Ich empfehle, Datenblätter und Anwendungshinweise zu Jitter-Reinigern zu lesen
Sechs antworten:
#1
+17
Marcus Müller
2019-11-01 15:24:25 UTC
view on stackexchange narkive permalink

Das erste Problem ist also, dass Sie dieses lange Kabel verlegen müssen! Ein 1 km langes Stück Draht ist einfach eine große Last, und es fällt Ihrem Mikrocontroller-Ausgang schwer, die Spannung zuverlässig zu ändern.

Stellen Sie sich vor, dass der Draht als Kondensator von Draht zu Masse durch seine Umgebung verläuft. Sie benötigen also einen starken output-Treiber.

Sie möchten, dass eine Abschlusslast am Empfänger angesteuert wird, die relativ stark ist (also vielleicht 75 Ω bis 120 Ω oder so).

Sie möchten eine geeignete Filterung am Empfänger, um die ursprüngliche Uhr zu extrahieren.

Sie möchten eine etwas abgeschirmte Verkabelung, um nicht 1000 m Funkantennenempfang zu empfangen.

mit vielen damit verbundenen Knoten

Das bedeutet, dass diese vielen Knoten einen eigenen Empfänger benötigen. Sie können nicht in jedem dieser Knoten einen starken Terminator einfügen (die Belastung des Treibers würde enorm werden), aber wenn Sie dies nicht tun, werden Sie an diesen Knoten schreckliche Probleme mit der Signalqualität bekommen.

Für mich klingt das so, als würden Sie wirklich einen Multi-Drop-Bus bauen wollen ... wie CAN!

Oder Sie möchten die Uhr an jedem Knoten empfangen, neu generieren (Schmitt-Trigger?) und erneut senden - verketten Sie sie, anstatt einen linearen Bus zu verwenden.

läuft bis zu 1000 m

Äh, das ist wirklich der Rand dessen, was CAN bei lächerlich niedrigen Bitraten noch unterstützt (und nicht alle Geräte unterstützen die niedrigste CAN-Rate, IIRC; überprüfen Sie dies, bevor Sie falsch investieren!)


Beachten Sie auch, dass Sie für diese Länge wirklich möchten, dass der CAN-Bus über ein abgeschirmtes Twisted Pair oder Coax läuft. Ethernet-Verkabelung ist billig und kann auf Spulen gekauft werden.

Betrachtet man Ihre separate Uhr: Sie haben bereits CAN; Es ist ziemlich fraglich, ob Sie eine separate 1-kHz-Taktleitung benötigen: Sie haben eine Möglichkeit, zwischen Knoten auf eine Weise zu kommunizieren, die zeitgenauer ist als eine 1-kHz-Periode. Fügen Sie also einfach eine CAN-fähige hinzu Mikrocontroller zu jedem Knoten und fügen Sie einen Master hinzu, der ihnen regelmäßig mitteilt, wie viele 1-kHz-Zyklen seit der letzten CAN-Taktmeldung vergangen sind. Die Mikrocontroller können dann einen internen Zähler einstellen und lokal einen zentral disziplinierten 1-kHz-Wert erzeugen.

Das erspart Ihnen Verkabelung und bietet Ihnen etwas, das remote funktioniert, wenn (und nur wenn) Ihr CAN-Bus zuverlässig läuft.

Andere Optionen umfassen das Hinzufügen von selbst entworfenen Bittakt-Beobachtern, die nur die Übertragungen von Ihrem Master beobachten, um zu erfahren, welcher Bittakt verwendet wird, und um damit lokal 1 kHz zu erzeugen.


Ein 1000 m langer Bus mit zusätzlichen Taktfunktionen scheint ganz am Rande dessen zu stehen, was Sie mit einem einzelnen CAN-Bus tun sollten. Ich würde empfehlen, diesen Bus zu segmentieren, wenn dies architektonisch machbar ist. (Die Segmentierung erhöht die Komplexität, lokalisiert jedoch Fehler und erleichtert häufig das Debuggen.)

Bei den sehr niedrigen Baudraten, die Sie mit einem so langen CAN-Bus nutzen können, können Sie auch einfach drahtlos arbeiten und alle Kabel entfernen. Es ist alles ein Kompromiss zwischen Verkabelung und Hardwarekosten und eingeschränkt durch die Zuverlässigkeit, die Sie benötigen (Tipp: Geben Sie tatsächlich Zahlen ein - selbst ein kabelgebundener Bus ist nicht rauschfrei, und Sie müssen darüber nachdenken, was mit Ihrem System passiert, wenn CAN-Bus-Pakete werden unterwegs unterbrochen.

Persönlich: Ich würde nicht versuchen, mein eigenes Bussystem aufzubauen. Für Langstrecken mit hoher Knotenzahl verwenden die Benutzer anwendungsfalloptimierte Feldbusse wie PROFIBUS oder EtherCAT oder einfach nur: Plain Ethernet! Sie können Ethernet mit billigen Ethernet-Switches segmentieren. Sie können, müssen aber keine verlustsicheren Protokolle wie TCP / IP ausführen. Die Verkabelung mit Steckverbindern ist supergünstig und gut getestet.


Ihre Anwendungen scheinen also die MCU-Zeiten zu koordinieren: Das ist definitiv mehr eine Aufgabe für periodische CAN-Nachrichten als ein 1-kHz-Takt.Wenn Sie Genauigkeit benötigen, sollten Sie sich Internetprotokolle wie NTP ansehen und überlegen, wie Sie sie für ein CAN-System anpassen können (der Trick besteht wirklich nur darin, ab und zu einen Zwei-Wege-Austausch mit Roundtrip-Messung durchzuführen). P.>

PTP ist viel weniger bekannt als NTP, wurde jedoch speziell für das Präzisions-Timing entwickelt.Dies kann jedoch zu viel des Guten sein, da Sie in einem guten Netzwerk normalerweise eine Genauigkeit von weniger als einer Mikrosekunde erzielen, was wahrscheinlich 3 Größenordnungen mehr ist, als das OP benötigt.Selbst billige Switches unterstützen jetzt PTP (dies ist nicht erforderlich, aber wenn der Switch PTP unterstützt, ist die Genauigkeit sogar noch besser). Da er auch in der Telekommunikation, Robotik und industriellen Automatisierung verwendet wird, würde ich erwarten, dass er in Ethernet unterstützt wirdSchalter für den industriellen und / oder Außenbereich.
@JörgWMittag, wenn Sie sich zu der Diskussion unter Daves Antwort durchklicken: OP möchte eine Genauigkeit von 0,1–3 ns.PTP erreicht das nicht einmal aus der Ferne.
#2
+15
Dave Tweed
2019-11-01 16:45:27 UTC
view on stackexchange narkive permalink

Sie müssen wirklich gründlich darüber nachdenken, was Sie wirklich unter "simultan" verstehen.

Über eine Spannweite von 1000 Metern erstreckt sich das Konzept nicht auf das Sub-ns-Regime.Heck, es würde einen Lichtimpuls von mehr als 3000 ns benötigen, um diese Strecke zurückzulegen, und ein elektrischer Impuls würde mehr als 5000 ns über eine ideale Übertragungsleitung dauern.Ihr ungeschirmter Draht wird aufgrund der R-C-Verzögerungen, die durch das Laden aller Knoten auf dem Weg entstehen, noch langsamer sein.

Wenn Sie an jedem Knoten GPS-Empfänger verwenden, gelangen Sie zumindest in den Bereich von zehn ns.

Kommentare sind nicht für eine ausführliche Diskussion gedacht.Diese Konversation wurde [in den Chat verschoben] (https://chat.stackexchange.com/rooms/100582/discussion-on-answer-by-dave-tweed-1-khz-clock-over-long-wire).
#3
+10
JonRB
2019-11-01 14:38:50 UTC
view on stackexchange narkive permalink

Haben Sie darüber nachgedacht, eine Sinuswelle zu senden und einen Komparator am Empfangsende zu verwenden, um eine Rechteckwelle zu rekonstruieren?

bei 1 km bleibt nicht viel von einer Rechteckwelle übrig, da alle höherfrequenten Komponenten aufgrund der Übertragungsleitung

gedämpft werden
Das wäre eine Möglichkeit, ja.Aber dann müsste ich die Sinuswelle erzeugen ... Aber ein PWM-Signal und ein Kondensator sollten in der Lage sein, diesen Job zu erledigen, aber es würde das MCU ziemlich beschäftigt halten.
@Geoxion Die Sinuswelle erzeugt "sich selbst", wie JonRB erklärte, wenn Sie die hohen Frequenzen dämpfen: Führen Sie einfach Ihren 1-kHz-Takt durch ein Tiefpassfilter, das über 1 kHz, aber unter 3 kHz abschaltet.
genau, also ist es besser, eine solche Sinuswelle kontrollierter zu erzeugen.Es gibt viele Möglichkeiten, eine Sinuswelle zu erzeugen, und einige würden keine mcu-Zeit benötigen.Mein Rat wäre, die Sinuswelle zu erzeugen, lokal in eine Rechteckwelle zu wechseln und dieses Signal zu verwenden.Dadurch wird sichergestellt, dass die Erzeugungseinheit eine ähnliche Phasenverschiebung wie die anderen Einheiten aufweist (aufgrund der Filterung).Auch 1 km ... stellen Sie sicher, dass Sie eine anständige Laufwerksleistung haben, da es eine angemessene Menge an Kapazität gibt
Wenn "alle höherfrequenten Komponenten gedämpft werden", muss zunächst keine Sinuswelle erzeugt werden - die Übertragungsleitung erledigt dies effektiv für Sie.Dies gilt natürlich nicht für die "vielen" Knoten, die sich physisch in der Nähe des Masters befinden.
Sicherlich wird jedes Rauschen - und ein 1 km langes Kabel kann eine sehr große Antenne sein - zu Jitter, wenn Sie versuchen, ein Zeitsignal von einer Sinuswelle und einem Komparator wiederherzustellen.Eine Sub-ns-Auflösung von einem 1-kHz-Signal bedeutet eine Sub-ppm-Genauigkeit.Ist die langsame Taktrate in diesem Szenario nicht ein Nachteil, kein Vorteil?
#4
+4
filo
2019-11-01 21:56:23 UTC
view on stackexchange narkive permalink

Wenn Sie Twisted Pair-Verkabelung zur Verfügung haben, können Sie einfach CAN-Transceiver (Vorsicht vor der Timeout-Funktion) oder RS-485-Transceiver für das Signal verwenden.Sie werden mit Sicherheit eine gewisse Ausbreitungsverzögerung hinzufügen, diese sollte jedoch behoben werden.

#5
+3
Polar Bear
2019-11-03 14:57:41 UTC
view on stackexchange narkive permalink

Nun, 1000 m sind eine ziemliche Entfernung, die eine signifikante Kapazität und Induktivität in den Drähten über der Impedanz bietet.Wenn Sie an einem Ende ein 1-kHz-Rechtecksignal anlegen, sieht das Signal am anderen Ende überhaupt nicht wie ein Rechteckimpuls aus.

Es ist reine Physik - nehmen Sie Impedanz, Kapazität, Induktivität des Kabels pro Meter und multiplizieren Sie mit der Länge des Kabels.

Es gibt verschiedene Methoden, um einen Teil des Problems zu überwinden, aber normalerweise erhöhen sich die Kosten des Projekts.

Haben Sie sich jemals mit einer Lösung zur Übertragung von Glasfasersignalen befasst?

Es ist nicht zu empfindlich gegen Funkstörungen, keine Induktivitäts- / Kapazitätseffekte und die Ausbreitung des Signals liegt nahe bei 300.000 km / s.Natürlich ist eine Signaldämpfung über eine solche Entfernung nicht vermeidbar.

#6
  0
P__J__
2019-11-03 03:18:07 UTC
view on stackexchange narkive permalink

Dieses Taktsignal IMO wird für alles benötigt.Senden Sie einfach regelmäßig eine CAN-Nachricht mit dem aktuellen Zeitstempel.Es synchronisiert die Knoten und ist die Quelle der Kalibrierungsdaten für die internen Uhren

Denken Sie daran, dass die Knoten nicht perfekt synchronisiert sind (selbst wenn Sie Ihr Taktsignal haben), da das Signal zwischen den entferntesten Knoten> 3usek

übertragen wird


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 4.0-Lizenz, unter der er vertrieben wird.
Loading...