So bestimmen Sie die Reihenfolge der in die Controller-Karte eingesteckten Karten


7

ÜBERARBEITET: Ich habe eine Master-Controller-Platine mit vier Sammelschienen (+, - und zwei Signalleitungen), siehe Abbildung unten. Ich habe Modulplatinen AC (oder 10 oder 15 davon) mit jeweils MCUs und eindeutigen Kennungen, die in unbekannter Reihenfolge in die Buchsen eingesteckt werden (und möglicherweise alle vorhanden sind oder nicht). Wie könnten die Modulplatinen mit der Hauptsteuerung kommunizieren, damit die Hauptsteuerung die Reihenfolge der Modulplatinen kennt? (Im Digramm wäre es [C, A, B].) Die zwei gezeichneten "Signal" -Linien könnten neu konfiguriert werden (oder zusätzliche Komponenten / Schaltungen hinzugefügt werden).

Geben Sie hier die Bildbeschreibung ein

ORIGINAL: Ich habe eine Master-Controller-Platine mit den Buchsen 0-5. Ich habe Modulplatinen AF (dies sind auch die eindeutigen IDs, entweder über eine MCU oder auf andere Weise), die in einer unbekannten Reihenfolge in die Buchsen eingesteckt werden (und möglicherweise alle vorhanden sind oder nicht). Ich frage mich, ob es für den Master-Controller eine einfache Möglichkeit gibt, die Reihenfolge der Modulplatinen zu ermitteln. (Im Digramm wäre es [C, E, A, B, F, D].) Es ist eine "Signal" -Linie gezeichnet, aber es könnten zusätzliche hinzugefügt werden (oder zusätzliche Komponenten / Schaltungen).

Controller-Bus mit Kartenmodulen


Sie benötigen mehr als nur einen Bus an der Steckdose.
DKNguyen

2
Im Allgemeinen tun Sie dies entweder, indem Sie dedizierte Leitungen (möglicherweise von einem MUX) zu jedem Steckplatz haben, über die Sie einen Identitätswiderstand, eine parallele Sammlung von Jumpern oder einen Eindraht- oder I2C-Identitätsnummernchip lesen können, oder Sie haben eine Verkettung Signalisieren, wo Sie Elemente anhand ihrer Position in der Kette adressieren und eine digitale Identität auslesen können (dh etwas Ähnliches wie JTAG, obwohl die Verwendung von tatsächlichem JTAG für JTAG-ähnliche Zwecke zwischen Karten eine schlechte Idee ist, da lange Ketten langsam und für intensive unzuverlässig sind Operationen)
Chris Stratton

1
Weitere Infos bitte. Weiß Karte C, dass es Karte C ist? Weiß Karte F, dass es Karte F ist? Oder sind die Karten identisch? Kann der Master jeden Steckplatz einzeln lesen? Oder teilen sich die Slots gemeinsame Signalleitungen?
Scorpdaddy

6 Karten, also 3 Bits Datenidentifikation auf jeder Karte, damit der Master jede identifizieren kann. Angenommen, es kann jeden Socket unabhängig adressieren.
rdtsc

1
Wie viele Backplane-Pins haben Sie und wie viele können Sie der Identifikationsfunktion widmen?
TonyM

Antworten:


1

In den Kommentaren sagen Sie: -

Der Master-Controller wird wahrscheinlich nicht mit Strom versorgt, wenn die Karten eingesteckt sind

Wenn beim Einschalten des Controllers keine Karten eingelegt oder entfernt werden, muss die Reihenfolge nur beim Start überprüft werden. Dies kann mit einer Signalleitung erfolgen, die an jedem Steckplatz aufgeteilt ist, wobei jede Karte das Signal an den nächsten Steckplatz weiterleitet, sobald es identifiziert wurde. Steckplätze ohne Karten müssen das Signal ebenfalls weiterleiten.

Hier ist, wie es mit Logikgattern gemacht werden könnte.

schematisch

simulieren Sie diese Schaltung - Schema erstellt mit CircuitLab

Jeder Steckplatz verfügt über ein UND-Gatter auf der Rückwandplatine und einen Pullup-Widerstand am Eingang "Fertig", sodass das Signal "ID" an den nächsten Steckplatz weitergeleitet wird, auch wenn keine Karte vorhanden ist. Beim ersten Einschalten ziehen alle Karten ihre 'Done'-Ausgänge auf niedrig, um zu verhindern, dass das ID-Signal zum nächsten Steckplatz gelangt. Jede Karte wartet dann darauf, dass ihr ID-In-Signal hoch geht, was darauf hinweist, dass der Controller es identifizieren möchte.

Der Controller zieht das ID-Signal im ersten Steckplatz nach oben und spricht dann mit der Karte, die antwortet. Sobald die Karte identifiziert wurde, wird die Ausgabe "Fertig" hoch und ignoriert dann weitere ID-Anforderungen, sodass die nächste Karte antworten kann. Dies wird fortgesetzt, bis keine Karte mehr antwortet. Dann weiß der Controller, dass alle Karten berücksichtigt werden, und die Reihenfolge der Karten ist die Reihenfolge, in der sie identifiziert wurden.

Das 'ID'-Signal kann auch eine der normalen Signalleitungen sein, sodass Sie möglicherweise nur einen zusätzlichen Pin pro Steckplatz benötigen. Wenn Sie Hunderte von Karten haben, können Gate-Verzögerungen ein Problem sein. In diesem Fall benötigen Sie 2 zusätzliche Pins pro Steckplatz (die sich möglicherweise auf gegenüberliegenden Seiten der Platine befinden). Das UND-Gatter könnte ein 74LVC1G08 sein , der in 100 Stück ~ 0,1 US-Dollar kostet.


1

Wenn Sie eine weitere Leitung mit hohem Widerstand pro Länge hinzufügen könnten, könnten Sie ein Ende an die positive Stromversorgung und das andere an die negative Stromversorgung anschließen. In diesem Fall kann jede Karte ihre Position messen und dem Master melden.

Eine andere Möglichkeit wäre, dass am Master diese Leitung mit bekanntem Widerstand an eine positive Stromversorgung angeschlossen wird und beim Einsetzen der Karte die negative Stromversorgung an der Leitung an ihrer Position angeschlossen wird. Der Master kann dann die Position selbst messen und die Karte anweisen, sich von dieser zu trennen Linie.


scheint eine clevere Lösung zu sein. Wie hoch wäre die Präzision eines solchen Systems (oder welche Faktoren hätten dazu beigetragen)? Wenn die hochohmige Linie 100 mm lang wäre, könnten zwei Karten, die 10 mm voneinander entfernt sind, zuverlässig in der richtigen Reihenfolge gelesen werden? Ist die Präzision in einem solchen System entlang der Länge linear? Ist das Strommessung? Entschuldigung, wenn dies grundlegende Fragen sind und danke für die Gedanken.
Zachary Russell Heineman

Außerdem habe ich versucht, mich über den Widerstand pro Länge zu informieren. Kann dies erreicht werden, indem nur schmale Spuren auf der Leiterplatte vorhanden sind?
Zachary Russell Heineman

@ZacharyRussellHeineman Ich kann die meisten Ihrer Fragen nicht beantworten, da ich nicht versucht habe, dies selbst zu machen. Ich denke, die meisten Probleme würden durch elektrische Störungen verursacht. Sie messen die Spannung, da diese Leitung im Spannungsteiler grundsätzlich ein variabler Widerstand ist. Das gesamte System muss nicht linear sein, wenn Sie nur die relative Position der Karten wünschen, aber dieselbe Position hat im Laufe der Zeit den gleichen Widerstand. Ich denke, für einen ausreichend hohen Widerstand pro Länge würden Sie anderes Material als Kupfer wie Kohlenstoff benötigen.
Rokta

Danke @Rokta. Ich habe einen Link zu resistiven Spuren gefunden: eevblog.com/forum/projects/how-to-get-resistive-traces-on-pcb . Ich denke, dass der Master, der die Messung durchführt, wahrscheinlich der richtige Weg ist, da jede Karte die Schaltung hat, um den Pin nach der Messung herunterzufahren.
Zachary Russell Heineman

1

Jede Buchse hat eine Buchsen-ID - Stecker 0 hat die Stifte 1,2,3 geerdet, Stecker 1 hat nur 2 & 3 geerdet usw.

Das Plug-In-Modul verfügt über I2C und eine eindeutige I2C-Adresse und kann die ID-Pins erkennen. An den ID-Erfassungsstiften befinden sich Klimmzüge.

Der Master sendet eine Nachricht an alle möglichen I2C-Adressen. Wenn keine Antwort eingeht, ist das Modul nicht angeschlossen. Wenn eine Antwort eingeht, kann das Modul mit der Socket-ID antworten. Jetzt wissen Sie, welches Modul sich in welcher Buchse befindet.

Ein mögliches Gerät ohne Mikrocontroller an jedem Modul besteht darin, ein Gerät wie den PCF8574 und einige Jumper zur Identifizierung des Moduls zu verwenden.

Sie benötigen 2 Pins für die I2C- und log2-Pins (Anzahl der Karten) für die Socket-IDs.

(Eine weitere Option besteht darin, einen Widerstandsteiler zur Identifizierung der Buchse - als Spannung - und einen I2C-ADC an jedem Modul zur Identifizierung der Position zu haben.) - Insgesamt 3 Pins erforderlich.


Dies erfordert natürlich viel mehr Backplane-Pins, ist aber auf jeden Fall praktikabel. Die Bereitstellung der ID-Pins (3) und des I2C-Takts / der I2C-Daten (2) bedeutet insgesamt 5 Pins.
Jack Creasey

@ JackCreasey mehr Stifte ist eine Möglichkeit
Zachary Russell Heineman

Danke für die Antwort, @D Duck.
Zachary Russell Heineman

Entspricht die Widerstandsteilerlösung der obigen Antwort von @ Rokta?
Zachary Russell Heineman

Der Schlüssel besteht darin, die Position anhand der Spannung zu codieren und das Modul ein sofort verfügbares I2C-ADC-Teil verwenden zu lassen und zu überprüfen, ob ein Gerät vorhanden ist.
D Duck

0

Diese Art von Problem (Identifizierung der Platine und Reihenfolge der Platzierung) ist sehr häufig zu lösen.

Sie müssen weitere Informationen bereitstellen, um den besten Rat zu erhalten:

  1. Sind IMMER alle Karten eingesteckt?
  2. Haben ALLE Karten eine eindeutige ID / Funktion?
  3. Haben Sie Boards mit der gleichen Funktion, aber unterschiedlichen IDs?

Sie können sich jedoch diese Antwort ansehen, in der vorgeschlagen wird, kleine MCUs zu verwenden, um die Informationen seriell bereitzustellen.

Geben Sie hier die Bildbeschreibung ein

Beachten Sie hier, dass die Kette unterbrochen ist, wenn Sie eine Karte weglassen (aber Sie wissen nicht, wo).
Ich habe dies in einigen Projekten (Supermini-Tage) behoben, indem ich ein Reed-Relais über jede Platinenposition und einen kleinen Magneten auf jeder Platine hinzugefügt habe. Wenn die Karte in den Magneten eingesteckt ist, wird der Reedkontakt offen gehalten. Wenn die Karte entfernt wird, wird der Kontakt geschlossen und das Ein- und Ausgangssignal kurzgeschlossen.


Kommentare sind nicht für eine ausführliche Diskussion gedacht. Dieses Gespräch wurde in den Chat verschoben . Alle Schlussfolgerungen sollten wieder in die Frage und / oder die Antwort (en) eingearbeitet werden.
Dave Tweed

0

Eine Möglichkeit besteht darin, dass jede Karte über einen Anschluss mit Überbrückungsstiften verfügt, die zu einem Sockel führen, der an das Motherboard angeschlossen wird. Diese Überbrückungsstifte werden durch festverdrahtete Verbindungen auf der Hauptplatine miteinander verbunden, die für jede Sockelposition eindeutig sind. Auf diese Weise weiß jede Karte automatisch, an welchen Sockel sie angeschlossen ist, und Sie können herausfinden, wie der Master diese Informationen von den Karten sammeln kann. Wenn Sie nur wenige Steckplätze haben, ist dies wahrscheinlich der einfachste und zuverlässigste.

- -

Eine andere Möglichkeit besteht darin, Leitungen zu haben, die NUR zwischen benachbarten Karten verlaufen, damit die Karten telefonieren und sich selbst zählen können. Dies funktioniert jedoch nicht mit übersprungenen Steckplätzen. Diese Methode erfordert etwas, um den Count-In-Prozess zu starten, z. B. einen Master oder eine Karte, die "weiß", dass es sich um die erste Karte handelt (möglicherweise einen Jumper, der angeschlossen wird, wenn er in den ersten Steckplatz der Hauptplatine eingesteckt wird, oder nur einen Jumper, den Sie manuell verwenden Schließen Sie die Karte selbst an, wenn kein Motherboard vorhanden ist.

Sie müssen auch wissen, dass die letzte Karte die letzte Karte ist. Sie können entweder eine der beiden oben genannten Jumper-Methoden verwenden, aber Sie können auch nur Timeouts verwenden, um die letzte Karte zu bestimmen (dh wenn die aktuelle Karte versucht, mit der nächsten Karte zu kommunizieren und keine Antwort erhält und eine Zeitüberschreitung auftritt) kann davon ausgehen, dass es die letzte Karte ist).

Diese Methode funktioniert am besten, wenn Sie eine fortlaufende Folge von Karten mit einer sehr großen oder beliebigen Anzahl haben. Ich habe diese Methode in einem Projekt verwendet, damit ich so viele identische Leiterplatten stapeln kann (kein Motherboard, nur Board-to-Board-Anschlüsse, damit ich Leiterplatten kontinuierlich übereinander stapeln kann), wie ich möchte, und alle zählen sich selbst ein und wissen genau Bescheid wo sie im Stapel sind.

Diese Methode ist auch ein Kinderspiel, wenn Sie bereits eine dedizierte serielle Verbindung haben, die ausschließlich zwischen benachbarten Karten ausgeführt wird, da keine zusätzliche Hardware erforderlich ist.

- -

Eine weitere (theoretische) Möglichkeit besteht darin, zwei Signalleitungen vom Master zu verwenden, die beim Vorbeifahren in jede Buchse abfallen. Eine Leitung ist nicht verzögert, während die zweite Leitung eine Verzögerungsleitung zwischen dem Ablegen in jede Buchse aufweist. Der Master sendet gleichzeitig einen Impuls über beide Leitungen und jede Karte misst die Zeitdifferenz zwischen der verzögerten Leitung und der nicht verzögerten Leitung. Dies lässt es wissen, wie weit es unten ist, und lässt es daher wissen, in welcher Buchse es sich befindet. Von dort aus können Karten vordefinierte Zeitinformationen verwenden, um zu wissen, wo sie sich auf der Leitung befinden, oder sie können einfach weit unten herausplatzen Linie sind sie zum Master und der Master kann ihre tatsächliche Reihenfolge sortieren (wenn die Entfernungen oder Verzögerungen aus irgendeinem Grund ungewiss sind). Diese Methode benötigt wahrscheinlich die wenigsten Stifte am Sockel (nur zwei). Ich denke, das Hauptproblem besteht darin, eine geeignete Verzögerungsleitungskomponente zu finden. Sie möchten wahrscheinlich eine, die mindestens zehn Mikrosekunden beträgt.

Der Hauptvorteil dieser Methode besteht darin, dass Sie Sockets überspringen können und dennoch nur 2 zusätzliche Socket-Pins für eine sehr große Anzahl von Karten benötigen (begrenzt durch den akkumulierten Zeitfehler aufgrund der Variationen in den Verzögerungsblöcken, wenn Sie weiter und weiter in der Kette sind .

schematisch

simulieren Sie diese Schaltung - Schema erstellt mit CircuitLab


1
Was ist mit der Verwendung von LEDs und Detektoren, damit der Master eine Karte zum Blinken auffordert und dann sieht, welche Karte den Blitz empfängt, dann blinkt diese Karte und so weiter?
Zachary Russell Heineman

@ZacharyRussellHeineman Sie können das auch tun, aber wenn Sie elektrische Verbindungen haben, können Sie genauso gut eine OP-Leitung mit offenem Kollektor, die allen Karten gemeinsam ist, zum Master zurückführen, damit diese reagieren können, sowie ein eindeutiges Signal vom Master an jeden Steckdose, damit der Master auf jede einzelne Karte aufmerksam machen kann.
DKNguyen

In ähnlicher Weise können Sie auch ein optisches Telefonspiel anstelle eines elektrischen spielen, bei dem jede Karte eine benachbarte Karte blinkt. Sie würden jedoch nur LEDs und Detektoren verwenden, wenn dies eine Anwendung wäre, bei der die Karten physisch getrennt oder diskrete Module (wie Pucks bei) wären ein Restaurant, um Ihnen zu sagen, wann Ihr Tisch verfügbar ist)
DKNguyen

@ZacharyRussellHeineman Ich habe das Gleiche gedacht, als Sie LEDs + Fototransistoren erwähnt haben. Es kann sich auch lohnen, sich mit Hall-Effekt-Schaltersensoren zu befassen, wenn Sie eine Möglichkeit finden, Magnete auf Ihrer Leiterplatte zu montieren.
Caleb Reister
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.