Hallo, ich habe eine Problem bei der Verbindung von einem Arduino MEGA
zu einer Pumpe über ein UART Interface.
Die Pumpe hat folgende UART Charakteristik:
Electrical Signal: 5Vdc TTL Level
Baud Rate: 9600 bps
Data Bits: 8
Parity: None
Stop Bits: 1
Each message from the motor will end with a carriage return (ASCII: OD)
Diese Charakteristik sollte ident mit der vom Arduino sein.
Dementsprechend habe ich Arduino Tx mit Pumpe Rx verbunden und Arduino
Rx mit Pumpe Tx. Über den Serial Monitor lässt sich nachvollziehen, dass
das richtige gesendet wird. Jedoch kann die Pumpe mit diesem Arduino
Output nicht arbeiten.
In weiterer Folge habe ich einen Max232 dazwischen gehangen und jetzt
funktioniert die Ansteuerung der Pumpe, jedoch kommen nur "Hieroglyphen"
als response.
Kann mit bitte jemand versuchen zu erklären, warum ich bei dieser
Pumpenkonfiguration einen Levelconverter benötige, weil ja theoretisch
eine direkte Tx/Rx Verbindung zwischen Arduino und Pumpe möglich sein
sollte laut Charakteristik?
Vielen Dank für euer Feedback.
LG Dennis
Dennis schrieb:> Electrical Signal: 5Vdc TTL Level
und
Dennis schrieb:> einen Max232 dazwischen gehangen
passt nicht.
Entweder TTL oder RS232.
Zudem invertiert der MAX232 noch dein Signal.
Wie lange ist denn die Leitung mit TTL-Pegel zwischen Arduino und Pumpe?
Wenn sie länger als 10cm ist, musst du halt überall einen
TTL-RS232-Konverter reinschalten. Für TTL sind die 10cm schon
grenzwertig.
Dennis schrieb:> Each message from the motor will end with a carriage return (ASCII: OD)>> Diese Charakteristik sollte ident mit der vom Arduino sein.
Ja.
> Dementsprechend habe ich Arduino Tx mit Pumpe Rx verbunden und Arduino> Rx mit Pumpe Tx. Über den Serial Monitor lässt sich nachvollziehen, dass> das richtige gesendet wird. Jedoch kann die Pumpe mit diesem Arduino> Output nicht arbeiten.
Weil die standardmäßige, serielle Verbindung vom Arduino am USB-Chip
hängt. Wenn man die Pins zusätzlich an einen anderen UART anklemmt, geht
das nicht. Der MEGA hat aber mehrere UARTs, da kann man einen der
anderen für die Verbindung zur Pumpe nehmen.
> In weiterer Folge habe ich einen Max232 dazwischen gehangen
Aua! RS232 arbeitet mit +/-12V, deine Pumpe angeblich mit 5V CMOS.
> und jetzt> funktioniert die Ansteuerung der Pumpe,
Wirklich. Da stimmt etwas nicht.
> Kann mit bitte jemand versuchen zu erklären, warum ich bei dieser> Pumpenkonfiguration einen Levelconverter benötige, weil ja theoretisch> eine direkte Tx/Rx Verbindung zwischen Arduino und Pumpe möglich sein> sollte laut Charakteristik?
Gute Frage.
Helmut -. schrieb:> Wie lange ist denn die Leitung mit TTL-Pegel zwischen Arduino und Pumpe?> Wenn sie länger als 10cm ist, musst du halt überall einen> TTL-RS232-Konverter reinschalten. Für TTL sind die 10cm schon> grenzwertig.
Totaler Quark, erst recht bei lumpigen 9600 Baud.
Die Leitung ist ca. 50cm. Wieso macht das auf diese Länge so einen
Unterschied?
Für mich passen jedoch TTL und Rs232 auch nicht zusammen aber nur mit
dem converter bekomme ich eine Ansteuerung hin. Jedoch funktioniert der
response nicht. Alles komisch.
Falk B. schrieb:> Weil die standardmäßige, serielle Verbindung vom Arduino am USB-Chip> hängt. Wenn man die Pins zusätzlich an einen anderen UART anklemmt, geht> das nicht. Der MEGA hat aber mehrere UARTs, da kann man einen der> anderen für die Verbindung zur Pumpe nehmen
Ist schon auf Serial 2 gehangen. Funktioniert aber nicht.
Harry L. schrieb:> Zudem invertiert der MAX232 noch dein Signal.
Aber vielleicht ist das gerade das Problem des TOs. Es ware möglich,
dass die Polarität des TTL Signals nicht stimmt. Einmal zum Test einen
Inverter dazwischen schalten. Gilt für beide Richtungen.
Wenn das CMOS UART in der richtigen Polarität ist, sollten im
Ruhezustand beide Leitungen high sein (5V). Das gilt fürs TX der Pumpe
als auch fürs TX des Arduino. GND wird ja wohl verbunden sein.
Dennis schrieb:> aber nur mit> dem converter bekomme ich eine Ansteuerung hin
Aber du bekommst sie doch gar nicht hin. Du schriebst doch, dass nur
Müll zurückkommt...und was da passiert, was deine Pumpe nun anlaufen
läßt, weiß der Himmel allein. Mit einem Oszilloskop könntest du das
Protokoll und die Pegel auf den Leitungen bequem messen...ansonsten
wirst du nur die Ruhepegel richtig bestimmen können. Aber das wären doch
schon mal Infos. Als nächstes wäre wichtig zu wissen, was die Pumpe denn
über die Schnittstelle erwartet. Wird da ein Protokoll abgefragt oder
soll da einfach nur z.B. ein ASCII-Wert übertragen werden, der dann auch
nur pro forma quittiert wird.
Viel Erfolg und Gruß, Rainer
Rainer V. schrieb:> Dennis schrieb:>> aber nur mit>> dem converter bekomme ich eine Ansteuerung hin>> ansonsten wirst du nur die Ruhepegel richtig bestimmen können.
Ruhepegel ist bei Arduino und Pumpe jeweils ca. 5VDC (GND to Tx)
> Als nächstes wäre wichtig zu wissen, was die Pumpe denn> über die Schnittstelle erwartet. Wird da ein Protokoll abgefragt oder> soll da einfach nur z.B. ein ASCII-Wert übertragen werden, der dann auch> nur pro forma quittiert wird.
Die Pumpe erwartet einen ASCII Befehl und sende auch eine ASCII response
zu jeden Input Befehl. Übers debuggen ist ersichtlich, dass das richtige
vom Arduino zur Pumpe gesendet wird aber der response sieht aus, als
stimme die Baud Rate nicht (immer nur Fragezeichen und Kästchen).
> GND wird ja wohl verbunden sein.> Hatte ich oben auch schon gefragt weil nur erwähnt wurde wie RX und TX> verbunden ist.
Im Moment ist es nur ein Testaufbau, wie folgt.
Arduino über USB powered, und Tx/Rx mit Pumpe verbunden.
Pumpe wird über ein Spannungswandler versorgt und hängt an einem
separaten AC/DC Netzteil.
Common GND ist nicht vorhanden.
Siehe Schematic anbei.
Habe beide GND miteinander Verbunden und funktioniert :D
Danke für eure Hilfe.
Komisch aber trotzdem, warum die Ansteuerung mit dem MAX232 vorher
funktioniert hat. #BlackMagic
Dennis schrieb:> Common GND ist nicht vorhanden.
Fast jede Angabe zu irgendwelchen Spannungen an IO-Pins in fast jedem
Datenblatt bei fast jedem IC bezieht sich auf GND. Also kannst du nicht
"nur RX und TX" irgendwohin verbinden, weil die sich nämlich auf den GND
beziehen, der sowieso verbunden sein muss.
So ist z.B. auch ein OneWire-Bus in der Realität ein Zweidrahtbus, weil
die Masse "sowieso" druchverbunden ist.
Dennis schrieb:> laut Charakteristik?
Wenn es Probleme gibt, dann miss mit einem geeingeten Messgerät die
Spannungen an den Pins. Kontrolliere, ob die Spannungen sich so
verhalten, wie es im Datenblatt angegeben ist. In deinem Fall ohne
GND-Verbindung wird das nicht der Fall sein, sondern du wirst beliebige
Störsignale und Netzbrummen auf den Leitungen sehen.
Dennis schrieb:> Komisch aber trotzdem, warum die Ansteuerung mit dem MAX232 vorher> funktioniert hat.
Zufall.
Du kannst zufällig 100 mal mit einer roten Binde verbundenen Augen quer
über eine Autobahn gehen. Und wenn du dann beim 101. Mal mit einer
blauen Binde überfahren wirst, ist dann die Farbe der Binde schuldig?
> #BlackMagic
Nein, absolut nicht. Sondern #Datenblattnichtgelesenodernichtverstanden