LabVIEWForum.de - RS485 Kommunikation auf FPGA Basis - cRio

LabVIEWForum.de

Normale Version: RS485 Kommunikation auf FPGA Basis - cRio
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

Derzeit beschäftigt mich folgendes Anliegen. Und zwar würde ich gerne eine RS485 Kommunikation zu einem Sensor aufbauen. Nun wäre dies eigentlich sehr schnell gelöst mit dem NI9871 Modul. Wie ich nun aber feststellen musste, kann dieses Modul nur "bestimmte" Baudrates. Für meinen Sensor benötige ich aber eine Baudrate von 2.5Mbaud.

Meine Idee wäre nun, dieses RS232 Beispielprogramm von NI zu benutzen, damit ich mein NI9401 als IO Modul verwenden kann und anschließend eine Pegelanpassung mit einem TTL-RS485 Treiberbaustein. Das Programm ich ist allerdings so aufgebaut, dass mein Befehl Byteweise durchgearbeitet wird vom FPGA Programm. Nun bekomme ich nirgends einen zusätzlichen Ausgang eingebaut, welcher high/los schaltet - einige ns vor meiner kompletten Datenübertragung und nach meiner Datenübertragung. Dieser Ausgang benötige ich um meinen RS485 Treiner umzuschalten. Oder ich muss halt zwei benutzen.

Habt ihr vielleicht schonmal die RS485 Schnittstelle auf der FPGA implementiert? Wie gesagt, die Pegelanpassung erfolgt extern.

Viele Dank Wink

...ganz vergessen: Leider stimmt die Baudrate beim RS232 Beispielprogramm von NI auch nicht. Gebe ich eine Baudrate von 2.5Mbaud ein, hab ich gemessen eine Baudrate von ca. 2Mbaud.
(28.11.2016 09:32 )Nullstrom schrieb: [ -> ]Meine Idee wäre nun, dieses RS232 Beispielprogramm von NI zu benutzen, damit ich mein NI9401 als IO Modul verwenden kann und anschließend eine Pegelanpassung mit einem TTL-RS485 Treiberbaustein.
Welches RS232 Beispielprogramm? Link?
(28.11.2016 09:32 )Nullstrom schrieb: [ -> ]Habt ihr vielleicht schonmal die RS485 Schnittstelle auf der FPGA implementiert?
Ja.

Gruß, Jens
Dies wäre das Programm, welches ich soweit auf meinem NI9066 auch lauffähig habe.
http://www.ni.com/example/27164/en/

Das Timingproblem ist jetzt erstmal nebensächlich. Kann meine im Labview Programm Baudrate soweit anpassen, dass ich am Ende meine 2.5Mbaud habe...

Wie man sieht, wird in diesem Programm das FIFO so lange ausgelesen, bis keine Bytes mehr enthalten sind. Mein R/W Ausgang kann ich also nicht mit in diese Schleife hängen, weil mein R/W sonst Byteweise geschalten wird und nicht nach der kompletten Datenübertragung.
Also 2.5 MBaud per FPGA sind definitiv möglich, allerdings musst du dazu das Referenzdesign überarbeiten. Das hat nämlich einen gravierenden Mangel für deine angestrebte Baudrate: Es arbeitet durchgehend mit "Wait Ticks", und übersieht dabei, dass z.B. die Abarbeitung der DIOs mind. 1 Tick und die Abarbeitung der Loops einen Overhead von 2 Ticks erzeugt. Bei typischen RS-232 Baudraten von z.B. 19200 fällt das nicht groß ins Gewicht, bei 2.5 MBaud aber schon. Ein Bit entspricht dann bei der typischen FPGA-Clock von 40 MHz gerade mal 16 Ticks, und wenn zu einem Wait von 16 Ticks noch mind. 3 (oder mehr) Ticks hinzukommen, dann erklärt das deine ca. 2 MBaud.

Für ein korrektes Timing brauchst du eigentlich den Loop Timer.

Gruß, Jens
Vielen herzlichen Dank für den Hinweis

Leider bin ich im Bereich der FPGA Programmierung noch nicht allzu fortgeschritten - somit ist es für mich nicht ganz so einfach, das komplette Beispielprogramm zu Überarbeiten. Muss mich mal umschauen, ob ich noch eine andere Möglichkeit der RS485 Kommunikation finde mit dieser "hohen" Baudrate.

Auch wenn ich das ganze am liebsten auf meinem cRio System läuffähig hätte, wage ich mich mal an unser PXI System ran. Dort ist eine NI PXI-8433/2 (RS485/RS422) Schnittstellenkarte verbaut, und diese kann frei wählbare baudrates verarbeiten. Vielleicht ist dort die implementierung etwas einfacher.

Ansonsten, wenn ihr noch eine Lösung hättet bzgl. RS485 / cRio / 2.5Mbaut - freue ich mich um jeden Hinweis.

Viele Grüße aus dem Schwarzwald
Flo
Entschuldige Gerd - wusste nicht, das die zwei Foren "zusammenarbeiten".
Dachte vielleicht, das ich durchs NI Forum vielleicht international paar Leute erreiche, die mir weiterhelfen könnten.
Hallo Nullstrom,

"zusammenarbeiten" wäre zuviel gesagt - eher friiedliche Koexistenz mit freundlicher Unterstützung durch NI… Big Grin

Was eher bei Crossposts stört: niemand macht gern Arbeit, die evtl. schon in einem anderen Forum erledigt wurde. Und wir sind hier alle freiwillig im Forum aktiv!
Wenn man als OP also immer gleich angibt, dass es woanders parallel weitere Diskussionen gibt, fühlt sich hinterher niemand auf den Schlips getreten… (Das gilt natürlich andersherum auch im NI-Forum!)

Ansonsten: einfach mal die hiesigen Forumsregeln lesen - der rot markierte Eintrag im Seitenheader! Dort Punkt 9 & 10 beachten…
Ok verstehe Wink
War auch keine böse Absicht dahinter. Man versucht halt immer sämtliche Supportkanäle zu nutzen.

Vielleicht findet sich noch was...
Referenz-URLs