Forum: Mikrocontroller und Digitale Elektronik Wie viele Quadratur Encoder hat ein Mikrocontroller ?


von Hans-werner M. (hanswerner)


Lesenswert?

Ich möchte mehrere (3 bis 4) Quadratur Encoder auswerten.
Inkrementelle Drehgeber als Bedienelemente; also kein Motor.
Nun kann man entweder spezielle Hardwarebausteine verwenden die schwer 
erhältlich sind, digitale Logik ICs verwenden oder die Dekodierung mit 
einem Mikrocontroller in Hardware oder Software machen.
Wie viele Quadrature Encoder hat ein Mikrocontroller hardwaremäßig 
maximal ?
Wie kann ich 3 bis 4 Drehgeber mit einem Mikrocontroller auswerten und 
welcher Mikrocontrollertyp z.B. aus der AVR-Familie sollte es minimal 
sein ?
Alle Drehgeber sollen gleichzeitig genutzt werden können, nicht 
nacheinander.

von Karl H. (kbuchegg)


Lesenswert?

Hans-werner M. schrieb:

> Wie viele Quadrature Encoder hat ein Mikrocontroller hardwaremäßig
> maximal ?

Keine Ahnung.
Aber wenn dein Geber nicht mehr als, sagen wir mal, 1000 Rastpunkte pro 
Umdrehung macht, kannst du soviele anschliessen und per Software 
auswerten, wie du Pins frei hast. Das ist für einen µC eine leichte 
Übung. Gib ihm noch was zu lesen, sonst langweilt er sich.

von Peter II (Gast)


Lesenswert?

soweit ich weiss hat keiner Atmel soetwas, in software kann man soviel 
machen wie rechenleistung verfügbar. Dafür müsste man aber genau wissen 
mit wievielen impulsen pro s zu rechenen ist.

von spess53 (Gast)


Lesenswert?

Hi

>soweit ich weiss hat keiner Atmel soetwas

ATXMega vergessen?

MfG Spess

von holger (Gast)


Lesenswert?

>ATXMega vergessen?

Der stirbt doch so in ein zwei Jahren weil
die viel billigeren und leistungsfähigeren ARMs
ihm das Wasser abgraben.

von spess53 (Gast)


Lesenswert?

Hi

>Der stirbt doch so in ein zwei Jahren weil
>die viel billigeren und leistungsfähigeren ARMs
>ihm das Wasser abgraben.

Ändert aber nichts daran, das die Aussage

'soweit ich weiss hat keiner Atmel soetwas'

falsch ist.

MfG Spess

von Peter D. (peda)


Lesenswert?

Hans-werner M. schrieb:
> Ich möchte mehrere (3 bis 4) Quadratur Encoder auswerten.
> Inkrementelle Drehgeber als Bedienelemente;

Kein Problem, hänge die 4 Encoder an einen Port mit 
Pin-Change-Interrupt.
Eine codesparende Auswerteroutine mit Entprellung findest Du hier.

Hans-werner M. schrieb:
> Alle Drehgeber sollen gleichzeitig genutzt werden können, nicht
> nacheinander.

Wie machst Du denn das, 4 Encoder gleichzeitig (Hände + Füße)?


Peter

von chick (Gast)


Lesenswert?

Bei mehreren Encodern gibts nur eine Software-Lösung.

Hab ein Gerät am Laufen, da werden acht Encoder (Drehen geschieht per 
Hand) per Software behandelt, ein Encoder (512 Striche auf dem Umfang, 
schnelle Eingabe durch ruckartiges bewegen über einen großen Bereich) 
wird durch die Hardware des PIC eingelesen.

von MaWin (Gast)


Lesenswert?

> Wie viele Quadrature Encoder hat ein Mikrocontroller
> hardwaremäßig maximal ?

0

> Kein Problem, hänge die 4 Encoder an einen Port mit
> Pin-Change-Interrupt.

Autsch.
Noch jemand der Incrementaldecoder nicht verstanden hat.

> Wie kann ich 3 bis 4 Drehgeber mit einem Mikrocontroller auswerten

Mit einem geeigneten programm

> welcher Mikrocontrollertyp z.B. aus der AVR-Familie sollte es
> minimal sein ?

Einer mit zumindest 8 Eingängen.

  PINB // bit 0 (PB0) und bit 1 (PB1) sind Quadratureingaenge des ersten 
Encoders, bit 2 und 3 des zweiten Encoders, bit 4 und 5 des dritten 
Encoders und bit 6 und 7 des vierten Encoders

  int8_t table[4][4]={{0,1,-1,0},{-1,0,0,1},{1,0,0,-1},{0,-1,1,0}};
  int position[4]={0,0,0,0}; // zaehlen wir mal die absolute Position
  int8_tnew_quadrature_value, last_quadrature_value=PINB;

Folgenden Code ausreichend oft wiederholen (in der Programm Hauptscheife 
oder einer Zeitgeber gesteuerten Interrupt Routine):

  new_quadrature_value=PINB;
  for(i=0;i<4;i++)
    position[i]+=table[(last_quadrature_value>>(2*i))&3][(new_quadrature_val 
ue>>(2*i))&3];
  last_quadrature_value=new_quadrature_value;

und voilá sind alle 4 Positionswerte in position[0] bis position[3] 
passend hochgezählt/runtergezählt.

Warum nicht Flanken ? Klar wegen dem möglichen prellen:

http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm#F.29

von ./. (Gast)


Lesenswert?

Die TMS320F28er sollten sowas haben.
In Hardware, eher gedacht um ein Motörchen auch innerhalb
einer Umdrehung exakt auf Trab zu halten.

Für manuelle Drehgeber braucht es die Hardware eher nicht.

von Michael (Gast)


Lesenswert?

Hans-werner M. schrieb:
> Nun kann man entweder spezielle Hardwarebausteine verwenden die schwer
> erhältlich sind

FPGAs hast du noch vergessen. Gut zu bekommen und du darfst auch mal ein 
bisschen schneller drehen.

von SNR (Gast)


Lesenswert?

./. schrieb:
> Datum: 24.02.2012 00:23
>       Die TMS320F28er sollten sowas haben.
> In Hardware, eher gedacht um ein Motörchen auch innerhalb
> einer Umdrehung exakt auf Trab zu halten.

Die wollte ich auch gerade vorschlagen.
Wobei die LPCs auch teilweise einen haben.Evtl gibts sogar welche mit 2.
Und Bastlerfreundlicher wie die TIs finde ich sie auch.

Gruß

von ./. (Gast)


Lesenswert?

SNR schrieb:
> Und Bastlerfreundlicher wie die TIs finde ich sie auch.

Das nimmt sich glaub ich nichts.

von Uwe N. (ex-aetzer)


Lesenswert?

MaWin schrieb:
>> Kein Problem, hänge die 4 Encoder an einen Port mit
>> Pin-Change-Interrupt.

> Autsch.
> Noch jemand der Incrementaldecoder nicht verstanden hat.

??

Ein Port der meisten 8-Bit MCUs (abgesehen von sowas wie z.B. bei 
einigen Tinys) besteht aus 8 Pins.
4 x 2 = 8.
Das klappt also. Und entspricht genau dem, was du weiter unter sagst:

MaWin schrieb:
> Einer mit zumindest 8 Eingängen.

Gruss Uwe

von Naseweis (Gast)


Lesenswert?

Hi,
der Toshiba TMPM370 hat zwei in Hardware und würde den Rest in Software 
schaffen. Ist aber für rein diese Auswertung überdimensioniert. Was 
willst Du noch machen im System? Den die vier Encoder auswerten ist ja 
nicht das endgültige Ziel, oder?

von tachtach (Gast)


Lesenswert?

STM32! gibts mit vielen Eingängen (auch Encodereingängen, die 
Timerhardware kann einiges bei den STM's)

von Uwe N. (ex-aetzer)


Lesenswert?

Hans-werner M. schrieb:
> ... und welcher Mikrocontrollertyp z.B. aus der AVR-Familie sollte es
> minimal sein ?

z.B. ein ATmega48/88/168. Je nachdem, wie groß dein Code wird und was 
der µC sonst noch alles bedienen muss.


Gruss Uwe

von Olle Kamelle (Gast)


Lesenswert?

Uwe N. schrieb:
> MaWin schrieb:
>>> Kein Problem, hänge die 4 Encoder an einen Port mit
>>> Pin-Change-Interrupt.
>> Autsch.
>> Noch jemand der Incrementaldecoder nicht verstanden hat.
> ??
> Ein Port der meisten 8-Bit MCUs (abgesehen von sowas wie z.B. bei
> einigen Tinys) besteht aus 8 Pins.
> 4 x 2 = 8.
> Das klappt also. Und entspricht genau dem, was du weiter unter sagst:
> MaWin schrieb:
>> Einer mit zumindest 8 Eingängen.
> Gruss Uwe

Ich denke das hat sich auf den Interrupt bezogen.

von Jens (Gast)


Lesenswert?

...schau dir mal den BCR2000 an :-) Ist auch nur ein uC, der das 
nebenbei macht, macht auch noch USB, MIDI etc.... intern sind 74164iger 
Schieberegister die alle Encoder abfragen...

JJ

von chick (Gast)


Lesenswert?

>Kein Problem, hänge die 4 Encoder an einen Port mit
>Pin-Change-Interrupt.

Stellt mich an den Pranger, aber Pin-Change-Interrupt halt ich für 
dieses Problemchen den ganz falschen Ansatz.

Die Encoder sind nix anderes als Taster, die in Abhängigkeit voneinander 
schalten. Die sollte man auch als Taster behandeln. Ist wesentlich 
einfacher und betriebssicherer.

von Uwe N. (ex-aetzer)


Lesenswert?

Olle Kamelle schrieb:
> Ich denke das hat sich auf den Interrupt bezogen.

Wie meinst du das ? Der von mir vorgeschlagene Typ kann auf fast allen 
Pins ein Pin Change Interrupt auslösen. Siehe DB.

chick schrieb:
> Die Encoder sind nix anderes als Taster, die in Abhängigkeit voneinander
> schalten. Die sollte man auch als Taster behandeln. Ist wesentlich
> einfacher und betriebssicherer.

Das würde ja bedeuten, das man sämtliche (hier 8) Pins gepollt abfragen 
muss.
Wenn der µC sonst nix zu tun geht es vielleicht. Aber elegant ist es 
sicher nicht und ob es sicher ist ...


Gruss Uwe

von Peter II (Gast)


Lesenswert?

Uwe N. schrieb:
> Das würde ja bedeuten, das man sämtliche (hier 8) Pins gepollt abfragen
> muss.

ja und das macht auch sinn. Denn wenn deine eingänge prellen dann wird 
deine ISR nicht fertig und der Rest vom PRogramm steht. Beim pollen hast 
du ein definiertes zeitverhalten.

von Uwe N. (ex-aetzer)


Lesenswert?

Peter II schrieb:
> Beim pollen hast du ein definiertes zeitverhalten.

Aber hier prellt es auch. Das muss hier genauso gefiltert werden. Und 
ein definiertes Zeitverhalten geht auch mit PC_INT.

Ich finde es halt ineffizient, die ganze Zeit Pins zu pollen, wenn man 
Änderungen per Hardware erfassen kann.

von Peter II (Gast)


Lesenswert?

Uwe N. schrieb:
> Und ein definiertes Zeitverhalten geht auch mit PC_INT
ebend nicht. Wenn sich ständig ein pin änder weil der encoder zwischen 2 
zuständen wackelt. Dann geht nichts mehr in deinem Programm.

von chick (Gast)


Lesenswert?

Jedem seine Meinung. Es gibt immer veschieden Wege zum Glück.

Pollen mit definiertem Zeitverhalten ist sehr effizient, sicher und paßt 
gut in eine Main, ohne Schnörkel.

von Uwe N. (ex-aetzer)


Lesenswert?

chick schrieb:
> Jedem seine Meinung. Es gibt immer veschieden Wege zum Glück.

Richtig.
Hans Werner wollte schließlich nur wissen, ob ein AVR dafür geeignet 
ist. Die Antwort ist Ja (da sind wir uns wohl einig), der Rest ist dann
Geschmackssache.

von Willi (Gast)


Lesenswert?

ebendt

Wer es ganz einfach liebt: ein RX62N hat vier Quadratureingänge per 
Hardware. Kanäle MTU1, MTU2, MTU7, MTU8 :-)

von Peter D. (peda)


Lesenswert?

Peter II schrieb:
> Uwe N. schrieb:
>> Und ein definiertes Zeitverhalten geht auch mit PC_INT
> ebend nicht. Wenn sich ständig ein pin änder weil der encoder zwischen 2
> zuständen wackelt. Dann geht nichts mehr in deinem Programm.

Man kann vieles erzählen, wenn der Tag lang ist, aber hast Du sowas 
schonmal praktisch erlebt?

Hohe Frequenzen sind nur mit optischen Encodern ohne Rastung und mit 
hoher Schrittzahl möglich. Die könnten dann auch manchmal durch 
Vibrationen ständig pulsen.
Ein Kontaktencoder kann das aber nicht, der ist viel zu träge.

Ein Encoder mit Kontakten prellt langsam genug, daß der AVR noch 
gemütlich Däumchen drehen kann.
Bei den alten AVRs ohne PCINT habe ich auch im Timer (1ms) gepollt. Bei 
den neuen belastet PCINT die CPU weniger.


Peter

von Karl H. (kbuchegg)


Lesenswert?

Uwe N. schrieb:

> Ich finde es halt ineffizient, die ganze Zeit Pins zu pollen, wenn man
> Änderungen per Hardware erfassen kann.


Mach dir nicht ins Hemd. Kein Mensch kann einen normalen Encoder mit 
einer Handvoll Rastpunken pro Umdrehnung so schnell drehen, dass man die 
Pollfrequenz exzessiv hochdrehen müsste. Und das was man dazu braucht 
bewegt sich im Bereich von weniger als 1% Rechenzeit. Also für die 
Effizienz völlig uninteressant.

Sind die Encoder dann noch von dem Typ, die zusätzlich einen 
Druck-Taster eingebaut haben, dann geht dessen Auswertung innerhalb 
derselben ISR gleich nebenbei mit.

von Uwe N. (ex-aetzer)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Mach dir nicht ins Hemd.

Aus dem Alter bin ich raus, Karl Heinz. Ich sagte nicht, das mein Ansatz 
der beste ist. Ich sagte "Ich finde ..." und nicht "Das ist ...".

von MaWin (Gast)


Lesenswert?

> Aber hier prellt es auch. Das muss hier genauso gefiltert werden.

[x] Du hast was prinzipielles beim Entprellen nicht verstanden.

> Jedem seine Meinung. Es gibt immer veschieden Wege zum Glück.

Der Weg, der zuverlässig funktioniert, und der Weg, bei dem es
ewig beim rumprobieren bleibt und der nur Probleme macht.

> aber hast Du sowas schonmal praktisch erlebt

Natürlich. Z.B. wenn UKW in eine aktuell auf Kippe stehende Leitung 
einkoppelt, besonders beliebt bei optischen Lichtschranken-Drehencodern.

von Encoder (Gast)


Lesenswert?

Ich muss hier nochmal einhaken:

Der oben genannte Einwand gegen die Interrupts beziehen sich auf die 
Prellerei oder geht es eher um einen definierten Abtastpunkt?

Ich frage nämlich, weil ich hier einen optischen Encoder habe, ohne 
Rastung, der 2000 Schritte pro Umdrehung hat. Der wird in unregelmäßigen 
Zeitpunkten unterschiedlich schnell gedreht. Ist auch hier das Pollen 
die bessere Vorgehensweise? Ich müsste unter Umständen ganz schön häufig 
pollen. Angenommen der Encoder wird 5 Mal pro Sekunde gedreht -> 5*2000 
Schritte/s =10000 steps/s. Wie häufig müsste ich nun Abtasten, würde 
10000 Mal/s reichen, oder wäre eine Überabtastung sinnvoll? Muss ich gar 
das Abtasttheorem berücksichtigen (habe ich bei digitalen Signalen zwar 
noch nie gehört, aber bin noch recht frisch in der Materie...)

Danke & schöne Grüße

von Simon K. (simon) Benutzerseite


Lesenswert?

Die Variante einen Encoder per Interrupt auszuwerten ist sogar so 
schlecht, dass es dafür ein ganzes Kapitel im Artikel gibt:
http://www.mikrocontroller.net/articles/Drehgeber#Warum_Sparvarianten_nicht_gut_sind

von m.n. (Gast)


Lesenswert?

Simon K. schrieb:
> Die Variante einen Encoder per Interrupt auszuwerten ist sogar so
> schlecht, dass es dafür ein ganzes Kapitel im Artikel gibt:

Und was wäre das Internet, wenn es nicht auch ein ganzes Kapitel darüber 
gäbe, wo genau das Gegenteil beschrieben wird:
http://www.mino-elektronik.de/mt12_iic/mt12_iic.htm

Zusätzlich läßt sich an OC0B (PD5) ein 400kHz Signal ausgeben, mit dem 
man die Signale für INT0 und INT1 mittels 2 x 74HCT74 extern 
synchronisieren kann (sofern überhaupt notwendig). Ein internes Polling 
ist damit überflüssig. Dennoch kann die max. Zählfrequenz von 100kHz 
erreicht werden, was mit Polling garnicht möglich wäre.

von Falk B. (falk)


Lesenswert?

@  m.n. (Gast)

>Und was wäre das Internet, wenn es nicht auch ein ganzes Kapitel darüber
>gäbe, wo genau das Gegenteil beschrieben wird:
>http://www.mino-elektronik.de/mt12_iic/mt12_iic.htm

Ach, und nur weil das im Internet irgendwie irgendwo steht, stimmt das 
auch?
Wo bleibt a) die Erklärung und b) der Beweis?

>Zusätzlich läßt sich an OC0B (PD5) ein 400kHz Signal ausgeben, mit dem
>man die Signale für INT0 und INT1 mittels 2 x 74HCT74 extern
>synchronisieren kann (sofern überhaupt notwendig). Ein internes Polling
>ist damit überflüssig. Dennoch kann die max. Zählfrequenz von 100kHz
>erreicht werden, was mit Polling garnicht möglich wäre.

Aber sicher. Denkst du, bei 100KHz ist ein Interrupt schneller und 
effizienter als Polling? Kaum.

Und warum diskutieren wir den Käse schon wieder? Ich dachte mit dem 
Artikel Drehgeber wäre das ein für alle mal geklärt.

MFG
Falk

von Karl H. (kbuchegg)


Lesenswert?

m.n. schrieb:
> Simon K. schrieb:
>> Die Variante einen Encoder per Interrupt auszuwerten ist sogar so
>> schlecht, dass es dafür ein ganzes Kapitel im Artikel gibt:
>
> Und was wäre das Internet, wenn es nicht auch ein ganzes Kapitel darüber
> gäbe, wo genau das Gegenteil beschrieben wird:
> http://www.mino-elektronik.de/mt12_iic/mt12_iic.htm

Im Zweifelsfall trau ich PeDa's Code hier auf µC.net mehr über den Weg 
als irgendwelchem Code auf irgendwelchen Seiten, die ich nicht kenne.
Von PeDa weiß ich, dass er immer gute Lösungen hat, die astrein die in 
sie gestellten Anforderungen problemlos erfüllen. Spannend wird es erst 
dann, wenn die Anforderungen so sind, dass sein Code nicht mehr 
mitkommt. Aber meistens hat er genug Reserve eingebaut, so dass man die 
Grenzen weit hinausschieben kann.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Ich meine, der STM32 kann das auch. Ich habe mal was im Datenblatt 
gelesen, dass Encoder-Eingänge gehen.
Ich weiß jetzt aber nicht genau ob auch 4 Stück gehen.

Musst Du mal Lesen im Datasheet.

Infos zum STM32 hier im Artikel STM32.

von m.n. (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Im Zweifelsfall trau ich PeDa's Code hier auf µC.net mehr über den Weg
> als irgendwelchem Code auf irgendwelchen Seiten, die ich nicht kenne.

Das steht Dir natürlich frei. Meinen Code kennst Du ja auch nicht.
Meine Lösung muß in der Praxis funktionieren und nicht, weil er in einer 
'Bibel' steht.

von Peter II (Gast)


Lesenswert?

m.n. schrieb:
> Meine Lösung muß in der Praxis funktionieren und nicht

und das ist meist das Problem, du kannst nur dinge testen und sehen ob 
es geht. Aber hast du auch mit Drehgeben getestet der 3 Jahre alt ist 
und prellt?

Mir ist es zumindest lieber wenn der code bewiesenermaßen fehlerfrei mit 
jeden Signal zurecht kommt, als in der Praxis einfach mal zu testen ob 
es geht.

von Falk B. (falk)


Lesenswert?

@  Peter II (Gast)

>> Meine Lösung muß in der Praxis funktionieren und nicht

"funktionieren . . . "

>und das ist meist das Problem, du kannst nur dinge testen und sehen ob
>es geht.

Das ist kein Testen.

>Aber hast du auch mit Drehgeben getestet der 3 Jahre alt ist
>und prellt?

Eben das machen die Wenigsten, weil es bisweilen gar nicht so einfach 
ist, nachweislich und reproduzierbar defektes Verhalten nachzustellen.

>Mir ist es zumindest lieber wenn der code bewiesenermaßen fehlerfrei mit
>jeden Signal zurecht kommt, als in der Praxis einfach mal zu testen ob
>es geht.

Das ist KEIN Test. Einfachmal zusammenbauen und wenn es geht ist es 
"getestet". Da schießt man sich oft selber ins KNie, weil der Prototyp 
keine Worst Case Bedingungen sieht, wie prellende Kontakte, tiefe 
Temperaturen, maximal ungüstige Tolaranzen von Bauteilparametern, 
Versorgungsspannung etc. Ein Test, der den Namen verdient, versorgt das 
Prüfobjekt mit NACHWEISLICH gestörten Signalen so stark wie nur eben 
möglich. Wenn das Prüfobjekt besteht, DANN kann man von einer getesteten 
Lösung sprechen.

MfG
Falk

von m.n. (Gast)


Lesenswert?

Peter II schrieb:
> Aber hast du auch mit Drehgeben getestet der 3 Jahre alt ist
> und prellt?

Ja das habe ich, immer und immer wieder!

Wenn es ausreicht, bin ich auch ein Freund von Polling, aber ein 'Feind' 
derer, die dies dogmatisch als einzig geltende Lösung propagieren. Siehe 
hier:
Beitrag "Re: Decodierung von 6 Quadratur(Drehgerber)Signalen - extern zur Entlastung des PIC"

von Uwe (Gast)


Lesenswert?

Die TPU vom MC68332 konnte sowas. Die gibt es wohl auch noch größer und 
Leistungsfähiger (eTPU) im MCF523X. Aber ich denke auch nen kleines 
älteres FPGA ist wohl moderner und billiger.

von Harald W. (wilhelms)


Lesenswert?

Karl Heinz Buchegger schrieb:

>> http://www.mino-elektronik.de/mt12_iic/mt12_iic.htm
>
> Im Zweifelsfall trau ich PeDa's Code hier auf µC.net mehr über den Weg
> als irgendwelchem Code auf irgendwelchen Seiten, die ich nicht kenne.

Ich habe mir obigen Link zwar nur flüchtig angesehen, aber dort
geht es um die Dekodierung von optischen Drehgebern. Die erfolgt
analog, da man dann mit einem echten sin/cos Signal eine wesentlich
höhere Auflösung erreichen kann. Eine solche Dekodierung hat mit
der Dekodierung von normalen Drehgebern, bei denen üblicherweise
Rechtecksignale herauskommen, nichts zu tun. Deshalb sind auch die
Programme nicht vergleichbar.
Gruss
Harald

von gaast (Gast)


Lesenswert?

m.n. schrieb:
> Simon K. schrieb:
>> Die Variante einen Encoder per Interrupt auszuwerten ist sogar so
>> schlecht, dass es dafür ein ganzes Kapitel im Artikel gibt:
>
> Und was wäre das Internet, wenn es nicht auch ein ganzes Kapitel darüber
> gäbe, wo genau das Gegenteil beschrieben wird:
> http://www.mino-elektronik.de/mt12_iic/mt12_iic.htm

Deinem Nick nach würde ich ja mal darauf tippen, dass das deine Seite 
ist. Sich selbst als Quelle anzuführen kommt immer gut.

von smude (Gast)


Lesenswert?

Noch mal eine Frage von mir wegen optischer Encoder. Ihr habt oben 
gesagt, daß die im Vergleich zu mechanischen z.B. durch Vibrationen 
schneller Prellen und auch kürzerere Zeit als eine 'Feder'.
Würde es da nicht zumindestens die Gefahr geben, daß bei allgemein viel 
Interrupt Last ein Flankenwechsel kurz vor der letzten Flanke 
abgearbeitet wird, somit falschen Stand hat und die letzte Flanke gar 
nicht als irq gelatcht wird? Dann verliert man doch den Zählimpuls?
Theroetisch find ich das zumindestens eine potentielle Gefahr

von smude (Gast)


Lesenswert?

...oder eigentlich kann das doch auch bei nem mechanischen passieren. 
Dann wäre wenig irq aufkommen einzuhalten wenn man es nicht pollen 
sondern übber pin change macht.

von m.n. (Gast)


Lesenswert?

Autor:  Encoder (Gast) Datum: 16.04.2012 13:42
fragte, wie er seinen optischen Drehgeber auswerten könnte und wie er 
geschickterweise die Erfassung erledigt. Daraufhin kam die Warnung, dies 
bloß nicht per Interrupt zu machen, dem ich widersprochen habe.

Harald Wilhelms schrieb:
> Ich habe mir obigen Link zwar nur flüchtig angesehen, aber dort
> geht es um die Dekodierung von optischen Drehgebern. Die erfolgt
> analog, da man dann mit einem echten sin/cos Signal eine wesentlich
> höhere Auflösung erreichen kann. Eine solche Dekodierung hat mit
> der Dekodierung von normalen Drehgebern, bei denen üblicherweise
> Rechtecksignale herauskommen, nichts zu tun.

Doch, da die sin/cos-Auswertung 'nur' eine ergänzende Auswertung der 
Grundschwingungen ist. Optische Geber prellen nicht, können aber sehr 
hohe Frequenzen erzeugen, gerade wenn sie manuell bedient werden.
Ein MT25-Taster (Heidenhain) zum Beispiel liefert senkrecht montiert und 
per Rückstellfeder beschleunigt locker 50kHz Signale. Bei 4-fach 
Abtastung müßte ein Polling der Signale mit >200kHz passieren, um keinen 
Schritt zu verlieren. Anstatt den µC damit deutlich zu belasten ist es 
geschickter, die Auswertung per Interrupt zu machen.

Bei einem opt. Drehgeber können ebenfalls hohe Ausgangsfrequenzen 
auftreten. Wenn ein Schrittverlust nicht toleriert werden kann, muß die 
Auswerteschaltung für deutlich höhere Singanlfrequenzen ausgelegt sein. 
Das geht am besten per Interrupt, wenn in Ruhezeiten noch 
Prozessorleistung übrig bleiben soll.

von smude (Gast)


Lesenswert?

Jetzt hast du aber nichts dazu gesagt, wie hoch die Wahrscheinlichkeit 
sein mag, einen Schritt zu verlieren wenn man bei kurzen Prellen kurz 
vor Ende den irq bedient und dann noch nicht wieder frei hat wenns 
aufhört zu prellen.
Das beschäftigt mich grad ziemlich und ich würde mich über Meinungen 
freuen.

von Der Rächer der Transistormorde (Gast)


Lesenswert?

Hans-werner M. schrieb:
> Wie kann ich 3 bis 4 Drehgeber mit einem Mikrocontroller auswerten

Die Diskussion ist zwar müßig da sich der Eröffner nicht dran beteiligt, 
meine Antwort lautet aber keiner.

Ohne Information wie schnell die Encoder ihre Daten ausgeben und ob 
simultan ist eine Antwort schlecht möglich.

Langsam drehende geht in Software (s.o), bei schnell drehenden nimmt man 
halt mehrere "Einzeller" und fragt diese per I2C/SPI ab.

von Falk B. (falk)


Lesenswert?

@  Der Rächer der Transistormorde (Gast)

>> Wie kann ich 3 bis 4 Drehgeber mit einem Mikrocontroller auswerten

>Die Diskussion ist zwar müßig da sich der Eröffner nicht dran beteiligt,
>meine Antwort lautet aber keiner.

Worst Case ^2.

>Ohne Information wie schnell die Encoder ihre Daten ausgeben und ob
>simultan ist eine Antwort schlecht möglich.

"Inkrementelle Drehgeber als Bedienelemente; also kein Motor."

Wenn gleich das keine technisch präzise Aussage ist, kann man schon eine 
Empfehlung abgeben.

MfG
Falk

von db (Gast)


Lesenswert?

Okay. Es gibt also verschiedene Meinungen, ich versuche dahinter zu 
steigen.

Jetzt ist aber das praktische an dem STM32, dass dieser eben schon einen 
Encoder Eingang besitzt. Dieser wertet in Hardware die Flanken und auf 
dem anderen Signal die Pegel aus, wenn ich das richtig verstanden habe. 
Daraufhin inkrementiert/dekrementiert er einen Zähler.

Wäre dieser Eingang dann z.B. für prellende Encoder überhaupt geeignet? 
Weil den Kern belastet das ja wohl nicht?

Schöne Grüße

von iggy (Gast)


Lesenswert?

db schrieb:
> Weil den Kern belastet das ja wohl nicht?

Selbst wenn er prellt, dann wohl nur der Eingang, der grade auf Kippe 
steht, der um 90 Grad verschobene wohl eher weniger?

In dem Fall wäre prellen kein Problem, der Wert würde nur um 1 Einheit 
hin und her schwanken.

von 6egr3562 (Gast)


Lesenswert?

Die AVR32-Familie hat diverse Derivate mit Quadratur-Dekodern.

von Falk B. (falk)


Lesenswert?

@  m.n. (Gast)

>geschickterweise die Erfassung erledigt. Daraufhin kam die Warnung, dies
>bloß nicht per Interrupt zu machen, dem ich widersprochen habe.

Interrupt ist schon richtig, aber bitteschön TIMER-Interrupt.

>Grundschwingungen ist. Optische Geber prellen nicht, können aber sehr
>hohe Frequenzen erzeugen, gerade wenn sie manuell bedient werden.

Was nahezu das gleiche ist.

>Ein MT25-Taster (Heidenhain) zum Beispiel

Ist auf der Homepage nicht auffindbar.

>liefert senkrecht montiert und
>per Rückstellfeder beschleunigt locker 50kHz Signale. Bei 4-fach
>Abtastung müßte ein Polling der Signale mit >200kHz passieren, um keinen
>Schritt zu verlieren. Anstatt den µC damit deutlich zu belasten ist es
>geschickter, die Auswertung per Interrupt zu machen.

Bei 50 kHz muss der mindestens genausoviel arbeiten.

>Bei einem opt. Drehgeber können ebenfalls hohe Ausgangsfrequenzen
>auftreten. Wenn ein Schrittverlust nicht toleriert werden kann, muß die
>Auswerteschaltung für deutlich höhere Singanlfrequenzen ausgelegt sein.

Ach was?

>Das geht am besten per Interrupt, wenn in Ruhezeiten noch
>Prozessorleistung übrig bleiben soll.

Nö. Von dauernden wiederholen wird das auch nicht besser. Und ein 
"polling" per Timerinterrupt ist vor allem deterministisch, da kann man 
problemlos noch sehr viele Sachen deterministisch nebenbei mache. Pin 
Change/Flankeninterrupt ist NICHT deterministisch und kann burstartig 
die CPU nahezu lahmlegen.

MFG
Falk

von Horst H. (horst_h44)


Lesenswert?

Bei Encodern mit ABZ-signalen braucht man, um die Vorwärts-/Rückwärts 
Richtung zu erkennen, einen Richtungsdiskriminator und danach kann 
Vor-/Rückwärts gezählt werden. Einige Positionssteller liefern gleich 
Vor-/Rückwärtszählausgänge ( z.B. iC-MA: 
http://www.ichaus.de/MA_datasheet_de ). Die Software muss so schnell 
sein, um die Richtung der vier AB-Eingänge zu dekodieren und danach zu 
zählen. Reicht die Geschwindigkeit nicht, so muss eine Hardware-Lösung 
her. Hier gibt es einen Applikationsbericht in Deutsch: 
http://www.ichaus.de/whitepapers . Man kann auch vier iC-MA mit 8-Bit 
Auflösung hintereinander schalten und seriell analog auslesen und mit 
A/D-Wandler im Mikro auslesen. Falls 8-Bit nicht ausreichen wirds 
aufwendiger.

von Simon K. (simon) Benutzerseite


Lesenswert?

Horst H. schrieb:
> Bei Encodern mit ABZ-signalen braucht man, um die Vorwärts-/Rückwärts
> Richtung zu erkennen, einen Richtungsdiskriminator und danach kann
> Vor-/Rückwärts gezählt werden.
Wenn ich unter "ABZ-Signal" das Gleiche wie du verstehst, bezweifle ich 
diese pauschale Aussage stark.

von ich (Gast)


Lesenswert?

also:
Ein "echter" Drehgeber (also nicht so ein Spielzeug mit 20 Rastungen / 
r) mit vermutlich differenziellen Ausgangssignalen prellt nicht!
Da ist KEIN mechanischer Schalter drin.
Es kann zu hohen Frequenzen kommen wenn der Geber direkt um eine Flanke 
"herumvibriert". Und das kann beim pollen schnell zum Problem führen.
2 Interupts, abhängig von der aktuellen Signalkombination, muss jeweils 
die negative oder die positive Flanke INT auslösen.
Ein entprellen wie bei einem Taster ist bescheuert, man kann bei einem 
Drehgeber doch nicht einfach die Pulse wegfiltern.

Aber alles spekulieren hilft nichts, da wir nicht mal wissen welches 
Ausgangssignal der Drehgeber hat. Haben wir eine oder zwei Signalspuren?
Ist es evtl. sogar doch ein mechanisches Exemplar das dann doch prellt?
Will der TO 2- oder 4-fach Auswertung (was den Namen des Themas erklären 
würde)?
Und nicht ganz unwichtig: Mit welcher Frequenz werden die Pulse 
erwartet?
Es soll eine Handbedienung werden. Ist es dann erlaubt dass einige Pulse 
flöten gehen?

Mit den aktuell vorliegenden Daten kann man keine optimale Lösung 
erarbeiten.

von MaWin (Gast)


Lesenswert?

> Ein "echter" Drehgeber (also nicht so ein Spielzeug mit 20 Rastungen /
> r) mit vermutlich differenziellen Ausgangssignalen prellt nicht!
> Da ist KEIN mechanischer Schalter drin.

Falschaussage.
Natürlich können auch nicht-mechanische Drehgeber Impulse auslösen, man 
nennt es dann flattern statt prellen, ausgelöst durch Vibration oder 
Einstreuung.

> Es kann zu hohen Frequenzen kommen wenn der Geber direkt um eine Flanke
> "herumvibriert". Und das kann beim pollen schnell zum Problem führen.

Falschaussage.
Gerade das Polling-Verfahren hat keinerlei Probleme mit prellenden oder 
flatternden Eingangssignalen.

> 2 Interupts, abhängig von der aktuellen Signalkombination, muss jeweils
> die negative oder die positive Flanke INT auslösen.

Schlechte Lösung.
Da beim prellen/flattern nicht vorhergesehen werden kann, mit welcher 
Frequenz die Impulse auftreten, führt das bei hoher Frequenz zu einer 
Überlastung des Prozessors (Interrupt direkt nach Interrupt oder sogar 
währenddessen) und das System kann seine ordnungsgemässe Tätigkeit nicht 
mehr ausführen weil es nur mit der Bearbeitung der Interrupts 
beschäftigt ist.

> Ein entprellen wie bei einem Taster ist bescheuert, man kann bei einem
> Drehgeber doch nicht einfach die Pulse wegfiltern.

Falschaussage.
Wenn man die maximale Drehzahl des Drehgebers kennt, kann man sehr wohl 
so langsam abtasten, daß nur diese Geschwindigkeit maximal erfasst wird 
und schnellere Impulse nicht gezählt werden - denn es waren unplausible 
Fehlimpulse.


Es ist wirklich megapeinlich, wie du hier nach 100 Beiträgen so einen 
Schwachsinn als Resumee vom Stapel lassen kannst.

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.