Zähleransteuerung mit Quadratursignalen
Im Bild sind oben rechts die Quadratursignale a und b eines inkrementalen Meßsystems dargestellt wie sie bei einer Maus, bei Längen- oder Winkelmesssystemen vorkommen. Sie bestimmen den Betrag des Messwerts durch die Anzahl der Takte und die Richtung durch ihre Phase zueinander. Links sind die beiden Signale a und b im Zustandsdiagramm dargestellt.
Sollen die Impulse mit einem up/down (u/d) counter gezählt werden, dann könnte man zunächst einfach die Signale a und b an clock und u/d durchschalten. Für jede der beiden Richtungen wird eine korrekte Zählung erfolgen, aber bei Richtungsumkehr können Fehler auftreten. Das kann man sich leicht am Zustandsdiagramm klar machen wenn man die für den Zähler wirksamen Zustandsänderungen betrachtet.
Ziel der Aufgabe ist es, eine möglichst einfache Schaltung einzufügen, die auch bei Richtungsumkehr eine korrekte Zählung sicherstellt. Eine einfache Lösung könnte ein asynchrones Gatternetz sein das beispielsweise mit 4 Gattern oder weniger auskommt.
Manfred
Liste der Anhänge anzeigen (Anzahl: 1)
Also das Problem hab ich mittlerweile erkannt - hoffe ich.
Angehängt hab ich mal ein Bildchen.
blau - Linksdrehung die erkannt wird
rot - Rechtsdrehung dir erkannt wird
Dort bei den Pfeilen wirds richtig erkannt - aber dazwischen gibts ein Problem.
Wenn nun dort wo es nicht erkannt wird würde es bei Richtungsänderungen Probleme geben weil genau dort nicht gezählt wird.
Aber wie man da jetzt mit ein paar Gattern eine Lösung finden könnte weiß ich (noch) nicht.
Liste der Anhänge anzeigen (Anzahl: 1)
Ein Schritt zur Lösung ist festzulegen, welche Übergänge ausgewertet werden sollen.
Zählfehler werden vermieden, wenn dem Zähler beide Übergänge zwischen zwei benachbarten Zuständen gemeldet werden. Links im Bild ist dies nur für ein paar benachbarter Zustände dargestellt, rechts für zwei Paare. Eine weiter Möglichkeit ist, alle vier benachbarten Paare zu berücksichtigen.
Ich fange schon mal mit der Beschreibung der linken Seite an:
Es ist eine positive Flanke an clock zu geben wenn sich der Wert von b ändert. Das Signal muss im neuen Zustand wieder für ein Signal bereit sein. Damit ist ein positiver Impuls mit positiver und negativer Flanke abzugeben. Wird nur der Wechsel links betrachtet, dann ist der Impuls nur unter der Bedingung durchzulassen, dass a = 0 ist.
Der Wert des up/down Signals richtet sich nun nicht mehr nach einem statischen Signal, sondern nach dem Wert von b den es vor der Änderung hatte. Das Signal b ist in der Änderung zu verzögern und an up/down zu geben.
Die Schaltung lässt sich damit durch die Generierung eines positiven Impulses aus einem Pegelwechsel, einer Durchlassbedingung für positive Impulse und einer Verzögerung realisieren.
Manfred
Liste der Anhänge anzeigen (Anzahl: 1)
wenn ich an den bezeichneten stellen die Flanke und deren richtung gewonnen habe, kann ich mit der Flanke und Data /Data den Zähler steuern.
was fehlt ?
Liste der Anhänge anzeigen (Anzahl: 1)
Das war jetzt auf der letzten Seite verschwunden. Die Schaltung sollte noch angegeben werden.
Bild links:
Die Schaltung für einen Übergangspaar pro Periode wurde ja schon diskutiert. Ein Signal mit sich selbst XOR- verknüpft bleibt beim Wechsel logisch auf null, es sei denn es wird auf der einen Seite der Verknüpfung verzögert. Dann erhält man für die Dauer der Verzögerung einen positiven Impuls. Dieser Impuls wird vom invertierten Signal von a durch das und Gatter gelassen.
Das verzögerte Signal von b für die Richtung wurde ja schon erzeugt und gibt die Zählrichtung an.
Bild rechts:
Die Schaltung für die Auswertung von zwei Übergangspaaren ist eher einfacher, da der Zählerpuls in gleicher Weise aus b erzeugt wird aber ohne Bedingung an clock durchgeschaltet wird.
Die Richtung kann wieder aus dem verzögerten Signal von b abgeleitet werden. Bei einer Änderung des Wertes von a also auf der gegenüberliegenden Seite des Zustandsdiagramms ergibt sich aber beim gleichen Wert von b die entgegengesetzte Richtung. Also wird b durch a bedingt invertiert, das heißt XOR verknüpft.
Die Verzögerung kann durch eine Inverterkette realisiert werden, aber beim diskreten Aufbau ist ein RC Tiefpass praktischer. Der Kondensator sollte so groß gewählt werden dass er sich gerade von der Streukapazität unterscheidet, also je nach Aufbau ca. 30pF und der Widerstand kann bei 68kOhm liegen. Dann erhält man eine Zeitkonstante von 2µs und die Verzögerung ist groß gegen die Gatterlaufzeiten und klein gegen die Rate der Eingangsimpulse.
Manfred
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab nun die möglichen Zustände /Übergänge in ein Sheet eingetragen
A = Eingang 1
a = Eingang 1 delayed
B = Eingang 2
b = Eingang 2 delayed
das Dach "^" stellt ein XOR dar
| = OR
& = AND
! = NOT
Die nichtgerahmte "Dir" ist die tatsächliche Richtung, das gerahmte DIR ganz rechts das abzuleitende
"AaBb" ist nur die Zusammenfassung der Eingänge
Bei jedem stabilen Zustand (lt. Zeichnung Manfred) sind zwei Übergänge möglich: vorwärts und zurück
Durch das XOR der Eingänge / delay findet die Flanken-Erkennung statt.
Die Clock für den Zähler ist also offensichtlich EdgeA OR EdgeB
(A^a | B^b) zu verwenden
De Richtung kann folgendermaßen festgestellt werden
DIR = (A^a | B^b) & (a^B) & !( A^b)
Eigentlich genügt aber DIR = (a^B) & !( A^b) , da der Zähler ohnehin nur die Richtung bei einer Flanke von Clock übernimmt.
Vielleicht findet sich jemand, der diese binäre Orgie als anschaulichere konkrete Schaltung aufzeichnet, dann sieht es nicht mehr so schlimm aus.
Bei dem vorgeschlagenen Chip sind die Clock Ausgänge UP / DOwn gesondert geführt. Das ist praktisch, wenn man zwei Interrupts damit bepflastert, die dann ohne weitere Informationen von außen hoch- oder runterzählen können.
Die üblichen Up/Down Counter haben mit unserer Version mehr Freude.
Manfred, sind wir jetzt komplett ? (die darstellung ist halt nicht state-of-the-art)
PS: Ich hab auch nicht überprüft, ob der Herr Morgan das nicht auch etwas kompakter zuläßt, überhaupt, wenn man die XOR's auftröselt.