Forum: Mikrocontroller und Digitale Elektronik Entwurf uC mit Uart für RS485-Bus mit > 4 Mbps


von magic (Gast)


Lesenswert?

Hallo zusammen,

ich möchte einen sehr schelles RS-485 Bussystem mit bis zu 10 
Teilnehmern entwickeln und befinde mich z.Z. in der Konzeptfindungsphase 
und prüfe die Machbarkeit.


Mein Anforderungsprofil ist folgendes:

1. Zwei-Draht RS-485 Phy.Bus mit Uart Kommunikation > 4Mbps
2. Übertragung von Datenblöcken mit bis zu 1k in beide Richtungen
3. Variable Blocklänge
4. Datenrahmen ist 8,1,even und die Sicherung soll per BCC checksumme
   erfolgen
5. In der Initialisierungsphase soll die Kommunikation nur mit 115kbits
   stattfinden
6. Die Anfrage und Antwortlatenz soll so klein wie möglich sein
   (Datenblock -> 50us -> Datenblock -> 50us ->...meine Vorstellung!?)


Für mein bisheriges Verständniss muss ich für die Controllerauswahl 
(Master/Slave) folgenden Dinge berücksichtigen.

1. Hat Uart's mit hoher Baudrate und genug oversampling
2. Interne möglichst grosse sende und empfangs FIFO's
3. Eine sehr gute DMA unterstützung und schnelle Interruptzeiten
4. genug RAM für die Puffer
5. Der Slave soll eine möglichst kleine Bauform haben und preislich
   günstig zu bekommen sein


Meine bisherige Recherche haben mich auf die NXP und Stellaris Cortex M3 
serie geführt. STM32 fällt wegen fehlender FIFO's und mässiger
DMA transferleistung ohne Burstfunktion durch.
Wie gut Pic und andere Kontroller diese Anforderung bewerkstelligen 
können weiss ich eben nicht.


Deshalb meine Frage an euch:

1. Welche günstigen Controller könnt ihr mir für diese Anforderung
   empfehlen (Cortex, PIC...), wenn ja warum?

2. Die Blockendetriggerung bei verwendung variabler Blocklänge und DMA
   macht mir etwas Kopfschmerzen, ich bin immer noch auf der Suche
   nach einem optimalen Verfahren für diese Anwendung?

3. Habe ich konzeptionell etwas wichtiges übersehen?

Gruss

von Klaus (Gast)


Lesenswert?

Klingt, als ob du 10Base-T schlechter (asynchron) neu erfinden willst.

MfG Klaus

von magic (Gast)


Lesenswert?

> Klingt, als ob du 10Base-T schlechter (asynchron) neu erfinden willst.

Ich will eben nicht etwas neues erfinden, sondern vielmehr etablierte 
Technik für meine! Bedürfnisse optimal ausnutzen!

d.H.
einfacher Aufbau, Kostengüngstige Verdrahtung, sehr schnell, Busfähig, 
störunempfindlich und eine mit wenigen standard Bauteilen realisiertbare 
Schnittstelle...

von Stephan (Gast)


Lesenswert?

magic schrieb:
>> Klingt, als ob du 10Base-T schlechter (asynchron) neu erfinden willst.
>
> Ich will eben nicht etwas neues erfinden, sondern vielmehr etablierte
> Technik für meine! Bedürfnisse optimal ausnutzen!

Willst Du doch!
Sehr schnelle UARTs, Geschwindigkeiten umschalten, eigener 
Protokollstack, ...

Bei Ethernet (10Base-T oder besser) werden all Deine Wünsche erfüllt.

von Michael H. (morph1)


Lesenswert?

Rein aus meiner Erfahrung: PIC32 kann was du willst, allerdings beim 
Empfangen mit der variablen Blocklänge wirst du 2 DMA-transfers 
nacheinander (erster bis du aus deinem Header die Länge hast, zweiter 
für die Nutzdaten) brauchen.

Dafür gibts beim DMA-Modul gleich eine schnelle Hardware CRC dabei.

Bei Ethernet fallen mir auf die Schnelle viele Nachteile ein:
Mehr Drähte
Mehr Stromverbauch
Mehr Ressourcen im µC (mehr Stromverbauch im µC)

von ich (Gast)


Lesenswert?

muss es ein 32-Bitter sein?
Es gibt da noch die xmegas von Atmel. Die können 4MBaud, haben DMA und 
sind recht gut zu bekommen.

von Klaus (Gast)


Lesenswert?

Michael H. schrieb:
> Mehr Drähte

1 Draht, RS485 braucht 2 + Masse hat dafür aber keine galvanische 
Trennung

MfG Klaus

von Purzel H. (hacky)


Lesenswert?

Nee. Ethernet, zumindest 100MBit hat 2 Paare. Das 1 Draht Ding was noch 
das 10BaseT. Mit Koax.

von Michael H. (morph1)


Lesenswert?

Klaus schrieb:
> 1 Draht, RS485 braucht 2 + Masse hat dafür aber keine galvanische Trennung

Hab ja nie behauptet das es 8 wären ;) Wobei mit Standard-Steckern 
eigentlich immer auch die 8-Draht-Variante benutzt wird.

Galv. Trennung gilt je nach verwendetem Tranceiver, von linear gibts 
einige getrennte.

PIC24EP wären übrigens auch OK, 16bit und DMA. xMega sind bei diesen 
Datenraten nur brauchbar wenn das kein kontinuierlicher Datenstrom ist, 
sonst ist man schnell am Ende der Leistung. Eventuell auch einer mit 
AVR32 Kern

von Klaus (Gast)


Lesenswert?

Delta Oschi schrieb:
> Nee. Ethernet, zumindest 100MBit hat 2 Paare. Das 1 Draht Ding was noch
> das 10BaseT. Mit Koax.

Falsch verstanden: RS485 2 + Masse, Ethernet 2 + 2, also 1 Draht mehr.

MfG Klaus

von Chris (Gast)


Lesenswert?

Ethernet, half duplex braucht nur ein Leitungspaar.

von Jim M. (turboj)


Lesenswert?

> Ethernet, half duplex braucht nur ein Leitungspaar.

-v, bitte.

Nach meinem Informationsstand braucht auch 10BaseT 2 Leitungspaare. 
Deshalb gab es damals auch Crossover Kabel, weil TX und RX getauscht 
werden mussten um 2 PCs ohne Hub zu verbinden.

von Klaus K. (klkl)


Lesenswert?

Hallo

Ethernet sehe Ich auch als aufwendiger an. Weniger die Zahl der 
Leitungen als der dazugrhörige Rechenaufwand. Einen TCP/IP Stack würde 
ich schon in einem 32-Bitter unterbringen wollen.
Bei RS232/RS485 Verbindung ist ein 8 Bitter schnell genug.
Ich würde bei 485 immer an CAN denken. Es gibt inzwischen preiswerte 
Chips, CAN ist wie 485 nur besser (Kollisionserkennung) und im Protokol 
weitgehend standartisiert.

Gruß Klaus

von magic (Gast)


Lesenswert?

>Rein aus meiner Erfahrung: PIC32 kann was du willst, allerdings beim
>Empfangen mit der variablen Blocklänge wirst du 2 DMA-transfers
>nacheinander (erster bis du aus deinem Header die Länge hast, zweiter
>für die Nutzdaten) brauchen.

Dein Vorschlag geht schon in die richtige Richtung. Zuerst den Header 
auswerten, Bytecount ermitteln und den DMA Controller neu 
initialisieren.
Aber der was passiert mit einlaufenden Zeichen während ich den DMA 
controller neuen init., geht das "on the fly" ohne Nebenwirkungen 
(Zeichenverlust oder Zeichen-Count stimmt nicht)?
Der Ende-Interrupt muss zuverlässig ausgelöst werden, sonst ist das 
Verfahren ungeeignet!!!

>Dafür gibts beim DMA-Modul gleich eine schnelle Hardware CRC dabei.

Die Prüfsummenbildung kann auch CRC sein , diese ist aber in software 
etwas aufwendiger und bei Verwendung von Hardware würde ich mich beim 
der uC auswahl einschränken

Den PIC32 sehe ich mir mal etwas genauer an -> hoffentlich gibt es sie 
auch in kleinem package und zu kleinen Preis?

>Bei Ethernet fallen mir auf die Schnelle viele Nachteile ein:
>Mehr Drähte
>Mehr Stromverbauch
>Mehr Ressourcen im µC (mehr Stromverbauch im µC)


Das sehe ich genauso, nicht zu vergessen spezial uC mit Mac-Hardware, 
evtl. phy chip definition der MAC Adresse... Deshalb möchte ich eben 
kein! Ethernet

>PIC24EP wären übrigens auch OK, 16bit und DMA. xMega sind bei diesen
>Datenraten nur brauchbar wenn das kein kontinuierlicher Datenstrom ist,
>sonst ist man schnell am Ende der Leistung. Eventuell auch einer mit
>AVR32 Kern

Es muss nicht unbedingt 32 Bit, für mich sind folgenden Punkte wichtig:

1. Der Chip muss verfügbar sein, am besten nicht schon nach 2 Jahren
   abgekündigt werden.
2. Wenn doch, dann sollte zumindest PIN kompatibler Ersatz verfügbar
   sein, um frühzeitiges redesigne zu vermeiden
3. Kostengünstig für die Slaveanbindung

>Ethernet sehe Ich auch als aufwendiger an. Weniger die Zahl der
>Leitungen als der dazugrhörige Rechenaufwand. Einen TCP/IP Stack würde
>ich schon in einem 32-Bitter unterbringen wollen.
>Bei RS232/RS485 Verbindung ist ein 8 Bitter schnell genug.
>Ich würde bei 485 immer an CAN denken. Es gibt inzwischen preiswerte
>Chips, CAN ist wie 485 nur besser (Kollisionserkennung) und im Protokol
>weitgehend standartisiert.

Can habe ich zwar auch schon in betracht gezogen, aber für meine 
Anwendung mit dieser Blockgrösse halte ich es nicht für nicht geeignet.

von nenene (Gast)


Lesenswert?

magic schrieb:
> 1. Zwei-Draht RS-485 Phy.Bus mit Uart Kommunikation > 4Mbps

Klaus Kloos schrieb:
> Bei RS232/RS485 Verbindung ist ein 8 Bitter schnell genug.

4Mbps auf einem 8-Bit-µC per UART?
(dezentes Hüsteln)

von Klaus K. (klkl)


Lesenswert?

nenene schrieb:
> 4Mbps auf einem 8-Bit-µC per UART?
> (dezentes Hüsteln)

:-) da hast du nicht ganz unrecht. Das habe Ich ignoriert.

Der Silabs C8051F580 (schneller 8Biter mit CAN) kann bei 50MHz Takt 
immerhin 3,1Mbps wenn Ich das Datenblatt richtig interpretiere. 
Ausprobiert habe Ich es nicht.

Über CAN gehen dort 1Mbps. Das ist aber immer noch unter den 
Anforderungen.

Gruß Klaus

von Michael H. (morph1)


Lesenswert?

magic schrieb:
> Den PIC32 sehe ich mir mal etwas genauer an -> hoffentlich gibt es sie
> auch in kleinem package und zu kleinen Preis?

Werbetrommel rühr: PIC32MX1 und MX2 gibts im QFN28 Package. Sind aber im 
Gegensatz zu den anderen PIC32 nur bis 40MHz geeignet (reicht aber wohl 
locker).

magic schrieb:
> Aber der was passiert mit einlaufenden Zeichen während ich den DMA
> controller neuen init., geht das "on the fly" ohne Nebenwirkungen
> (Zeichenverlust oder Zeichen-Count stimmt nicht)?
> Der Ende-Interrupt muss zuverlässig ausgelöst werden, sonst ist das
> Verfahren ungeeignet!!!

Also das ist eine zu spezifische Frage, das kann ich nicht beantworten. 
Wenn du allerdings mit deiner Auswertung unter der Dauer des Empfangs 
eines Bytes bleibst, dann passiert nichts, weil das Zeichen dann noch im 
UART-Buffer hängt und gar nicht beim DMA ist. Schnell überschlagen: 
4Mbit -> 8N1 -> 2,5µs / Zeichen -> 100 Takte bei 40MHz CPU-Takt. Könnte 
sich also ausgehen.
Je nach verwendetem PIC32 gibts beim UART auch noch ein FIFO der 
weiterempfängt während du den DMA-Interrupt abarbeitest.

von Klaus (Gast)


Lesenswert?

magic schrieb:
> Dein Vorschlag geht schon in die richtige Richtung. Zuerst den Header
> auswerten, Bytecount ermitteln und den DMA Controller neu
> initialisieren.
> Aber der was passiert mit einlaufenden Zeichen während ich den DMA
> controller neuen init., geht das "on the fly" ohne Nebenwirkungen
> (Zeichenverlust oder Zeichen-Count stimmt nicht)?
> Der Ende-Interrupt muss zuverlässig ausgelöst werden, sonst ist das
> Verfahren ungeeignet!!!

Wenn jetzt ein Fehler im Bytecount ist, ist es aus mit der 
Zuverlässigkeit. Das kriegt sich nie wieder ein. So wie früher ein 
Fehler im Header beim Graphikdrucken, Seitenweise sinnlose Zeichen.

Asynchron und ungeframed ist ungeeignet, daher macht es sonst auch 
keiner.

MfG Klaus

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

10Base2 kann ja immerhin bis zu 10 MBit brutto.

von Klaus (Gast)


Lesenswert?

Dennis Heynlein schrieb:
> 10Base2 kann ja immerhin bis zu 10 MBit brutto.

Ja, geframed und synchron

MfG Klaus

von magic (Gast)


Lesenswert?

Michael H. schrieb:
> Werbetrommel rühr: PIC32MX1 und MX2 gibts im QFN28 Package. Sind aber im
> Gegensatz zu den anderen PIC32 nur bis 40MHz geeignet (reicht aber wohl
> locker).

Sehr interessantes package für die Slavemodule und nach erster Sichtung 
des Datasheets für den Uart: FIFO,s max 10 Mbps, DMA und 9 Bit Modus! 
mit Interrupt. Das erste Zeichen des Telegrammheaders ist immer ein 
Adressebyte 9 Bit und das Ende ebenfalls. Zwischendurch werden alle 
Empfangsdaten per DMA in den Speicher transportiert :-)

Ist die Verwendung des 9 Bit Modus unabhängig vom Frame mit Parity 
bildung? 1 Startbit/9 Bit Data/1 Parity/1 Stoppbit....hmm

Klaus schrieb:
> Wenn jetzt ein Fehler im Bytecount ist, ist es aus mit der
> Zuverlässigkeit. Das kriegt sich nie wieder ein. So wie früher ein
> Fehler im Header beim Graphikdrucken, Seitenweise sinnlose Zeichen.

Wenn es ein Fehler im Bytecount gibt, kann es nur eine Softwarefehler 
sein. Der Bytecount muss natürlich passend sein. Des weiteren ist beim 
DMA transfer die Überschreitung der maximalen Framegrösse zu prüfen und 
der Datensatz zu verwerfen. Bei nicht korrekter Prüfsumme ebenfalls.

Klaus schrieb:
> Asynchron und ungeframed ist ungeeignet, daher macht es sonst auch
> keiner.

Was meinst du mit "ungeframed"?

Dennis Heynlein schrieb:
> 10Base2 kann ja immerhin bis zu 10 MBit brutto.

Ethernet kommt nicht in Frage, siehe weiter oben

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.