Archiv verlassen und diese Seite im Standarddesign anzeigen : BUS System
HannoHupmann
08.01.2009, 12:01
Hallo
für meine zukünftigen Projekte möchte ich mehrere Controller (Hauptsächlich mega32 und eventuell mega128) verwenden und die ganze Steuerung modularisieren. Daher bin ich gerade auf der Suche nach einem geeigneten BUS System.
Gefordert wird von mir, dass ich mehrere Controller miteinander verbinden kann und nicht mehr als 16 Leitungen verwendet werden müssen. Welche bekannten BUS Systeme gibt es?
TTL bzw. Seriell scheidet wohl aus, da hier nur 2 Controller miteinander verbunden werden können. Selber schreiben möchte ich ungern was, wenn es auch eine vernünftige Lösung bereits gibt.
Da wäre z.B. CAN
das ist ein sehr störfestes Bussystem, das u.a. auch in den meisten Autos eingesetzt wird.
williwilli
08.01.2009, 12:13
Hallo HannoHupmann,
I2C bietet doch default schon die Möglichkeit, auch mehrere Master miteinander zu verbinden. Zu den Möglichkeiten gibt's schon einige Einträge im RN-Wiki, auch passende Sourcen ...
Wenn irgendwelche Gründe gegen I2C sprechen, wird es wohl RS422 oder RS485 werden müssen. Nur ob's da schon fertigen Code gibt...?
über ein protokoll wirst du kaum eherumkommen, das musst du schon schreiben! als bussystem würd ich dir ein RS485 vielleicht nahelegen, das ist ncihts weiter als RS232 differentiell zu übertragen, dabei hast du dann einen 8beinigen umsetzer, der hat TX udn RX als eingang/ausgang für den controller und eine t+ und t- leitung als ausgang, auf rs485 wird dann auf "einer leitung" bidirektional übretragen, also ein gewisses timing musst du da schon selber vorbereiten damit es zu möglichst wenigen kollisionen kommt!
dann bleiben da noch 4 beinchen, 2 für + und - und je ein bein als signalleitung für empfangsmodus und sendenmodus
als Übertragungsleitung habe ich mal ein 100m LAN kabel genommen, wo ich an den gewünschten stellen die schirmung vorsichtig geöffnet habe, dann die adernpaare ein wenig entdrillt und dann über eine 9pin SUB-D klemmbuchse angezapft habe. am anfang und ende der leitung müssen abschlusswiderstände, aber ich kann nach belieben controller an und abstecken, aus der SUB-D bekomme ich dann 8 leitungen, 2 für stromversorgung (auf die distanz allerdings verwende ich noch optokoppler wegen spannungsdifferenz) 2 für handshake und 4 für 2 kanäle von RS485
handshake läuft einfach so, leitung ist über pullups auf definierten pegel und um einen sendevorgang anzukündigen wird einfach die polarität umgekehrt, ist sie bereits verdreht, darf der controller nicht senden, wird die leitung dann freigegeben, drehen alle controller mit sendebedarf die 2te leitung um und lassen die 1te wie sie ist und warten eine zeit, die sich aus adresse * 0.1ms ergibt und versucht dann die leitugn zu belegen, die regel mit der 2ten leitung ist, damit kein weiterer controller mit niedriger adresse ihn unterdrückt indem er die leitung vorher wieder belegt!
quasi wie eine bedarfs und eine besetzt leitung
HannoHupmann
08.01.2009, 13:03
I2C ist schon mal nicht schlecht, damit hab ich auch schon gearbeitet.
Felix G CAN Bus muss ich mir mal ansehen, bisher hab ich mich damit noch nicht auseinander gesetzt.
@Ceos klar, ein Busprotokoll brauch ich, nur muss ich nicht unbedingt selbst eines schreiben wenn es sich um nen Standart BUS handelt und es dafür bereits Quellcode gibt. Ich möchte auch etwas sehr universales einbauen und weniger eine selbstgestrickte Lösung. Daher interessieren mich vor allen erst mal die komerziellen BUS Systeme, für die gibt es meistens auch schon Bausteine u.a.
Achja es handelt sich um Entfernungen von weniger als 1m d.h. ich brauch auch keine langen Übertragungstrecken.
Protokoll ... also zumindest bei 485 ist das Freistil, es gibt
kein fertiges Protokoll ... wozu auch.
Alles was Du beachten musst ist im Halbduplexbetrieb,
dass nicht zwei Busteilnehmer gleichzeitig quasseln.
Was da wer wem mitteilt ist dabei schnuppe.
Sinnvoll ist ein gemeinsames Protokoll dennoch, kann aber
auch einfach gehalten werden z.B.
000_015_set_timeout_15
000 Busmaster sender
015 empfänger
set_timeout auszuführende Aktion
15 Wert
Antwort wäre dann:
015_000_ack
015 sender
000 empfänger
ack acknowledge sprich OK, mach ich.
Du kannst Dir aber auch das Protokoll
vom Profibus reinziehen wenn Du magst.
Naja, 1m ist schon einiges, wenn man bedenkt, dass I2C eigentlich von Chip zu Chip gedaht war, also auf derselben Platine.
Ich würde aber auch CAN empfehlen. Das ist für einige Meter gedacht, störsicher, wie schon gesagt, es ist relativ weit verbreitet und einfach zb im Vergleich zu USB. Man bekommt immermal einen WandlerIC dafür und einige µCs können das von Hause aus.
Prinzipiell ist ein Protokoll gut, dass der µC beherrscht, weil er dann sehr effizient damit umgeht. Ein Hardware I2C oder SPI oder eben CAN ist immer besser, als die Softwarelösung. Oder aber man benutzt einen Converter.
Es gibt Megas, die CAN sprechen.
Es ist zwar seriell, aber das ist auch gut so und ich weiß nicht, was Du dagegen hast.
Allerdings habe ich noch nicht damit gearbeitet...
Gruß
CAN hat natürlich den Vorteil ziemlich vollständig spezifiziert zu sein, d.h. du musst dir selbst kein Low-Level Protokol überlegen. Außerdem ist es sehr gut auch für große Strecken (bis zu 500m) geeignet.
Hallo,
für CAN würde ich jetzt auch pauschal plädieren. Das Protokoll ist fertig, die Teilnehmerzahl erweiterbar, unanfällig gegen Störungen, multimaster Bus, es gibt Bibliotheken sowohl für At90CAN oder auch den MCP2515, der über SPI angeschlossen wird. Wenn du natürlich nur kurze Strecken in sauberer Umgebung hast, würde ich vielleicht auch SPI vorschlagen, da hier der externe Beschaltungsaufwand quasi entfällt. Von I2C bin ich persönlich abgekommen, das ist mir zu anfällig. RS485 ist sicher auch nicht schlecht. Wobei mir der Aufwand für ein Protokoll in der Software zu groß ist.
Gruß
Jens
Wobei mir der Aufwand für ein Protokoll in der Software zu groß ist es lebe die herausforderung ;)
mir war die beschaltung und der verkabelungsaufwand von CAN wiederum zu groß (braucht der wirklich 12V oder geht das nicht auch irgendwie ohne?)... aber ansichtssache ^^
Wobei mir der Aufwand für ein Protokoll in der Software zu groß ist es lebe die herausforderung ;)
mir war die beschaltung und der verkabelungsaufwand von CAN wiederum zu groß (braucht der wirklich 12V oder geht das nicht auch irgendwie ohne?)... aber ansichtssache ^^
Moin moin.
Wieso ist die Verkabelung aufwändig? zwei Datenadern welche mit
Pull UP an der Versorgung hängen ist alles was gebraucht wird.
Beim Senden liest man gleichzeitig mit ob das gesendete Bit auch
anliegt, wenn nicht nuß man warten und nochmal versuchen. Denn
dann sendet jemand der Vorrang hat. :-) Die Daten werden dabei nicht
beeinflußt, weil eine 0 V kann nicht überschrieben werden und High
bleibt High...
Es gibt verschiedene Ausführungen an Bauteile, da kann man auch
locker über 1000 m mit arbeiten. Es gibt Bauteile welche sich selber
kontrollieren und sich im Fehlerfall selber vom Bus Trennen um diesen
nicht zu Blockieren.
Es gibt auch Bausteine welche sehr schnell arbeiten so das Video
übertragen werden kann.
Aber ob sich der Aufwand für 1..2 m lohnt?
RS 232 sollte auch mit mehreren Bus Teielnehmern gehen, wenn
die Pakete mit einem Start/End Zeichen + Adresse versehen werden.
Also alle warten auf einen IRQ an der Schnittstelle, lesen ob sie
gemeint sind und nur der welcher adressiert ist darf antworten bis
er ein "Endzeichen" sendet. Alle Anderen lesen nur mit.
Wenn man dazu einen CAN Treiber ( open Collecktor) verwendet
könnte man sogar CAN Ähnlich Piriotäten setzen wer jetzt wichtiger
ist und "Überschreiben" darf. :-)
Gruß Richard
Hi!
12V für CAN sind kein muß, mit 5V geht es auch, die Leitungslänge wird dann ggf. geringer. (Wieviele km sollen es denn werden? ;-))
Vcc kann weggelassen werden, GND nicht.
3 Leitungen sind dir zuviel? :shock:
Gruß
Edit:
http://www.kreatives-chaos.com/artikel/can
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.