Forum: Mikrocontroller und Digitale Elektronik Drehencoder Rastung<->Impulse


von Frank (Gast)


Lesenswert?

Ich habe mir bei Reichelt Drehencoder angesehen und zwei verschiedene 
Typen vorgefunden:

Es gibt solche mit 20/20 / 24/24 Rastung und solche mit 15/30.

Sehe ich das korrekt, dass ich bei den 24/24 jedesmal einen Puls bekomme 
und bei den anderen nur jeden zweiten?

Ich habe die Datenblätter gelesen, werden aber daraus nicht schlau. 
Beide Typen scheinen einen AB-Ausgang zu haben.

Wie kann man sich das Vorstellen, 15 Punkt bei 30 Rastungen zu haben?

von Falk B. (falk)


Lesenswert?

@  Frank (Gast)

>Sehe ich das korrekt, dass ich bei den 24/24 jedesmal einen Puls bekomme
>und bei den anderen nur jeden zweiten?

Ja.

>Wie kann man sich das Vorstellen, 15 Punkt bei 30 Rastungen zu haben?

Siehe Drehgeber

von Frank (Gast)


Lesenswert?

Mir ist Folgendes nicht klar:

> Zudem entsteht so haptische Übereinstimmung zwischen der Anzahl
> der gefühlten Rastungen und dem Fortschreiten des zu bedienenden
> Prozesses

Warum ist das bei der halben Zahl der Pulse je Rastung so?

Sind das die technisch besseren Drehgeber? Sie sind ja teuer.(?)

von H. G. (Gast)


Lesenswert?

Frank schrieb:
> Warum ist das bei der halben Zahl der Pulse je Rastung so?
Es ist die doppelte Zahl der Impulse pro Rastpunkt. Das muss 
softwaremässig dann noch halbiert werden. Wie im Artikel beschrieben.

>Sie sind ja teuer
Die sind deshalb teuerer, weil sie aufwändiger gebaut sind. Für einen 
sicheren Betrieb sind die aber die Richtigen!

von Falk B. (falk)


Lesenswert?

@  Gerald Hellinghaus (freiburger)

>>Sie sind ja teuer
>Die sind deshalb teuerer, weil sie aufwändiger gebaut sind. Für einen
>sicheren Betrieb sind die aber die Richtigen!

Wenn die Hersteller ein bisschen mitdenken würden und die Rastpunkte in 
die Mitte der Codewechsel legen würden, dann käme man problemlos mit der 
Hälfte der Rastungen aus. Da die Chinesen aber oft kopieren ohne zu 
kapieren, haben die meisten Drehgeber halt doppelt sowiele Rastungen und 
zu allem Übel noch genau auf einem Codewechsel. Siehe Artikel.

MfG
Falk

von Martin K. (mkmannheim) Benutzerseite


Lesenswert?

Die Frage ist, welcher Encoder gemeint ist. Der Artikel beschreibt die 
halbe Zahl von Rastungen gegenüber den Impulsen und der Reichelt-Encoder 
macht es wohl anders herum. Ich dachte eigentlich, ich hätte die 
Encoder-Technik verstanden zumal ich es schon verwendet habe. Nur ohne 
Rastung.

Oder hatte ich die richtigen encoder?

Sollte man die Rastung nicht generell weglassen?

von H. G. (Gast)


Lesenswert?

Falk Brunner schrieb:
> dann käme man problemlos mit der
>
> Hälfte der Rastungen aus.

du meinst "mit der vollen Zahl der Rastungen" (statt der doppelten).

Um ehrlich zu sein, war mir auch nie klar, warum man ein doppelte 
Rasterung braucht. Eigentlich braucht man es gar nicht - höchstens, 
damit sich der Steller bei Erschütterungen nicht verschiebt. Die auf den 
Motoren montierten haben ja auch keine. Sie brauchen keine und dürfen 
keine haben.

Gibt es denn keine solchen Steller mit Rastung in Zwischenpositionen?

von Dipl.-Ing. (Gast)


Lesenswert?

G. H. schrieb:
> Gibt es denn keine solchen Steller mit Rastung in Zwischenpositionen?

Meines Wissens nicht. Mit etwas Verarbeitung geht es aber in der Regel 
recht gut.

von Peter D. (peda)


Lesenswert?

Im Prinzip würde ein Phasenwechsel pro Rastung vollkommen ausreichen.

Nun sind aber Generationen von Programmierern nicht davon abzubringen, 
daß sie unbedingt einen externen Interrupt zum Einlesen verwenden 
wollen. Und je nachdem, ob der Interrupt auf eine oder beide Flanken 
reagiert, muß der Drehgeber 2 oder 4 Phasenwechsel pro Rastung 
ausführen.

Und daher müssen sich auch Generationen von Benutzern damit abquälen, 
daß Drehgeber mit der Zeit immer mehr prellen und die Software Unsinn 
macht.


Jedem Dozenten, der externe Interrupts zum Auswerten mechanischer 
Kontakte lehrt, müßte man die Zunge abschneiden und die Hände abhacken, 
damit der Unsinn endlich mal ein Ende hat.


Peter

von Reinhard R. (reirawb)


Angehängte Dateien:

Lesenswert?

Also, mir sind schon beide Versionen über den Weg gelaufen (siehe 
Diagramm).

Anfangs hatte ich Teile vom Typ Version 1. Bin damals davon ausgegangen, 
dass das die Norm wäre. Bis ich mal eine Baugruppe aufgebaut habe, die 
nur auf jede 2. Rastung eine Stufe weiter schaltete. Drehencoder 
durchgemessen und siehe da, Version 2. Waren alles preiswerte Teile von 
Pollin/Reichelt.

Reinhard

von Michael (Gast)


Lesenswert?

... und dann gibt es noch die Drehgeber, bei denen die Rastungen genau 
auf den Flanken eines der Signale liegen.

von H. G. (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Jedem Dozenten, der externe Interrupts zum Auswerten mechanischer
> Kontakte lehrt, müßte man die Zunge abschneiden und die Hände abhacken,
> damit der Unsinn endlich mal ein Ende hat.

"homo radikalis", was?

@Reinhard
Du würdest also Version 1 bevorzugen?

von Falk B. (falk)


Lesenswert?

@  Michael (Gast)

>... und dann gibt es noch die Drehgeber, bei denen die Rastungen genau
>auf den Flanken eines der Signale liegen.

Was auch Mist ist, aber auch dafür gibt es einen Workaround. Siehe

http://www.mikrocontroller.net/articles/Drehgeber#Dekoder_f.C3.BCr_Drehgeber_mit_wackeligen_Rastpunkten

von Peter D. (peda)


Lesenswert?

Gerald Hellinghaus schrieb:
> "homo radikalis", was?

Naja, die Drohung würde wohl schon ausreichen, damit sie mal eine 
Gehirnwindung einsetzen, um das Problem zu erfassen.

Ich habe schon 2 Geräte mit schrottiger Encodersoftware.
Man kann das gut unterscheiden, ob wirklich der Encoder defekt ist oder 
die Software grottig.

Viele neuere MCs haben ja schon eine Encoderhardware, was wohl einfacher 
ist, als auf die Vernunft der Programmierer zu warten.


Peter

von Reinhard R. (reirawb)


Lesenswert?

Gerald Hellinghaus schrieb:
> @Reinhard
> Du würdest also Version 1 bevorzugen?
Nöö, ist mir JwH (Jacke wie Hose).

Mir ist nur Version 1 zuerst in die Hände gefallen und die meisten 
Encoder, die ich in den Fingern hatte, waren von diesem Typ. Als die neu 
gekauften dann plötzlich vom Typ Version 2 waren, habe ich nur die 
Auswerteroutine angepasst. Mir ist es egal, ich komme mit beiden 
Versionen klar.

Du weißt doch:
Kiffen macht gleichgültig!
Ist mir doch egal.
:-)

Reinhard

von Ralf (Gast)


Lesenswert?

Kennt jemand hochwertige Drehencoder/ Drehgeber ohne Rastung? Ich möchte 
Werte sehr weich und leise einstellen und die Auswertung kann ich 
tolerant genug aufziehen.

von c-hater (Gast)


Lesenswert?

Peter Dannegger schrieb:

> Im Prinzip würde ein Phasenwechsel pro Rastung vollkommen ausreichen.

Was genau verstehst du unter einem "Phasenwechsel"?

> Nun sind aber Generationen von Programmierern nicht davon abzubringen,
> daß sie unbedingt einen externen Interrupt zum Einlesen verwenden
> wollen. Und je nachdem, ob der Interrupt auf eine oder beide Flanken
> reagiert, muß der Drehgeber 2 oder 4 Phasenwechsel pro Rastung
> ausführen.

Ich würde das erstmal pro forma als Quatsch bezeichnen. Allerdings hängt 
das vielleicht auch von deiner Definition eines "Phasenwechsels" ab.

> Jedem Dozenten, der externe Interrupts zum Auswerten mechanischer
> Kontakte lehrt, müßte man die Zunge abschneiden und die Hände abhacken,
> damit der Unsinn endlich mal ein Ende hat.

Das ist definitiv Quatsch. Interrupts lassen sich sehr wohl auch zur 
sinnvollen Auswertung von Quadraturencodern einsetzen, wenn man es 
RICHTIG macht. Nämlich so, daß der Interrupt nur genau eins ist: Ein 
Event, welches anzeigt, daß es jetzt sinnvoll ist, mal wieder den 
Encoder zu pollen, weil sich wohl irgendwas an seinen Signalen geändert 
hat. Dazu müssen natürlich beide Signale und beide Flanken dieser 
Signale überwacht werden.

Der Rest der Auswertung passiert allerdings sinnvollerweise genau wie 
bei einem regulären Polling. Der Vorteil des interupt-initiierten 
Polling ist, daß der Rechenzeitaufwand für die 99,99999999% der Fälle, 
bei denen sich am Encoder garnix geändert hat, einfach wegfällt. Der µC 
kann in dieser Zeit einfach schlafen, sogar sehr tief, weil er keinen 
Timer am Laufen halten muß, um dieses bescheuert-nutzlose reguläre 
Polling auszuführen.

Vielleicht solltest du darüber mal wirklich nachdenken, bevor du über 
die passende Bestrafung von Dozenten nachdenkst?

Meiner Meinung nach könne überhaupt nur Leute auf so eine schwachsinnige 
Idee wie das reguläre Polling mechanischer Kontakte kommen, die ohnhin 
immer ihren µC mit einer ständig laufenden Hauptschleife einheizen.

Es gibt echt billigere Wege, um zu einer warmen Wohnung zu kommen...

von Michael (Gast)


Lesenswert?

Ralf schrieb:
> Kennt jemand hochwertige Drehencoder/ Drehgeber ohne Rastung?

Ja
http://www.wachendorff-automation.de/drehgeber_inkremental_vollwelle.html

von Falk B. (falk)


Lesenswert?

@ c-hater (Gast)

>Das ist definitiv Quatsch. Interrupts lassen sich sehr wohl auch zur
>sinnvollen Auswertung von Quadraturencodern einsetzen, wenn man es
>RICHTIG macht. Nämlich so, daß der Interrupt nur genau eins ist: Ein
>Event, welches anzeigt, daß es jetzt sinnvoll ist, mal wieder den
>Encoder zu pollen, weil sich wohl irgendwas an seinen Signalen geändert
>hat. Dazu müssen natürlich beide Signale und beide Flanken dieser
>Signale überwacht werden.

Das ist ein Sonderfall, nicht die Regel.

>Polling ist, daß der Rechenzeitaufwand für die 99,99999999% der Fälle,
>bei denen sich am Encoder garnix geändert hat, einfach wegfällt.

Die meisten uC haben sowieso genug zu tun, da tun 0,x% Rechenzeit mehr 
oder weniger nicht weh.

> Der µC
>kann in dieser Zeit einfach schlafen, sogar sehr tief, weil er keinen
>Timer am Laufen halten muß, um dieses bescheuert-nutzlose reguläre
>Polling auszuführen.

Sonderfall.

von MarioT (Gast)


Lesenswert?

c-hater schrieb:
> Peter Dannegger schrieb:

September 2011!

von c-hater (Gast)


Lesenswert?

MarioT schrieb:

> September 2011!

Die Diskussion ist allerdings ganz offensichtlich immer noch aktuell.

Daß der gute Falk sich auch im Jahr 2013 immer noch darauf zurückzieht, 
daß es angeblich ein Sonderfall ist, wenn man einen µC nicht mit einer 
dauernd auszuführenden Hauptschleife belastet, zeigt, daß zumindest 
manche C-ler seit 2011 rein garnix dazugelernt haben...

von Falk B. (falk)


Lesenswert?

@ c-hater (Gast)

>Daß der gute Falk sich auch im Jahr 2013 immer noch darauf zurückzieht,
>daß es angeblich ein Sonderfall ist, wenn man einen µC nicht mit einer
>dauernd auszuführenden Hauptschleife belastet, zeigt, daß zumindest
>manche C-ler seit 2011 rein garnix dazugelernt haben...

Der GRÖPRAZ hat gesprochen!

(Größter Programmierer aller Zeiten)

von W.S. (Gast)


Lesenswert?

Michael schrieb:
> ... und dann gibt es noch die Drehgeber, bei denen die Rastungen genau
> auf den Flanken eines der Signale liegen.

Nö.

Das ist Quatsch.

Es liegt immer nur die Flanke eines der beiden Signale auf der Rastung 
und die Flanken des anderen liegen dazwischen. Man muß nur den richtigen 
Kontakt zum Erzeugen des Interrupts benutzen und schon lösen sich alle 
Probleme in Wohlgefallen auf.

Nochwas: Peters radikal-kannibalische Ansicht teile ich überhaupt nicht. 
Bei meinen Geräten erzeugen die Drehgebersignale Interrupts und das 
funktioniert einwandfrei.

Selbst bei rastungslosen Drehgebern ist das kein Problem, da der 
"Zähl"-Zustand ja nur um 1 sich ändern kann. Ein VER-Zählen ist da 
generell ausgeschlossen.

W.S.

von MaWin (Gast)


Lesenswert?

W.S. schrieb:
> Man muß nur den richtigen Kontakt zum Erzeugen des Interrupts benutzen

Was ist denn das für ein unsäglicher Unsinn?
Hat dir Peter noch nicht die Zunge rausgeschnitten ?
Hast du den thread gelesen ohne auch nur ein Wort zu verstehen?
Oder bist du ein Troll der Streit sucht?

von Rudolph (Gast)


Lesenswert?

Yup, drölf+x sinnlose Events als Interrupt weil die Dinger prellen sind 
viel besser als nebenbei in der Hauptschleife immer mal wieder zu 
schauen was der macht.

von m.n. (Gast)


Lesenswert?

W.S. schrieb:
> Bei meinen Geräten erzeugen die Drehgebersignale Interrupts und das
> funktioniert einwandfrei.

Bei mir ebenfalls!

Ralf schrieb:
> Kennt jemand hochwertige Drehencoder/ Drehgeber ohne Rastung?

http://de.farnell.com/bourns/ena1j-b28-l00128l/encoder-optik/dp/9358242
mit 128 Impulsen/Umdrehung, was bei 4-fach Auswertung 512 
Positionen/Umdrehung ergibt.
Eine passende Auswertung findest Du hier: 
Beitrag "4-fach Flankenauswertung per Interrupt mit ATmega48/88"
Die obere Grenzfrequenz liegt bei 500kHz. Das reicht für ca. 1000 
Umdrehungen/s - selbstverständlich alles per Interrupt :-)

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Ich habe mal testweise welche von EBAY gekauft. Tragen keine Aufschrift, 
schauen aber ähnlich denen von BURNS aus. Scheinen Chinanachbauten zu 
sein. Keine Rasten, laufen sehr weich, man erhält aber nur 24 Pulse / 
Umdrehung und keine 128 wie bei den BURNS. Als Drehencoder für langsame 
Bewegungen sehr gut geeignet.

>Wachdorff
Das sind Inkrementaldehgeber für hohe Auflösungen / Geschwindigkeiten.

>Interrupts
Ich würde das nur dann mit Interrupts machen, wenn es wirklich darauf 
ankommt, in wenigen seltenen Fällen zu reagieren und die Kontakte 
elektrisch entprellt sind. Ansonsten diskreter Filter/Timeout und bei 
ständiger Aktion des/der Geber eine gefilterte Abtastung.

von Michael (Gast)


Lesenswert?

Jürgen S. schrieb:
>>Wachdorff
> Das sind Inkrementaldehgeber für hohe Auflösungen / Geschwindigkeiten.

Eben. Die können nicht nur hohe Geschwindigkeit, sondern auch niedrige.
Was genau ist daran nicht "hochwertig" und "ohne Rastung".

Ralf schrieb:
> Kennt jemand hochwertige Drehencoder/ Drehgeber ohne Rastung?

von m.n. (Gast)


Lesenswert?

Michael schrieb:
> Die können nicht nur hohe Geschwindigkeit, sondern auch niedrige.

Hast Du auch eine Preisliste zu den Teilen? Dann kann man eher 
entscheiden, ob man unbedingt diese braucht bzw. bezahlen möchte.

von Michael (Gast)


Lesenswert?

m.n. schrieb:
> Hast Du auch eine Preisliste zu den Teilen?
Tante Google kennt sich mit soetwas aus.

Den WDG40A gibt es z.B. mit 20 .. 1024 Zyklen bei
https://www.distrelec.de/inkrementale-drehgeber/wachendorff/wdg-40-a

> ..., ob man unbedingt diese braucht bzw. bezahlen möchte.
Das muss jeder selber wissen  ;-)

von m.n. (Gast)


Lesenswert?

Michael schrieb:
>> ..., ob man unbedingt diese braucht bzw. bezahlen möchte.
> Das muss jeder selber wissen  ;-)

Wenn man diese braucht, ist der Preis ja noch im Rahmen. Aber für eine 
manelle Betätigung dürfte allein schon die Montage eine sehr große Hürde 
darstellen.

von Michael (Gast)


Lesenswert?

m.n. schrieb:
> Aber für eine
> manelle Betätigung dürfte allein schon die Montage eine sehr große Hürde
> darstellen.

Ein 6mm-Achse und drei M3-Bohrung in 120°-Anordnung - viel simpler geht 
es nicht.

von m.n. (Gast)


Lesenswert?

Michael schrieb:
> Ein 6mm-Achse und drei M3-Bohrung in 120°-Anordnung - viel simpler geht
> es nicht.

Doch, Einlochmontage wie ein Poti. Da hat man dann nach vorne auch Platz 
für die Finger :-)

von c-hater (Gast)


Lesenswert?

Falk Brunner schrieb:

> Der GRÖPRAZ hat gesprochen!
>
> (Größter Programmierer aller Zeiten)

Godwin's law.

Wenn einer keine sachlichen Argumente mehr hat, kommt er mit 
Nazi-Bezügen...

Und nein, ich halte mich ganz sicher nicht für den GRÖPRAZ.

von W.S. (Gast)


Lesenswert?

MaWin schrieb:
> Hat dir Peter noch nicht die Zunge rausgeschnitten ?

Ach, wie liebenswürdig. Vielleicht wäre es angebracht, auch dir mal die 
Ohren lang zu ziehen.

Ich verstehe ja, wenn jemand wegen irgendwas ne Wut im Bauch hat und 
dann wie Osmin sich was vorstellt (erst_ geköpft und _dann gehangen, 
dann..) zwecks Abreagieren. Sind wir also mal wieder soweit, ja?

W.S.

von Ralf (Gast)


Lesenswert?

Danke an den Tippgeber m/n allerings sind die minimal ausserhalb des 
budgets :-)

von ich (Gast)


Lesenswert?

c-hater schrieb:
> Peter Dannegger schrieb:
>
>> Jedem Dozenten, der externe Interrupts zum Auswerten mechanischer
>> Kontakte lehrt, müßte man die Zunge abschneiden und die Hände abhacken,
>> damit der Unsinn endlich mal ein Ende hat.
>
> Das ist definitiv Quatsch. Interrupts lassen sich sehr wohl auch zur
> sinnvollen Auswertung von Quadraturencodern einsetzen, wenn man es
> RICHTIG macht. Nämlich so, daß der Interrupt nur genau eins ist: Ein
> Event, welches anzeigt, daß es jetzt sinnvoll ist, mal wieder den
> Encoder zu pollen,

Das ist definitiv KEIN Quatsch. Peter sprach von externen Interrupts. 
Und du sprichst vom Internen Timer. Soweit ich weiß, ist das ein kleiner 
Unterschied.
>
> Vielleicht solltest du darüber mal wirklich nachdenken, bevor du über
> die passende Bestrafung von Dozenten nachdenkst?
Vielleicht solltest du mal verstehen, was andere schreiben, bevor du sie 
beschimpfst :-)

von Karl H. (kbuchegg)


Lesenswert?

ich schrieb:
> c-hater schrieb:
>> Peter Dannegger schrieb:
>>
>>> Jedem Dozenten, der externe Interrupts zum Auswerten mechanischer
>>> Kontakte lehrt, müßte man die Zunge abschneiden und die Hände abhacken,
>>> damit der Unsinn endlich mal ein Ende hat.
>>
>> Das ist definitiv Quatsch. Interrupts lassen sich sehr wohl auch zur
>> sinnvollen Auswertung von Quadraturencodern einsetzen, wenn man es
>> RICHTIG macht. Nämlich so, daß der Interrupt nur genau eins ist: Ein
>> Event, welches anzeigt, daß es jetzt sinnvoll ist, mal wieder den
>> Encoder zu pollen,
>
> Das ist definitiv KEIN Quatsch. Peter sprach von externen Interrupts.
> Und du sprichst vom Internen Timer. Soweit ich weiß, ist das ein kleiner
> Unterschied.

Er spricht auch von externen Interrupts.
Trotzdem hat Peter von etwas ganz anderem gesprochen: Der Technik, eine 
der beiden Spuren auf einen Interrupt zu legen und im Interrupt die 
andere Spur einlesen und dann anhand derer zu entscheiden, ob und in 
welche Richtung sich der Encoder gedreht hat.

c-haters Vorschlag ist lediglich eine Variante. Denn die eigentliche 
Auswertung macht er genauso mit regelmässigem Polling. Einziger 
Unterschied: er stösst das Polling nur dann an, wenn der Encoder mittels 
Interrupt mitteilt, dass sich was verändert hat.
OK, kann man machen. Das ist aber nicht das, was Peter im Sinn hatte.

von ich (Gast)


Lesenswert?

Okay, dann habe ich das falsch verstanden. Ich dachte, er meint einen 
Timer, der das Event erzeugt, den Encoder zu pollen.
In dem Falle (Interrupt als Anstoß zum Pollen) kann man das so machen.

*** Sorry an c-hater! ***

von m.n. (Gast)


Lesenswert?

Ralf schrieb:
> Danke an den Tippgeber m/n allerings sind die minimal ausserhalb des
> budgets :-)

Mit kleiner Auflösung werden die Drehgeber billiger.
Vielleicht sollte man sie auch nicht in einer Apotheke kaufen :-)

von c-hater (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:

> c-haters Vorschlag ist lediglich eine Variante. Denn die eigentliche
> Auswertung macht er genauso mit regelmässigem Polling. Einziger
> Unterschied: er stösst das Polling nur dann an, wenn der Encoder mittels
> Interrupt mitteilt, dass sich was verändert hat.

Nein, das ist nicht der Sachverhalt, jedenfalls nicht ganz. Ich stelle 
mal (etwas vereinfacht) dar, was wirklich passiert:

Im Falle allgemeiner Kontakte, die im Gegensatz zu einem 
Quadraturencoder eine Tiefpaß-Entprellung benötigen, macht die ISR des 
externen Interrupt folgendes:

-Der Timer wird aktiviert (wenn er nicht bereits aktiviert ist, weil 
andere Jobs anstehen)
-Der Jobverwaltung des "Timer-Device" wird ein Job hinzugefügt: "Polle 
Kontakt(e) 50ms from now"
-Der Maximal-Level für den Schlafmodus wird von "PowerDown" auf "Idle" 
angehoben (oder was immer der niedrigste Modus ist, der dem Job-Timer 
den Wakeup der MCU erlaubt)

Dann geht's erstmal wieder Schlafen, allerdings in den höheren 
Schlafmodus. Irgendwann triggert der Timer den Poll-Job für die 
Kontakte. Und in der ISR des Timers erfolgt dann genau 1 Mal ein 
Polling. Und wenn danach keine anderen Jobs anstehen, zu deren 
Scheduling der Timer benötigt wird, geht's wieder runter nach 
"PowerDown".

Im Falle "Quadratur-Encoder" allerdings ist die Sachlage anders. Dafür 
wird bekanntermaßen keine Entprellung im Stil eines Tiefpaß benötigt. 
Dementsprechend auch kein Timer. Das Polling erfolgt also hier 
unmittelbar in der ISR des externen Interrupt, allerdings ebenfalls nur 
genau 1 Mal. Danach (ggf. nach Abarbeitung des "Schritts" den die 
statemachine erkannt hat) geht's unmittelbar wieder in den PowerDown 
(oder den höchsten in Folge des Schrittes angeforderten Schlafmodus).

...

Mit "regulärem" Polling ist also nicht gemeint, daß es in regelmäßigen 
Abständen geschieht, sondern nur, daß gepollt wird (egal von wo aus 
ausgelöst) und daß eine statemachine die Auswertung übernimmt, die 
letztlich ergibt, ob sich am Kontaktstatus was geändert hat (bei 
generischen Kontakten) oder ob ein Schritt erfolgt ist (bei 
Quadraturencodern). Logischerweise müssen sich die statemachines dafür 
unterscheiden. Und das tun sie auch. Tatsächlich gibt es sogar drei 
davon, die für generische Kontakte zerfällt nämlich noch in direkt 
erreichbare Kontakte und Kontakte, die als Matrix organisiert sind. Die 
Kontaktmatrix ist dann auch das einzige, wo wirklich etwas in 
regelmäßigen Abständen passiert. Nämlich genau ein Zyklus für die 
Abfrage der "aktiven" Dimension der Matrix als Reaktion auf ein per Int 
bemerktes Wackeln irgendwo in der Matrix.

von W.S. (Gast)


Lesenswert?

Danke für deinen Beitrag!

Endlich sind wir wieder auf ner sachlichen Ebene, ohne Zunge abschneiden 
und Hände abhacken. Tja, man sieht immer wieder die gleichen 
Forenteilnehmer, die ins Unsachliche abgleiten und vormals sinnvolle 
Diskussionen totbrüllen.

Ja, das ist ja gerade das Schöne an diesen 2 versetzten Signalen bei 
Drehgebern, daß sich das dabei ergebende Resultat eben nur um genau 1 
Bit beim Prellen ändern kann. Damit sind grobe Fehler von haus aus 
ausgeschlossen - wenn man eben MIT externen Interrupts arbeitet.

Wer solche Signale langsam pollt, weil er glaubt, da in den Signalfolgen 
was entprellen zu müssen, der hat schlechtere Karten. Bei dem werden vom 
System nämlich schnellere Drehbewegungen quasi verschluckt und es kommt 
zu Fehlzuständen. Genau deswegen liegt z.B. Peter heftig daneben.

Peter Dannegger schrieb:
> Nun sind aber Generationen von Programmierern nicht davon abzubringen,
> daß sie unbedingt einen externen Interrupt zum Einlesen verwenden
> wollen.

Wie gesagt, diese Generationen von Programmierern liegen prinzipiell 
richtig - allerdings würde ich mit Peter übereinstimmen darin, daß die 
sinnvolle Auswertung derartiger Interrupts vermutlich von vielen 
Programmierern nicht beherrscht wird. Der Umstand, daß tausende von 
Benutzern dieses Forums Peters Entprell-Routinen benutzen, wohl weil sie 
diese benötigen (da sie es selber nicht können), spricht Bände.

Noch ein Wort zu den "Drehencoder"-Cores, die sich in neueren 
NXP-Controllern finden: Die sind eigentlich NICHT gemacht für 
irgendwelche Knöpfe mit oder ohne Rastung an der Frontplatte von 
Geräten. Die sind Teil von Motorsteuer-Cores und gedacht für 
Update-Raten von einigen kHz und mehr, also für Encoder, sie sich auf 
Maschinenwellen befinden. Beispiel: die Hall-Encoder von Austria 
Microsystems mit 1000 bis 4000 Schritten pro Feldumpolung. Ein Magnet 
dafür: 
("http://www.ams.com/eng/Products/Magnetic-Position-Sensors/Magnets/AS5000-MR10-128";) 
- natürlich kann man sowas auch für ne feinfühlige Abstimmung des LO 
am heimischen Selbstbau-Transceiver benutzen, wenn man alle geliefeten 
Werte durch 1000 teilt...


W.S.

von Mr. X (Gast)


Lesenswert?

m.n. schrieb:
> Mit kleiner Auflösung werden die Drehgeber billiger.

Michael schrieb:
> Den WDG40A gibt es z.B. mit 20 .. 1024 Zyklen bei
> https://www.distrelec.de/inkrementale-drehgeber/wachendorff/wdg-40-a

    20 Pulse  WDG40A-20-ABN-H05-K2    151 €
  1024 Pulse  WDG40A-1024-ABN-H05-K2  151 €

So der ganz große Preisunterschied ist da nicht zu sehen ;-)

von m.n. (Gast)


Lesenswert?

Mr. X schrieb:
> So der ganz große Preisunterschied ist da nicht zu sehen ;-)

Augen waschen!
Der obige Link von MIR zeigt auf einen Encoder mit 128 Schritten zu 
40,76.
Vom selben Verein kostet ein Drehgeber mit 64 Schritten 26,08.
Bei halber Auflösung ist er somit 36% billiger.

von Falk B. (falk)


Lesenswert?

@ W.S. (Gast)

>Ja, das ist ja gerade das Schöne an diesen 2 versetzten Signalen bei
>Drehgebern, daß sich das dabei ergebende Resultat eben nur um genau 1
>Bit beim Prellen ändern kann.

Richtig.

> Damit sind grobe Fehler von haus aus
>ausgeschlossen

Nein, nur minimiert.

>- wenn man eben MIT externen Interrupts arbeitet.

Nö.

>Wer solche Signale langsam pollt, weil er glaubt, da in den Signalfolgen
>was entprellen zu müssen, der hat schlechtere Karten. Bei dem werden vom
>System nämlich schnellere Drehbewegungen quasi verschluckt und es kommt
>zu Fehlzuständen. Genau deswegen liegt z.B. Peter heftig daneben.

Falsch. DU liegt daneben. Warum das so ist, steht im Artikel 
Drehgeber. Mehr kann und will ich dazu nicht mehr sagen.
Denn auch der schnellste Prozessor ist irgendwann am Anschlag, und wenn 
man dann schneller dreht gehen Schritte verloren. Egal ob per Polling im 
Timer-Interrupt oder mit externem Interrupt.

>> Nun sind aber Generationen von Programmierern nicht davon abzubringen,
>> daß sie unbedingt einen externen Interrupt zum Einlesen verwenden
>> wollen.

>Wie gesagt, diese Generationen von Programmierern liegen prinzipiell
>richtig -

Weil du das sagst?

>Programmierern nicht beherrscht wird. Der Umstand, daß tausende von
>Benutzern dieses Forums Peters Entprell-Routinen benutzen, wohl weil sie
>diese benötigen (da sie es selber nicht können), spricht Bände.

So ein Käse. Sie nutzen sie, weil sie einfach gut funktioniert. Das Rad 
ständig neu zu erfinden ist nicht sinnvoll. Oder schreibst du deinen 
C-Compiler selber?

>Geräten. Die sind Teil von Motorsteuer-Cores und gedacht für
>Update-Raten von einigen kHz und mehr, also für Encoder, sie sich auf
>Maschinenwellen befinden.

Und? Die können genauso langsame Encoder auswerten.

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

c-hater schrieb:
> Im Falle "Quadratur-Encoder" allerdings ist die Sachlage anders. Dafür
> wird bekanntermaßen keine Entprellung im Stil eines Tiefpaß benötigt.
Ist aber mitunter hilfreich.

> Dementsprechend auch kein Timer. Das Polling erfolgt also hier
> unmittelbar in der ISR des externen Interrupt, allerdings ebenfalls nur
> genau 1 Mal.
Wie wird der interrupt nach Deiner Beschreibung erzeugt? So, wie ich es 
verstehe, ist dies hier ein externer Interrupt, der auf irgendwelche 
Änderungen an den AB-Kontakten reagiert und eine Auswerteroutine 
anstösst. Dies würde implizieren, dass das Prellen jedesmal einen 
Interrupt auslöst, weil kein Timer verwendet wird, um zu filtern. Oder 
habe ich etwas überlesen?

Bei mir setzt(e) ein Interrupt immer einen Timer zurück, der den INT 
physisch maskiert, bzw dessen Bearbeitung logisch unterdrückt und damit 
das Entprellen eliminiert. Was auch machbar ist (sich aber nur für 
schnelle Winkelauswertungen lohnt): 2 Interrupts für A und B, die sich 
gegenseitig freigeben. Damit wird das Entprellen aktiv überwunden und 
gleichsam - da keine willkürliche zeitliche Abtastung mitsamt Delay 
vorliegt - eine maximale Koheränz zwischen Prozessorzeit und Geberzeit 
realisiert, die es gestattet, die Beschleunigung der Bewegung recht 
genau zu messen.


> Die Kontaktmatrix ist dann auch das einzige, wo wirklich etwas in
> regelmäßigen Abständen passiert. Nämlich genau ein Zyklus für die
> Abfrage der "aktiven" Dimension der Matrix als Reaktion auf ein per Int
> bemerktes Wackeln irgendwo in der Matrix.
Wo siehts Du hier einen "regelmässige Zeitabstand"? Was ist damit 
gemeint?

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Kleine Korrektur:

Jürgen Schuhmacher schrieb:
> das Entprellen eliminiert.
gemeint war selbverständlich, dass die Wirkung des Prellens eliminiert 
(oder sagen wir "unterdrückt") wird.

Jedesmal einen INT auszuführen, halte ich nicht für zielführend. Solche 
Schalter prellen mehre Dutzend male, wenn sie alt und schmutzig sind. Da 
kommt selbst eine gute Entprellschaltung manchmal kaum mit. Ich habe 
einige EMU Klangerzeuger daheim, die alle unter der Krankhet leiden. Ein 
Dreh und das Programm springt bis zu 15 Nummern vor.

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.