Ich übertrage RS485 über:
Mono-Anwendung -> Linux USBTTY-Gerät -> RS485-Adapter mit einem zusätzlichen 100R-Terminator -> ~1m CATV -> SN65176 mit einem zusätzlichen 100R-Terminator -> PIC.
Über das Debugging kann ich sehen, dass die Übertragung von der Anwendung zum PIC erfolgreich ist und die PIC-Übertragung aus der seriellen Schnittstelle ebenfalls in Ordnung ist. Wenn der SN65176 jedoch vom Empfangsmodus in den Antriebsmodus umgeschaltet wird, ist der niedrige Ausgangspegel sehr verrauscht (siehe Oszilloskoperfassung):
In dieser Oszilloskopaufnahme ist Kanal 1 (blau) die Datenseite (R/D) des SN65176, und Kanal 2 (gelb) befindet sich am RS485-Anschluss in der Nähe des PCs.
In diesem speziellen Fall stammte das erste Byte vom PC (00001101) und das zweite Byte vom PIC. Es sollte 00011101 sein, wurde aber als 00000100 empfangen.
Hier ist der relevante Mono/C#-Portcode:
port = new SerialPort(
portName: portName,
baudRate: 115200,
parity: Parity.None,
dataBits: 8,
stopBits: StopBits.One)
{
Encoding = ASCIIEncoding.ASCII,
Handshake = Handshake.RequestToSend,
DtrEnable = false,
RtsEnable = false,
WriteTimeout = 1000 // ms
};
port.Open();
// ...
Port.ReadByte()
Der RS232-zu-485-Adapter ist ein XS201A . Es behauptet, eine ausfallsichere Vorspannung zu haben; direkte Messung unterstützt diese Behauptung jedoch nicht. Vielleicht liegt es daran, dass der Bias nur aktiviert wird, wenn das Gerät eingeschaltet ist, aber ich halte das nicht für besonders ausfallsicher. Es enthält keinen Schaltplan und ist eine versiegelte Einheit, daher ist es schwieriger, das Ding zurückzuentwickeln. Wenn ich jedoch an beiden Enden mit einer externen 100-Ohm-Terminierung betrieben werde, sehe ich die folgenden Spannungen:
Va-Vb = 44mV
Va-gnd = 311mV
Vb-gnd = 267mV
Der XS201A behauptet auch, "Automatic Send Data Control" zu verwenden, um von RTS / DTR / TXD mit Strom versorgt zu werden, und um RTS + CTS und DTR + DSR + CT abzukürzen.
Bei getrenntem SN65176 und etwas unterschiedlicher Vorspannung scheint der XS201A ein undokumentiertes 4-Bit-Leitungslaufwerk zu haben, nach dem der Treiber deaktiviert wird:
Dies zeigt zwei aufeinanderfolgende 0x33 vom PC. Es gibt ein Stopp- und ein Startbit, das beide Bytes umgibt, plus das nachfolgende Laufwerks-Timeout.
Um die Diskussion zusammenzufassen und auf Ihre Testergebnisse zu antworten:
Es scheint, dass der XS201A ein undokumentiertes 4-Bit-Zeilenlaufwerk hat, nach dem der Treiber deaktiviert wird
Einverstanden, dieses Verhalten passt zu dem, was ich zuvor bei einigen Konvertern gesehen habe, und danke, dass Sie den Test durchgeführt haben.
Es ist wahrscheinlich eher eine relativ feste Zeit , während der die Leitung nach der Übertragung durch diesen RS232-RS485-Konverter aktiv angesteuert wird, als eine konstante Anzahl von Bitzeiten unabhängig von der Bitrate. Sie könnten die Bitrate erheblich ändern und erneut testen, um zu bestätigen, dass die "leitungsgesteuerte Zeit nach dem Senden" immer noch ähnlich wie die aktuellen ~ 35 us bleibt. Möglicherweise stellen Sie auch fest, dass diese "leitungsgesteuerte Zeit nach dem Senden" je nach gesendetem Datenbyte variiert. Daher schlage ich weitere Tests mit unterschiedlichen Bytes vor, um dies zu überprüfen.
Dies war ein weiteres aktuelles Thema hier auf EE.SE (Wie funktioniert dieses RS485-Modul?) , wo ein Teilschema die Art der Schaltung zeigt, die verwendet werden kann, um das "automatische" Umschalten zwischen Senden und Empfangen auf RS-485 bereitzustellen. Diese schalten jedoch nicht sofort um, wenn eine Übertragung beendet ist, was zu dem Verhalten führt, das Sie beobachtet haben.
Aus meiner Sicht sind einige Optionen:
Möglicherweise möchten Sie nach Begriffen wie „RS-485-Turnaround-Verzögerung“ oder „RS-485-Auto-Turnaround“ suchen, um weitere Informationen und Erfahrungen beim Zeitmultiplexen mehrerer Sender auf Halbduplex-RS-485-Bussen zu erhalten.
Markieren
Reinderien
Markieren
Markieren
SamGibson
Markieren
Reinderien
Reinderien
Reinderien
Markieren
SamGibson
SamGibson
Reinderien
SamGibson
Reinderien