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
Gast
#2397974
> 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 :-)
Gast
#2397997
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.
Gast
#2398060
Wieso dann nicht zwei Controller benutzen, wobei der eine nur die Daten übermittelt?
Gast
#2398068
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.
Gast
#2398085
Schau mal bei der Firma US-Digital, die haben Chips im SO-8, der genau diese Umsetzung für dich macht....
Gast
#2398363
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)
Gast
#2398390
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
Gast
#2398467
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.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.