48 Volt Bussignal auf Vorhandensein bzw. Unterbrechung überwachen?

Hallo liebe Arduinokas,

zuerst einmal meine ersten Grüße an Euch alle!

//Meine Frage ganz kurz:

Wie könnte ich das Vorhandensein von 48V-Bussignalen zwischen zwei Leitungen erfassen? Es geht nicht darum, die Signale mitzulesen, sondern zwischen den zwei Zuständen zu unterscheiden, ob auf den Leitungen eine Kommunikation vorhanden ist, oder gerade Funkstille herrscht.

// Mein Problem im Detail:

Es gibt ein Schienenbus-System, dort kommunizieren Schienenfahrzeuge über 2 Schleifkontakte (BUS-A & BUS-B) mit dem Modem der Zentralsteuerung. Die Buskommunikation läuft über +/-24 Volt, mit einer Datenrate von 46,875 kBit/s.

Nun gibt es allem Anschein nach gelegentlich eine Unterbrechung irgendwo im Schienenbussystem. (Ein Teil der Fahrzeuge im System kommuniziert, ein Teil nicht). Leider sind diese Unterbrechungen meistens zu kurz (einige Sekunden bis einige Minuten), um gescheite Messungen zur örtlichen Eingrenzung der Unterbrechung vornehmen zu können.

// Die Idee:

Meine Idee ist nun, an 4 bis 6 Stellen das Schienenbussystem "anzuzapfen", d.h. die Leitungen BUS-A bzw. BUS-B mit (Analog?)Eingängen des Arduinos zu verbinden. Sollte nun die Unterbrechung wieder zuschlagen, könnte der Arduino (z.B. über LED's) anzeigen, welche Segmente noch kommunizieren, welche nicht.

Ich gehe dabei davon aus, dass im Falle der Unterbrechung die Busspannung zwischen A & B-Leiter in den betroffenen Segmenten gegen 0V geht. Der Arduino müsste quasi "nur" unterscheiden, ob eine gewisse Spannungsschwelle (z.B. 2V) länger als 3-4 Sekunden unterschritten wird.

//Meine Frage(n):

Der Zustand +/-24V (48Vss) mit einer Datenfrequenz von 47kHz ist keine "gewöhnliche" Spannung.
Liege ich richtig, dass der Arduino diese 47Khz-Signale sinngemäß vereinfacht als Analogwert interpretieren können müsste? (Mit dem digital Voltmeter messe ich zwischen den Busleitern ca. 17 bis 20V). Es kommt ja nicht auf den Messwert an sich, sondern nur um das Überschreiten, bzw. Unterschreiten eines Schwellwertes an - "Signal-ja" oder "Signal nein".

Natürlich müsste ich zuerst die Spannung auf 0 bis 5V für den Arduino herunterschrauben. Hierbei möchte ich aber dem Bussystem möglichst wenig Leistung "klauen". Hat jemand eine Idee, für eine Schaltung, die diese sonderbaren Signale arduinogerecht "bändigen" könnte? Gibt es möglicher Weise sogar ein Shield, für Spannungsmessung in dem Bereich?

*** Ich wäre für jede brauchbare Idee dankbar!!! ***

Hallo,

die Bezugsmasse ist immer die gleiche?
Dann sollte sich das mit einem OPV als Differenzmesser lösen lassen.

Das Problem mit einem µC und dessen analogen Eingänge sehe ich darin, dass man die analogen Eingänge nie zeitgleich einlesen kann, was bei dir aber notwendig wäre. Man kann die nur nacheinander einlesen.

Man könnte jedoch einen externen A/D Wandler nehmen mit -/+ Eingängen und die Differenz messen und in den µC einlesen. Zum Bsp. einen MCP3428 oder MCP3550

Mit OPV ginge das auch ohne µC.

Müßte man sich mal überlegen was einfacher ist. Vielleicht ergeben sich daraus weitere Ideen.

Der Arduino Mega ADC kann auch Differentialmessung. Siehe ADMUX Register

OP wird aber generell vernünftiger sein.

Hallo,

ich könnte mir vorstellen einen RS485 Bus Transceiver nach angehängten Schaltplan dafür zweckentfremden zu können. (SN75176. MAX485 o.ä.)
Sofern Potentialunterschiede zwischen dem Bussystem und dem Arduino bestehen, müsste man GND mit dem Bezugspotential des Bussystems verbinden.
Der Spannungsteiler wäre so zu berechnen dass an R2 eine Spannung von 2-3V abfällt wenn auf dem Bus gesendet wird.
Wenn das so funktioniert könnte man mit dem Arduino auch die Daten vom Bus mitlesen. :slight_smile:

Gruß
Peter

Danke schon mal für die Vorschläge!
Leider komme ich aus der Industrie-Welt und kenne mich mit "Microelektronik" und OPV nur marginal aus. Und das Schulwissen ist wohl schon zu lang her... :wink:

Anknüpfend an die bisherigen Vorschläge, bzw. an Peter_de's Schaltskizze:

  • Die Widerstände R1,R2,R3 sind wohl ein Spannungsteiler. Ich müsste das Verhältnis so bemessen, dass die Spannung über R2 max. 5V betragen kann, bzw. die Widerstände so groß wählen, dass möglichst wenig Strom fließt, um die Buslast gering zu halten(?)

  • Was machen D1 bis D4? Ist das eine Gleichrichtung, oder sowas wie eine Schutzschaltung für den IC?
    Gar eine Art "Kopplung" an die VCC?

  • Was macht dieser Bus-Transreceiver genau? Macht er aus den Eingangssignalen an 6 und 7 quasi digitale "Morsezeichen" am Ausgang 1? Ich bekomme also die Busdaten in Binärform?

  • Warum muss ich GND mit dem Bezugspotential vom Bus verbinden? Reicht ein "potentialfreier" Spannungsunterschied zwischen den zwei Eingangspins ohne GND-Bezug nicht schon für sich zum Zweck einer Differenzerkennung aus?

Ich habe mal irgendwo einen Spannungsmesser (Multimeter) auf Arduino-Basis gesehen, gibt es nicht irgendein simples Shield, um die Spannung vom Bus grob einlesen zu können? Bzw. kann Wie gesagt ginge es gar nicht um den absoluten Wert, sondern nur um die Unterscheidung zwischen Spannung und Leerlauf...
Ist nicht das, was besagter Arduino Mega ADC können soll?

Richtig erkannt, R1,R2,R3 ist ein Spannungsteiler wobei an R2 max. ca. 3V abfallen sollen. Das reicht dem Transreceiver um die Pegel auswerten zu können.
D1 bis D4 dienen als Schutzschaltung um an den Anschlüssen A+B gegenüber der Versorgungsspannung unzulässig hohe Spannungsspitzen fern zu halten.

Der Bus-Transreceiver wertet die Spannungsdifferenz zwischen den Eingängen A+B aus.
Wenn A>B dann ist am Ausgang R 5V (log. 1)
Wenn A<B dann ist am Ausgang R 0V (log. 0)
So werden am Ausgang R wie du schreibst "quasi digitale Morsezeichen" erzeugt was den Busdaten in Binärform entspricht. Wenn das Busprotokoll bekannt ist, dann kannst du die Daten mit einem Arduino auch entschlüsseln.

Aber das ist alles nur eine theoretische Idee. Ob das so wie es von mir gezeichnet ist auch funktioniert weiß ich nicht. Zudem sollten die Anschlüsse D + DE entgegen der Zeichnung nicht offen bleiben sondern beide auf GND geschaltet werden.

GND der Schaltung muss man nicht mit dem Bezugspotential vom Bus verbinden. Deshalb auch gestrichelt gezeichnet. Eine Spannungsdifferenz zwischen den beiden Eingängen reicht aus.

Wenn du mal ein Diagramm zeichnen könntest wie der Spannungsverlauf auf dem Bus im Gutzustand und im Fehlerfall aussieht wäre es einfacher eine Passende Schaltung zu finden die als Ergebnis nur "ok" oder "nicht ok" liefert.
Etwas mehr Input über das Bussystem und dessen Verwendung würde auch nicht schaden.

Gruß
Peter

Ganz primitiv und unorthodox: wie wäre es, eine LED mit dem Blindstrom eines Kondensators zu speisen? Bei ein paar KHz fließt Strom durch den Kondensator und die LED leuchtet, wenn Sendepause ist, ist die LED aus. Quick and dirthy :smiling_imp:
Dazu eine LED und eine normale Diode antiparallel, damit der Strom in beide Richtungen fließen kann. Diese Konstrukt in Reihe zu einem Kondensator mit 63V Spannungsfestigkeit und das zwischen die Schienen. Nach meinem Bauchgefühl sollten bei Frequenzen im 2 stelligen KHz Bereich schon wenige nF Kapazität ausreichen.

Über die Bussignale gibt es nicht allzu viele Informationen.

Es geht um ein "LJU-Bus" 46,875 kBit/s, lineare Busverlegung, Abschlusswiderstand 220 Ohm, 9W.
(Kundenbereich - LJU Automatisierungstechnik)

Im Prinzip geht es nur darum, mit dem Arduino eine pulsierende Rechteckspannung mit ca. 50kBit/s zwischen -24V und +24V zu messen.

Was Peter_de's Schaltbeispiel mit dem IC 75176 betrifft:
wenn in dem Schaltbild an R2 ca. 3V abfallen sollten, dann könnte ich ihn in etwa mit 3kOhm bemessen, R1+R3 zusammen 45kOhm. Dann würde ein Strom von 1mA durch den Spannungsteiler fließen. Liege ich damit richtig für den Eingang des IC's? Oder muss ich den Innenwiderstand zwischen A&B auch irgendwie berücksichtigen? Gibt es einen speziellen Grund, warum ein 3-Widerstands-Spannungsteiler verwendet wird? Spielt etwa auch das Verhältnis zw. R1 und R3 auch eine Rolle?

Wie sollten die Schutz-Dioden D1 bis D4 dimensioniert werden? Gibt es da etwa auch was spezielles zu beachten?

Könntest Du freundlicherweise