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?
@ 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
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.(?)
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!
@ 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
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?
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?
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.
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
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
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?
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
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
Kennt jemand hochwertige Drehencoder/ Drehgeber ohne Rastung? Ich möchte
Werte sehr weich und leise einstellen und die Auswertung kann ich
tolerant genug aufziehen.
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...
@ 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.
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...
@ 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)
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.
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?
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.
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.
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?
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.
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.
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.
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 :-)
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.
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.
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 :-)
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.
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! ***
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 :-)
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.
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.
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.
@ 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.
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?
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.