Frage:
Kommunikation mehrerer PICs mit einem PC
Sodrohu
2011-09-07 15:16:15 UTC
view on stackexchange narkive permalink

Ich habe eine Aufgabe, bei der ich 5 oder mehr Ucontroller an einen PC anschließen muss, um Daten zu senden, die auf dem PC gespeichert werden. Die Bedingungen sind wie folgt:

  • Die fraglichen UCs sind PIC 16F877As; Jeder von ihnen ist Teil eines Systems, das die Anzahl der verwendeten Schrauben (ab sofort) verfolgt und mit konstantem DCV von Steckern gespeist wird, sodass die Stromversorgung kein Problem darstellt.
  • Die gesendeten Daten sind gerecht Zahlen; Die derzeit in der Umgebung verwendete Anzahl von Schrauben
  • entspricht der einer werksseitigen Montagelinie. Die Schraubenzähler werden in der Leitung verwendet und die Umgebung ist im Allgemeinen verrauscht.
  • Die vom PC empfangenen Daten sollen in einer Tabelle gespeichert werden. Ich dachte, ich kann mich später um diesen Teil kümmern.
  • Der Abstand zwischen jedem PIC beträgt ungefähr 2-3 Meter. Der PC befindet sich am Ende der Leitung, ungefähr 10 Meter, die Verbindung zwischen dem PIC und dem PC kann entweder physisch oder drahtlos sein, obwohl ich drahtlos bevorzuge, da er problemloser ist (glaube ich ...), obwohl die Daten robust sind gesendet hat Priorität
  • wie üblich, das System muss so billig wie möglich sein, ohne die Zuverlässigkeit zu beeinträchtigen.

Ich habe einen PIC erfolgreich über RS- mit dem PC verbunden. Ich weiß also genug, dass Sie nicht alle 5 PICs mit RS direkt an einen PC anschließen können. zu lästige und Entfernungsprobleme. Was ich denke, ist so etwas wie ein Hub; Die 5 PICs stellen eine Verbindung zu einem Master-PIC her, der im Gegenzug alle Daten von den 5 PICs abruft und an den PC sendet. Ich habe ein paar Sachen über I2C gelesen und ich denke, das ist machbar genug. Ich habe auch nach drahtlosen Lösungen wie XBee gesucht. Ich habe SKKCA von Cytron erhalten, aber ich weiß nicht, wie ich die Datenkommunikation mit vielen zu eins verarbeiten soll.

Hat jemand bessere Ideen, wie ich dies auf die am wenigsten schmerzhafte und kostengünstige Weise erreichen kann? Dieses gesamte Projekt ist eine Ein-Mann-Show, daher möchte ich die Dinge lieber einfach und kostengünstig halten.

Vielleicht möchten Sie nur einen Adapter mit mehreren seriellen Schnittstellen? http://www.moxa.com/product/UPort_1610-16.htm
Ich denke nicht, dass die RS-232-Verbindung in Entfernungen von 5 Metern oder mehr aufrechterhalten werden kann, aber das Gerät selbst ist schön. Außerdem stecke ich auf der halben Welt fest, so dass es zu lange und zu teuer wird, obwohl ich es bestellen kann.
RS232 kann in diesen Entfernungen kommunizieren, insbesondere wenn Sie keine hohe Baudrate verwenden. In Anbetracht dessen, was ich Ihrer Meinung nach diskutiere, scheint es nicht viele Daten zu geben, so dass eine langsame Baudrate (z. B. 2400) einen langen Weg gehen kann. http://www.lammertbies.nl/comm/info/RS-232_specs.html
@kenny - Für 10 m sollte eine langsame Baudrate nicht erforderlich sein. Laut Ihrer verlinkten Seite sollten 2400 Baud in der Lage sein, 3.000 Fuß zu laufen.
Haben Sie [RS485] (http://en.wikipedia.org/wiki/RS-485) ausprobiert? Es hat eine bessere Störfestigkeit als RS232 und ist Multidrop.
Fünf antworten:
#1
+10
Olin Lathrop
2011-09-07 17:51:20 UTC
view on stackexchange narkive permalink

Ich weiß nicht, wie sehr Sie auf dem 16F877A stecken, aber das ist eine schlechte Wahl für so etwas. Stellen Sie sich die 16er-Serie nur für spezielle Situationen vor, wie z. B. hohe Stückzahlen, bei denen ein etwas niedrigerer Preis wichtig ist, besonders wenig Strom oder eine geringe physische Größe. Sie haben keines dieser Probleme, und der 16F877A ist sowieso ein altes Allzweckteil.

Ich würde so etwas wie einen 18F4580 verwenden, in den ein CAN-Transceiver integriert ist. Ihre Anwendung schreit nur nach CAN. Es ist ein Differentialbus, hat also eine gute Störfestigkeit. Ihre Entfernungen können auch mit einer maximalen Geschwindigkeit von 1 Mbit / s problemlos bewältigt werden. RS-485 ist, wie andere bereits erwähnt haben, ebenfalls ein Differential, stoppt jedoch bei der elektrischen Spezifikation. Darüber hinaus müssen Sie Ihr eigenes Protokoll entwerfen und dabei Kollisionen, Wiederholungsversuche, Arbitrierung, Bitfehler usw. berücksichtigen. Dies ist natürlich machbar, aber es gibt noch viel mehr kleine Fallstricke, die Ihnen auf den ersten Blick wahrscheinlich nicht klar sind. Es gibt viele Möglichkeiten, dies falsch zu verstehen, und die meisten Menschen tun dies zumindest beim ersten Mal.

Mit CAN ist alles im Standard definiert und in der Hardware implementiert. Sie senden eine Nachricht, die nur an den anderen Knoten angezeigt wird. Mehrere Knoten, die gleichzeitig zu senden versuchen, werden automatisch behandelt. Es gibt ein definiertes Arbitrierungsschema, das die Hardware-CAN-Peripheriegeräte implementieren, mit automatischem Wiederholungsversuch, bis die Nachricht durchkommt. Jede Nachricht enthält auch eine 16-Bit-CRC, die erneut generiert und in der Hardware überprüft wird.

Das Erlernen von CAN und des CAN-Peripheriegeräts erfordert ein wenig Aufwand, ist jedoch weniger als das Ausführen eines eigenen Protokolls auf RS-485, zumindest wenn Sie es richtig machen. Außerdem ist CAN eine gute Sache zu lernen, während RS-485 ein Erbe aus einer vergangenen Ära ist.

Wenn Sie keinen PIC mit integriertem CAN verwenden können (obwohl einige den gleichen Platzbedarf wie der archaische 16F877A haben), können Sie den externen CAN-Chip verwenden, der über SPI mit dem PIC kommuniziert. Unsere kostenlose Version der PIC Development Tools unter http://www.embedinc.com/pic/dload.htm enthält Quellcode sowohl zum Ansteuern des externen CAN-Chips als auch des internen CAN-Peripheriegeräts eines 18F4580.

Sie benötigen etwas, mit dem der PC mit dem CAN-Bus kommunizieren kann, aber solche Dinge sind ab Lager verfügbar. Wir haben unseren eigenen USB-zu-CAN-Adapter, der es noch nicht zu einem Produkt geschafft hat, aber ich wäre bereit, das Design und den Quellcode dafür zu veröffentlichen. Wenn ich mich recht erinnere, ist National Instruments eines der Unternehmen, das CAN-Adapter von der Stange für einen PC herstellt.

Erhält meine Stimme - ich stimme zu, dass dies für einen halbwegs anständigen PIC und CAN eine leichte Aufgabe zu sein scheint.
+1 für CAN, wodurch mehr als genug Platz für zukünftige Erweiterungen bleibt.
Zum ersten Mal habe ich von CAN gehört. Kann ich den CAN drahtlos durchführen oder muss er rein physisch sein? Der 16F877A ist der PIC, mit dem ich am besten vertraut bin und den ich gerade habe. Ich würde sie natürlich lieber verwenden, aber wenn die Situation eine bessere Hardware erfordert, muss ich den richtigen PIC verwenden. Wie lange dauert es durchschnittlich, um das CAN-System zu implementieren?
Ein USB-zu-CAN-Adapter sieht teuer aus. Zumindest die, die ich bei einem schnellen Googeln gefunden habe, wie dieser [CANUSB] (http://www.canusb.com/index.htm) Kann eine Hub-Methode implementiert werden, bei der die Slaves über CAN und der Master über PC mit RS-232 gemastert werden?
@Sodrohu: Sicher, Sie können Ihren eigenen RS-232-CAN-Konverter herstellen. Der 18F4580 verfügt sowohl über ein CAN-Peripheriegerät als auch über einen UART, sodass die Konverterfunktion in einem einzigen Mikrocontroller ausgeführt werden kann.
@Sodrohu: CAN ist eigentlich eine Protokollspezifikation, die einen elektrischen Bus annimmt, der passiv in einen Zustand und in den anderen Zustand übergeht, wenn er aktiv von einem oder mehreren Knoten angesteuert wird. Dies wird fast immer als Differenzpaar implementiert, das an jedem Ende mit 120 Ohm abgeschlossen ist. In jedem Fall eignet sich dies nicht gut für Radio. Die Verwendung von Radio ist ein separates Problem und erhöht die Komplexität Ihres Systems erheblich.
@Olin Lathrop: Sie haben mit CAN einen guten Fall gemacht. Ehrlich gesagt bin ich fasziniert, aber ich denke, ich werde zuerst mit RS-485 beginnen, um zu sehen, ob es für die aktuelle Aufgabe gut genug ist. Außerdem bin ich ziemlich neu in der UC-Kommunikation im Allgemeinen (außerhalb von RS232), daher bin ich gespannt darauf, alles auszuprobieren, nur um zu erfahren, wie es ist. Wenn ich den RS485 zum Laufen bringen kann, werde ich versuchen, mit der CAN-Methode zu beginnen.
Sodrohu: Natürlich alles, aber das Erlernen der Verwendung der CAN-Hardware ist einfacher als das Entwerfen, Implementieren und Testen eines robusten RS-485-Protokolls.
#2
+7
Mike DeSimone
2011-09-07 18:16:55 UTC
view on stackexchange narkive permalink

RS485 ist in der Tat die übliche Lösung für diese Umgebung. CAN ist auch eine gute Lösung, kann aber für Ihre Anwendung etwas viel sein. Es ist wirklich für Multi-Master-Setups gedacht. Sie brauchen es jedoch nicht, da Sie einen PC haben, der den Bus beherrscht.

Es gibt eine vereinfachte Version von CAN namens LIN Bus, die davon ausgeht, dass ein einzelner Master mit mehreren Slaves verbunden ist . Für komplexere Netzwerke wird es normalerweise mit einem CAN-Bus verbunden. Es sind Transceiver-Chips erhältlich, die LIN mit einem Standard-TTL-UART und einigen PIO-Pins verbinden. Microchip verkauft drei und bietet Support-Code.

Gibt es eine Möglichkeit, den RS-485 drahtlos zu machen, oder ist er rein physisch?
RS-485 ist ein physikalischer Schichtstandard für Kabelverbindungen. Die Implementierung von Wireless ist komplexer als die von 485 oder CAN.
Nach Ihrer Beschreibung Ihrer Umgebung ist die drahtlose Kommunikation weitaus komplexer, da für Ihre EMI-Situation hochentwickelte Empfänger erforderlich sind, um Ihr Signal aus dem Dreck zu ziehen, und dennoch an jedem Punkt, an dem Sie einen Sensor benötigen, Strom benötigt wird. Es macht aus einem Maulwurfshügel einen Berg.
#3
+1
Leon Heller
2011-09-07 17:05:36 UTC
view on stackexchange narkive permalink

Setzen Sie einen RS-485-Transceiver auf jede Karte und implementieren Sie ein einfaches Master-Slave-Netzwerk. Ich würde einen moderneren Chip als den 16F877A verwenden, wie den PIC16F887 oder einen PIC18.

Gibt es offensichtliche Vorteile bei der Verwendung von etwas Modernerem als einem 16F877A?
#4
+1
kenny
2011-09-07 17:09:06 UTC
view on stackexchange narkive permalink

Angenommen, Ihnen gefällt die vorgeschlagene RS485-Lösung nicht. Wie wäre es dann mit RS232 in einer Daisy Chain? Jeder Schraubenzähl-Slave gibt jede Nicht-Konfigurationsmethode wieder.

Eine weitere Option ist RFID. Lassen Sie jede Schraubenzählung eine RFID-ID / Nachricht mit der Anzahl der Schrauben als Teil ihrer Kennung senden.

RS232 Daisy Chain: Wenn einer ausgeht, gehen alle aus. Nun, nicht alle, aber Sie haben die Idee. Außerdem müssen alle Mikrocontroller zusätzlich zu der Arbeit, die sie ausführen sollen, die gesamte Bandbreite durchlaufen. RFID würde einen Scanner in der Nähe jeder Einheit erfordern, um sicherzustellen, dass sie mit Strom versorgt wird.
#5
-2
Saneesh A T
2011-09-28 00:27:28 UTC
view on stackexchange narkive permalink

Hier ist die Stromversorgung kein Problem, Sie können sich einfach für eine drahtlose Lösung entscheiden.

Da Sie eine kostengünstige Lösung benötigen, bevorzuge ich Folgendes ...

Zuerst können Sie ein verdrahtetes USART-Netzwerk erstellen, in dem alle RX-Pins mit der TTL-Seite eines einzelnen MAX und TX-Pins mit demselben MAX verbunden sind. Weisen Sie jedem Slave eine Adresse zu. Der Slave bleibt in der Kommunikationsleitung inaktiv, während alle anderen Aktivitäten fortgesetzt werden. Senden Sie die Eingänge (Anzahl der verwendeten Schrauben) an eine Warteschlange, in diesem Fall einfach an ein Array.

Nun die Masterseite,

Welches ist der PC und ist mit dem RS232 verbunden Seite des MAX. Sie können einfach Ihr eigenes Protokoll erstellen, um mit jedem der Slaves zu kommunizieren. Der bessere Weg ist die 9-Bit-Kommunikation mit Adresserkennung. Sie können einen einfachen Befehlssatz wie folgt erstellen:

BEFEHL: ECHO_ADDRESS

HEX VALUE: 0XAA

BEDEUTUNG: Wenn die ECHO_ADDRESS empfangen wird, wird der adressierte Slave empfangen Senden Sie seine Adresse zurück.


BEFEHL: SEND_COUNT

HEX VALUE: 0XA1

BEDEUTUNG: Wenn SEND_COUNT empfangen wird, sendet der adressierte Slave die Nummer von Daten in seinem Puffer vorhanden.


Ich denke, diese Lösung ist billig und Sie müssen sich nicht für einen fortschrittlichen Prozessor entscheiden. Der von Ihnen ausgewählte Prozessor verfügt über genügend RAM und ROM.

Wenn Sie das System auf drahtlose Konnektivität aktualisieren, ist es am billigsten, normale HF-Transceiver zu erwerben. Entfernen Sie das an Ihre RX- und TX-Pins angeschlossene Kabel und setzen Sie den Transceiver dort ein. Schließen Sie denselben HF-Transceiver an Ihren MAX an. Hier müssen die Sendefrequenz auf der MAX-Seite und die Empfängerfrequenz an den Slaves gleich sein und umgekehrt.

Bei der Auswahl der HF-Frequenz ist es besser, die Umgebungsverzerrungen zu berücksichtigen.

Hai,
Der erwähnte drahtlose Transceiver ist kein moderner drahtloser Transceiver wie ZigBee, Wi-Fi ... Ich schlug einen einfachen RF-Transceiver mit geringen Kosten vor. In diesem Fall benötigt er keine hohe Datenrate. Ich verwende das drahtlose Modul von rund 2 US-Dollar für eine Kommunikation mit niedrigerer Datenrate und es bietet eine zufriedenstellende Leistung. Nun, warum ich Wireless vorgeschlagen habe, die Antwort, dass der Kunde meiner Meinung nach glücklicher sein wird, wenn keine Kabel vorhanden sind oder zusätzliche Verkabelung erforderlich ist und das Produkt gut aussieht.

Wir können viele TX-Pins miteinander verbinden . Da unser Master den Bus steuert, sind die Kollisionskanäle zu gering. Sie haben jedoch Recht, dass es aufgrund von Kommunikationsfehlern zu Kollisionen kommen kann. Wir müssen das Gerät vor dieser Kollision schützen, dies kann durch einen elektrischen Isulator erfolgen.

Dies ist möglicherweise keine perfekte Lösung, funktioniert jedoch für die aktuelle Situation.

Drahtlos ist weder einfach noch billig und eine schlechte Lösung für Geräte, die sich nicht bewegen und in einer elektrisch lauten Umgebung existieren.
Es ist auch nicht erforderlich, "Danke im Voraus" und "Danke fürs Zuhören" unter all Ihre Beiträge zu schreiben. Ihre Leser werden sich mit Upvotes, Antworten und Kommentaren bei Ihnen bedanken, wenn Ihr Beitrag lesenswert ist. Bitte beenden Sie diese Praxis.
Drahtlos ist im Vergleich zu kabelgebundenen Bussen wie RS-485 oder CAN weder kostengünstig noch einfach. Sie können auch keine TX-Pins mehrerer UARTs miteinander verbinden, und Sie haben Kollisionen vollständig ignoriert.


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...