Hallo zusammen, ja im Prinzip stehts schon im Titel. Ich hab nen (Drehencoder-)Sensor mit clk/dir-Ausgang und würde diesen gerne an einen µc anschließen. Da ich allerdings Taktfrequenzen bis zu 100kHz erwarte fällt mir keine sinnvolle Softwarelösung ein, welche den µC nicht blockieren würde. Eine Hardwarelösung wäre also fein. Kennt da jemand was? Vielen Dank
> Eine Hardwarelösung wäre also fein. Vergiss es. 100kHz wären bei einem mit 15 MHz getakteten AVR immerhin 150 Befehle, davon 10 in der Interruptroutine sollten ja wohl Hinderungsgrund sein, und wenn doch, nimmst du einfach einen 16MHz Quartz :-)
Schau mal nach Quadraturencoder Bausteinen...die gibts glaub ich extern oder bei manchen uC auch intern. Definitiv wissen tue ich es vom Lpc1769. Grüße
@MaWin Da fehlt wohl ein "kein" ?? Machbar sollte es noch sein, aber kann schnell eng werden, wenn noch anderes zu tun ist. Bei 100kHz sollte es dann schon eine signed-long-Variable sein, wahrscheinlich noch grösser, kommt drauf an, wie lange der in eine Richtung zählen können soll Das heisst dann: Interrupteinsprung + Sicherung , in Abhängigkeit eines weiteren Eingangs diese Variable incrementieren oder decrementieren, Register+SREG wiederherstellen und reti. Damit bist du meilenweit weg von deinen 10 Takten. Schätz ich eher auf 60-80. Dazu die fehlende Interruptpriorisierung, d.h. man muss bei allen anderen ints wirklich aufpasssen. Beim M16C hab ich glaub ich mal recht flexible Timer/Counter gesehen. Können als up/down-counter extern getaktet arbeiten. Da bleibt dann nur noch, die Zählrichtung umzuschalten und die Über/Unterläufe zu zählen.
Wieso dann nicht zwei Controller benutzen, wobei der eine nur die Daten übermittelt?
Vielleicht geht es ja mit zwei internen Timer/Counter Einheiten: .---. .------. Clk -------o-----¦ & ¦ ¦ ¦ ¦ .--¦ ¦-----¦Tx ¦ ¦ ¦ '---' ¦ ¦ Dir--------+--o ¦ uC ¦ DG = Tx - Ty ¦ ¦ .---. ¦ ¦ ¦ '-O¦ & ¦-----¦Ty ¦ '-----¦ ¦ ¦ ¦ '---' '------' Somit würde ein Counter nur die CW-Richtung und der andere nur die CCW-Richtung zählen. Die richtige Drehgeberposition erhält man dann durch Differenzbildung der beiden (gleichzeitig ;-) gelesenen Counterwerte. Einen evtl. COunterüberlauf muss man natürlich geeignet beachten.
Schau mal bei der Firma US-Digital, die haben Chips im SO-8, der genau diese Umsetzung für dich macht....
Vielleicht ist auch der Quadrature-Decoder des XMega für dich brauchbar (Siehe http://www.atmel.com/dyn/resources/prod_documents/doc8077.pdf Kapitel 6.7)
Es geht doch gar nicht Quadratur-Dekoder, da der Sensor schon clk und Richtung liefert...
@ Leo B. (luigi) >mit clk/dir-Ausgang und würde diesen gerne an einen µc anschließen. Da >Hardwarelösung wäre also fein. Kennt da jemand was? Nix fertiges, muss man sich halt stricken. Ein Zähler mit clk und u/d Eingang. Der zählt halt Up/Down. Der uC muss den periodisch auslesen. Doch Vorsicht, das Ganze läuft mit verschiedenen Takten, also asynchron. Da muss man beim synchronisieren aufpassen. Z.B. indem ein zweiter Zähler periodisch, z.B. nach 256 Takten den Zähler auf ein Zwischenregister kopiert und den Zähler zurück setzt. Dann hat der uC 256 Takte Zeit, den Zähler auszulesen. Wenn man einen uC mit Zäherleingang UND up/down Eingang in hardware hat, ist das natürlich ideal. Der AVR hat es leider nicht. Man könnte aber einen kleinen Tiny AVR eben nur mit dieser Funktion programmieren, 100kHz bekommt man dabei locker in den Griff. Die Daten kann man dann per UART, SPI oder IO-Pins ausgeben. MFG Falk
H.joachim Seifert schrieb: > @MaWin > Da fehlt wohl ein "kein" ?? > Machbar sollte es noch sein, aber kann schnell eng werden, wenn noch > anderes zu tun ist. > Damit bist du meilenweit weg von deinen 10 Takten. Schätz ich eher auf > 60-80. benötigt werden hier Beitrag "Drehgeber auslesen" nur 24 Takte
Leg den "dir" auf einen Interrupt-Eingang. Den "clk" auf einen Zähler-Eingang. Den Interrupt lässt du bei Flankenwechsel auslösen. In jedem Interrupt holst du dir den Zählerstand vom Hardware-Zähler und setzt den Hardware-Zähler zurück. Den abgeholten Wert addierst- oder subtrahierst du von einer Variable im Controller je nach Zustand des "dir" Pins.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.