Nur zur Klarstellung: Ich versuche nur zu sehen, ob ich für dieses Projekt auf dem richtigen Weg bin und herauszufinden, was der beste Angriffsplan sein könnte.
Ich versuche, einen sequentiellen Verkehrscontroller als Zustandsmaschine zu simulieren, indem ich D-Latches mit einer "One-Hot"-Zustandszuweisung verwende. Die jeweilige Kreuzung sieht so aus:
Die Kreuzung soll wie folgt funktionieren:
Wenn keiner der Sensoren aktiv ist, durchlaufen die Ampeln einen festen Zyklus abwechselnd zwischen Hauptstraße und Seitenstraße (Abbiegelicht ist rot; Autos können auf einer Hauptstraße nicht grün abbiegen).
Wenn ein Sensor aktiviert wird, gibt der nächste Zyklus dieser Richtung einen grünen Pfeil, nachdem die Seitenstraße gegangen ist, aber bevor die Hauptstraße in die entgegengesetzte Richtung geht.
Ich plane, zwei Standardlichter (rot, gelb, grün) für jede Straße (eine für jede Richtung) sowie zwei zusätzliche Lichter (rot, gelb, grüne Pfeile ) für die Abbiegespuren auf der Hauptstraße zu verwenden.
Mein Prof sagte, dass es akzeptabel ist, ein Licht gleichzeitig von gelb nach rot und ein anderes von rot nach grün zu wechseln (z. B. müssen wir uns keine Sorgen machen, nach jedem Zyklus in einen kurzen Zustand von ganz rot zu wechseln). Außerdem werden die "Sensoren" mit Drucktasten implementiert und aktiv niedrig sein, und LEDs werden für jede "Ampel" (mit jeweils einem Rot, Gelb und Grün) verwendet, die aktiv hoch sein werden. Abgesehen davon sagte er, dass er Urteilsvermögen und gesunden Menschenverstand verwenden sollte, um es zu konfigurieren (wie viele Lichter verwendet werden sollen, was passiert, wenn die Sensoren genau zur gleichen Zeit ausgelöst werden usw.). Ich programmiere die Logik, nachdem sie festgelegt wurde, also mache ich mir noch keine Sorgen um diesen Teil. Ich denke, sobald ich das Zustandsdiagramm habe, werde ich dazu in der Lage sein.
Ich begann mit dem Erstellen einer Ausgabetabelle der trivialen Zustände, die ich für die Schaltung benötigen würde:
(Entschuldigung, es ist klein, ich habe es in Excel gemacht und sehe keine Möglichkeit, es anzuhängen)
Für die Ausgänge habe ich diese Abkürzungen verwendet:
Ich werde die Sensoren, die die Eingänge der Zustandsmaschine sind, als IE und IW bezeichnen, die jeweils für induktiv (den Sensortyp im Problem) Ost bzw. West stehen. Auf Anhieb sieht es so aus, als gäbe es eine Redundanz; Die roten, gelben und grünen Bundesstaaten der Side St. in Richtung Norden und Richtung Süden sind genau gleich. Abgesehen davon fällt mir sonst nichts auf, was die Vereinfachung angeht. Ist dies der richtige Weg, um fortzufahren? Ich habe das Gefühl, dass ich das vielleicht etwas schwieriger mache, als es sein muss. Was wäre, wenn ich alle Rottöne für einen bestimmten Zustand erzeugen würde, indem ich einfach das grüne oder gelbe Signal invertiere?
SG → SY → MG → MY entspricht dem „festen Zyklus“ ohne ausgelöste Sensoren. Unter Bezugnahme auf die Ausgangstabelle für die Ausgänge lautet das Zustandsdiagramm:
wobei C die positive Flanke des Taktimpulses ist.
Fügen Sie nun hinzu, was passiert, wenn ein Sensor aktiviert wird. Wenn, sagen wir, IE = 0, wenn wir nach SY kommen (da beim ersten Tick der Uhr SG immer nach SY geht, muss die Schaltung daran denken, den Pfeil zu dieser Abbiegespur im nächsten Zyklus zu geben, nachdem Side St. geht, aber vor der Main St. geht es in die entgegengesetzte Richtung. Also möchte ich von SY → MEGTG → MEGTY gehen, dann zurück, um einen normalen Zyklus zu beenden MG → MY → SG. Ebenso, wenn IW=0, wenn wir bei SY ankommen von SY → MWGTG → MWGTY gehen möchte, dann zurück, um einen normalen Zyklus zu beenden.
Ich habe noch nicht herausgefunden, was zu tun ist, wenn beide Sensoren angespannt sind. Ich habe überlegt, von MWGTY → MEGTG zu gehen, wenn der Ostsensor ausgelöst wird, aber das wird nicht funktionieren, weil die Hauptstraße in Richtung Westen von einer grünen direkt zu einer roten Ampel gehen würde. Wenn der Westsensor ausgelöst wird, würden wir von MEGTY → MWGTG gehen, wobei die Hauptstraße in Richtung Osten von grün auf rot wechseln würde. Vielleicht könnte ich einen Zustand hinzufügen, so dass, wenn IE = 0 ist, wenn MWGTY erreicht ist, es zu einem Zustand geht, in dem die Hauptstraße in Richtung Westen mit dem Abbiegelicht gelb wird, bevor es zu MEGTG geht. Ich könnte etwas Ähnliches tun, wenn der Westsensor bei MEGTY ausgelöst wird. Das einzige Problem beim Hinzufügen eines Zustands zwischen MWGTY → MEGTG oder MEGTY → MWGTG ist, dass das C nicht invertiert wird, wenn es bei MEGTG oder MWGTG ankommt, obwohl ich im neuen Zustand bleiben könnte, bis es invertiert wird, bevor ich zum nächsten Zustand gehe . Wie ich sagte, Es liegt an mir, wie ich es machen möchte, da es nicht spezifiziert ist. Mir geht es nur darum, es so einfach wie möglich zu machen.
Sobald ich alle Zustände bestimmt habe, kann ich eine Zustandstabelle erstellen. Da es sich um eine "One-Hot"-Zuweisung handelt, wären die Status 000001, 000010, 000100 usw. Nachdem ich die Zustandstabelle habe, kann ich die Logik programmieren. Also versuche ich zu sehen, ob ich bis zu diesem Punkt auf dem richtigen Weg bin, bevor ich damit beginne.
Ich finde, du gehst viel zu früh ins Detail. Ich habe vor vielen Jahren komplexe Zustandsmaschinen entworfen, und diese Art von Problem wird ein bisschen schwierig zu lösen sein.
Schritt 1 besteht darin, das Verhalten richtig hinzubekommen. Denken Sie noch nicht einmal daran, Binärzahlen zur Darstellung der Zustände zuzuweisen. Aus Ihren Postings geht eindeutig hervor, dass Sie das ganze Verhalten nicht wirklich ausgearbeitet haben.
Schritt 2 besteht darin, Zustandscodes zuzuweisen und eine Implementierungstechnik wie die Methode der algorithmischen Zustandsmaschine (ASM) zu durchlaufen, um die Logik zu entwerfen und zu vereinfachen, vorausgesetzt, Sie bauen eine Logikschaltung, um sie zu implementieren. Dann können Sie sich um die physische Implementierung auf Chips wie FLPS (Field Programmable Logic Sequencer) oder sogar FPGAs (Field Programmable Gate Arrays) kümmern, und die Darstellung des Designs kann entweder als Schaltplan (Schaltplanerfassung) oder als Hardwarebeschreibungssprache erfolgen (HDL) basiert.
Machen Sie sich darüber noch keine Gedanken. Konzentrieren Sie sich zunächst darauf, das Verhalten zu entwerfen.
Sie sind direkt in ein Zustandsdiagramm gegangen. Das ist Ihr Endergebnis. Das versuchen Sie zu erreichen, also können Sie dann die Zustandsmaschine bauen.
Ich denke, Sie müssen darüber nachdenken, beispielsweise ein UML-Sequenzdiagramm zu verwenden, um das Verhalten zu veranschaulichen. Jede Ampel und jeder Sensor (induktiver Sensor) ist ein Objekt im Sequenzdiagramm, und die Sensoren lösen eine Reihe von Verhaltensweisen aus. In einem UML-Sequenzdiagramm fließt die Zeit die Seite hinunter, sodass Sie zeitbasiertes Verhalten und das, was passiert, einfach darstellen können zu den Lichtern, nachdem der induktive Sensor ausgelöst wurde.
Ich würde also vorschlagen, das zeitbasierte Verhalten zuerst mit einem Sequenzdiagramm zu entwerfen, und wenn Sie das richtig verstanden haben, was Sie wollen, können Sie zu einem Zustandsdiagramm wechseln. Dann können Sie mit dem Bau fortfahren.
trosley
Linkshänder
Guill
Linkshänder
Edelstahlratte
Linkshänder
Edelstahlratte
Linkshänder
Linkshänder
Linkshänder
Linkshänder