Ich arbeite an einer Schaltung in Verilog, die auf einem CPLD implementiert werden soll. Der Ausgang der Schaltung treibt einen Schrittmotor an. Die Eingabe ist ein Strom von Impulsen von einer Maschine.
Ich erzeuge alle X Spindelimpulse einen Schrittimpuls. Kein Problem, funktioniert super.
Während der Simulation ist mir jedoch aufgefallen, dass das Schrittsignal hoch bleibt, wenn das Schrittsignal hoch ist, wenn die Spindelimpulse stoppen (z. B. wenn jemand die Maschine ausschaltet). Dies liegt daran, dass ich es an der Vorderflanke des Spindelimpulses auf niedrig zurücksetze und es keine weiteren gibt.
Dies bedeutet, dass (bei einer schlechten Implementierung) der Stepper mit voller Geschwindigkeit betrieben werden könnte, was zu einem Maschinenabsturz führen würde. Jetzt würde ich hoffen, dass der Stepper-Controller nur an der Vorderkante arbeitet, aber man weiß nie.
Abschließend die Frage - da ich mich nicht darauf verlassen kann, dass meine "Uhr" (die Spindelimpulse) endlos weitergehen, was ist ein guter Weg, um den Stepper-Impuls nach "einer Weile" niedrig zu halten.
Wie Sie sehen, kann ich es nicht einmal richtig beschreiben, also kann ich es nicht googeln, lol. Wenn mir jemand ein paar Wörter zum Suchen geben könnte (oder noch besser, eine Standardtechnik beschreiben könnte), würde ich mich auf den Weg zu den Rennen machen.
Danke!
BEARBEITEN -
Ich experimentiere mit Folgendem (aus dem Gedächtnis getippt...) Ist das Traurigkeit oder eine gute Idee?
always @(posedge Stepper) begin
#50 // or whatever, this is a low Hz system...
Stepper = 0;
end
Oder funktioniert die Verzögerung nur im Simulator?
Der beste Weg (je nachdem, wie komplex Ihr endgültiges Design sein wird) wäre wahrscheinlich, einen separaten schnellen CMOS-Oszillator für Ihren CPLD-Systemtakt zu verwenden und ihn die Eingangsimpulse verarbeiten und den Schrittimpuls ausgeben zu lassen.
Auf diese Weise läuft die Uhr die ganze Zeit, wenn das System eingeschaltet ist, und sie kann die Periode ab dem letzten Eingangsimpuls messen - wenn sie über einer bestimmten Grenze liegt, setzen Sie die Schrittleitung auf niedrig.
So funktioniert ein typisches synchrones Design, Sie haben einen unabhängigen systemweiten Takt und dieser wird verwendet, um externe asynchrone Signale zu "lesen" (dh in ein Register) und zu verarbeiten (im Gegensatz zu den externen Signalen, die die Logik direkt takten).
Eine andere einfachere Möglichkeit wäre, eine weitere "Reset" -Eingangsleitung zu haben, die alle Register und Ausgänge auf einen bestimmten Zustand setzt, wenn sie niedrig wird. Sie könnten dann einen einfachen RC-Tiefpassfilter für die Eingangsimpulse verwenden, sodass die Leitung beim Stoppen auf Low fällt und das CPLD zurückgesetzt wird.
Oli Glaser
Toni Ennis
Oli Glaser