Forum: Mikrocontroller und Digitale Elektronik Inkrementalgeber mit max. 40kHz auslesen


von Alex Rappl (Gast)


Lesenswert?

Hallo,
ich habe in meiner Anwendung einen Quadratur Decoder. Dieser liefert 
Impulse mit max. 40kHz. Daher ist eine Methode über das Auslesen über 
einen 1ms Timer unmöglich. Gibt es eine sinnvolle Lösung über Interrupt, 
bei der man sich bei Störungen keine Probleme bezüglich der Rechenzeit 
einhandelt?

Gruß,
Alex
von Wayne (Gast)


Lesenswert?

Welcher Controller mit welcher Taktfrequenz?
von Thomas K. (rlyeh_drifter) Benutzerseite


Lesenswert?

Ohne dass verraten wurde was genau gemessen werden soll sag ich einmal 
"input capture unit".
von tom (Gast)


Lesenswert?

hi,

du hast wie immer mehr als einen möglichen ansatz:

1. nimm einen uC mit incremental-encoder-mode timer, da zählt die hw für 
dich = null rechenzeit problem von vorneherein

2. isr-flankensensitive inputs, in der/den isr einen zähler 
inkrementieren, den du in deinem hauptprogramm überwachst und im von dir 
vorgegebenen zeitintervall zurücksetzt. so kannst du eine abschätzung 
der isr-last machen und diesen bei störungen ggf. disablen und nur 
zyklisch für eine endliche zeit wieder freigeben bis die störung weg 
ist. das encoder-signal kannste bei störung eh als unzuverlässig 
vergessen...


gruss, tom.
von Falk B. (falk)


Lesenswert?

@  Alex Rappl (Gast)

>Impulse mit max. 40kHz. Daher ist eine Methode über das Auslesen über
>einen 1ms Timer unmöglich.

Logisch. Dann nimm einen 3us Timer. Da hat der uC zwar sehr viel zu tun, 
geht aber nicht anders.

> Gibt es eine sinnvolle Lösung über Interrupt,

NEIN!

Siehe Drehgeber.

Wenn eine Softwarelösung zu langsam ist bzw. zuviel CPU-Leistung 
benötigt, muss eben Hardware her. Oder ein uC, welcher den Dekoder in 
Hardware hat, da gibt es einige.

MFG
Falk
von Peter D. (peda)


Lesenswert?

Man kann statt des Timerinterrupts auch den Pin-Change-Interrupt nehmen.
Falls man Probleme mit Oszillationen befürchtet, kann man ein Timeout 
aufsetzen, der bei zu hoher Interruptlast eine minimale Totzeit 
absichert.

Generell sollte der (unbekannte) MC aber Interruptlevel unterstützen, 
damit langsame Interrupts den Encoder nicht blockieren.

Falls nicht, kann man aber auch einen MC nur für den Encoder abstellen 
(z.B. ATtiny25), der dann vom Master per I2C oder SPI ausgelesen wird.


Peter
von Matze T. (gruetzwurschd)


Lesenswert?

ich würde mal schauen ob dein controller ein sogenanntes 
"Quadratur-Encoder-Interface (QEI)" hat.

Diverse STM32 und PIC's haben sowas!
von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

XMEGAs auch.
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
Noch kein Account? Hier anmelden.