Suche Ersatz für Drehencoder Bourns EM14 und PEC11R

Gast #5022387
Lesenswert?

Moin,

ich bin auf der Suche nach einem Ersatz für Drehencoder mit Taster von 
Bourns Typ PEC11R-4225F-S0024. Ich habe mehrere von denen aus der Bucht 
mit Filterplatine gekauft. Technisch ist an denen nichts auszusetzen.

Aber: Die Auswertung ist recht aufwändig, da der Geber die 
Zustandsänderungen zwischen den Rastungen hat und ich nicht mit 
Interrupts arbeiten kann. Auf jedem Rastpunkt sind A und B auf 
High-Potential. Mein AVR-ASM-Programm fragt nun 50x alle 2 ms die Spuren 
ab und speichert diese Werte im SRAM. Dann werden diese 50 Werte auf 
eine entsprechende Änderungsabfolge analysiert und dann eben Links- oder 
Rechtsdrehung erkannt. Das funktioniert sehr gut ist aber auch 
Zeitaufwändig...

Ich habe optische Geber von Bouns vom Typ EM14A1D-C24-L008S. Die sind 
für die Auswertung ganz einfach, da auf jedem Rastpunkt A und B 
definiert sind 11 01 00 10.

Nachteil: Zu teuer.

Was ich nun suche ist ein etwas hochwertigeren mechaniscen Drehencoder 
mit Taster, der mir auf jeden Rastpunkt wie der EM14A1D-C24-L008S 
definierte Zustände ausgibt. Mein Preismaximum ist so 5 EUR/Stück.

was könnt Ihr empfehlen?



Holger
Gast #5022397
Lesenswert?

Holger schrieb:
> Mein AVR-ASM-Programm fragt nun 50x alle 2 ms die Spuren
> ab und speichert diese Werte im SRAM

Wozu? Wenn dein Programm die Zustände ungleich 11 erfassen kann, dann 
kann man das ja auch mit einer Zustandsmaschine direkt auswerten, ohne 
mehr zu speichern als den letzten Zustand.

Georg
Gast #5022469
Lesenswert?

Holger schrieb:
> Aber: Die Auswertung ist recht aufwändig, da der Geber die
> Zustandsänderungen zwischen den Rastungen hat und ich nicht mit
> Interrupts arbeiten kann.

Das muss man nicht verstehen, oder?

Es ist doch nur gut, wenn die Umschaltung zwischen den Rastungen 
stattfindet, sonst zappelt der Wert auf der Rastung - je nach 
Temperatur, Wetterlage und Tagesform. Das will keiner.

> was könnt Ihr empfehlen?
Wenn du unbedingt einen wackeligen Wert brauchst, kann es helfen, die 
beiden Phasensignale zu tauschen. Da kein vernünftiger Anwender das 
braucht, ist der Umschaltpunkt für die zweite Phase, bezogen auf die 
Rastposition allerdings vom Hersteller meist nicht genauer spezifiziert, 
i.e. du kannst "Glück" haben oder auch nicht.
Gast #5022584
Lesenswert?

Holger schrieb:
> Ich brauche eine Empfehlung für Drehencoder.

Holger schrieb:
> Aber: Die Auswertung ist recht aufwändig,

Dein Problem scheint doch die Auswertung zu sein ...

Alle 2ms die beiden Signale abzufragen und in einen Zustandsautomaten 
mit 4 Zuständen reinzufüttern, ist doch nun nicht so schlimm. Und da 
muss auch nichts 50x alle 2ms abgefragt werden, sondern 1x reicht.
Gast #5022666
Lesenswert?

Leute? Wo ist Eurer Problem eine einfache Frage zu beantworten? Ich habe 
nicht gefragt, was ist an meiner Problemlösung scheiße!

Viele Lösungen sind gut und auch kürzer im Code. Das ist aber nicht 
Gegenstand meiner Frage. Ich habe einfach keine Timer mehr frei für 
einen 2 ms - Poll.

Und wenn, wie ich ja schrieb, meine Lösung funktiert, dann muss man dazu 
doch eigentlich nichts sagen. Aber in diesem Forum scheint das ja so 
üblich sein.

@Georg (Gast)
Verstehst Du den Inhalt meines ersten Posts überhaupt?



Holger
Gast #5022691
Lesenswert?

Holger schrieb:
> Ich habe einfach keine Timer mehr frei für einen 2 ms - Poll.
Dann hast du da vielleicht irgendetwas ungünstig organisiert. 
Irgendeinen Millisekunden- oder Sonstwas-Timer braucht man meist doch 
sowieso meist. Warum kannst du den nicht mit nutzen?

- Womit beschäftigst du deine Timer?
- Wie ist der minimale zeitliche Abstand zwischen zwei Codeworten deines 
Inkrementalgebers?
Gast #5022787
Lesenswert?

Moin, oha. Ich habe es kapiert! Wenn ich es nicht so mache, wie man es 
hier will oder üblicherweise handhabt, ist man halt zu blöd.

Daher: Großes Redesign. Jahaha extra für Euch!

Nun aber zwei Fragen:

1. Ich nehme den STEC11B03. Der Controller ist ein ATMEGA mit 8 MHz. 
Angenommene Zeitdauer von Schritt zu Schritt 1 Sekunde: Wie hoch muss 
die Abfragefrequenz sein?

2. Wie 1 nur Schritt zu Schritt 1/10 Sekunde. Wie hoch muss die 
Abfragefrequenz sein?


Holger
#5022792
Lesenswert?

Irgendwie ist dein Ton immer noch nicht so dolle - naja, vielleicht bist 
du ja einfach so....
1. Ich benutze den PEC11L in Massen, da gibts keine Probleme mit. Ob da 
so grosse Unterschiede zum PEC11R sind? Bei mir sind am Rastpunkt 
jedenfalls abewechselnd beide H oder beide L. Ist aber letzten Endes 
wurscht.
2.Läuft an einem ATTiny, Timmerinterrupt 1ms mit vielleicht 0,5% 
Prozessorauslastung (geschätzt, eher weniger). Schau ich jetzt aber 
nicht genau nach.
Gast #5022804
Lesenswert?

Holger schrieb:
> Angenommene Zeitdauer von Schritt zu Schritt 1 Sekunde: Wie hoch muss
> die Abfragefrequenz sein?

So hoch, dass du beim Drehen jedes Codewort sicher mindestens einmal 
erfasst. In dem Bild Wikipedia-Bild mit den Rechtecksignale also 
häufiger als alle 90°.
https://de.wikipedia.org/wiki/Inkrementalgeber#Signalauswertung

Zeig einfach mal im Zeitdiagramm, was du als Schritt bezeichnest. Bei 
Inkrementalgebern mit Rastung liegen die Rastpunkte - übertragen auf das 
Diagramm in 180° Abstand.
Gast #5022808
Lesenswert?

H.Joachim S. schrieb:
> Irgendwie ist dein Ton immer noch nicht so dolle - naja, vielleicht bist
> du ja einfach so....

Moin, wenn man eine simple Frage nicht beantwortet bekommt und wie ein 
Blödmann dargestellt wird nur weil man einen anderen Ansatz hat. Warum 
ist das so ein großes Problem?

Und meine erster Text war ja wohl anständig formuliert - oder?



Nun mal weg vom Encoder-Typ zur Abfrage. Wenn ich 100x pro Sekunde 
abfrage, dann bekomme ich nicht unbedingt bei einem Schritt ein 
Pegelwechsel mit. Ich würde auch noch einen zweiten Abfragen. Reichen da 
1 ms? Wie sieht es mit Sprüngen oder dem nicht erkennen von 
Pegelwechseln von Schritt zu Schritt aus?


Holger
#5022835
Lesenswert?

Mein letzter Beitrag hier

Holger schrieb:
> Mein AVR-ASM-Programm fragt nun 50x alle 2 ms die Spuren
> ab und speichert diese Werte im SRAM. Dann werden diese 50 Werte auf
> eine entsprechende Änderungsabfolge analysiert und dann eben Links- oder
> Rechtsdrehung erkannt. Das funktioniert sehr gut ist aber auch
> Zeitaufwändig...

Dort liegt der Hund begraben, das ist gelinde gesagt Schwachsinn in 
höherer Ausprägung.
Du bist der Meinung, das funktioniert gut. Aber eben nur nur mit einem 
bestimmten Encodertyp, der dir aber wiederum zu teuer ist.
Jetzt willst du, dass andere für dich Encoder suchen oder finden mit 
Eigenschaften, die eigentlich sonst keiner braucht. Alle sagen dir - 
mach es einfach richtig, so wie es 1000fach funktioniert (alle anderen 
Ansätze, Flankenerkennung im Interrupt auf einem oder gar beiden 
Kanälen) sind regelmässig zum Scheitern verurteilt, wenn die Encoder 
etwas abgenutzt sind. Kommt immer wieder mal einer vorbei, der das Rad 
neu erfinden möchte (bei mir funktioniert es super...)
Du willst es nicht hören oder begreifen (weil dein Ansatz ja so gut 
funktioniert)? Und rede nicht von Zeitproblemen, wenn du Zeit hast 50mal 
die Eingänge zu lesen und wegzuspeichern und nachträglich zu 
analysieren.
Es gibt KEINEN Grund, es anders machen zu wollen als das hier in der 
Codesammlung stehende  Verfahren, ich glaube von Peter Danegger - hast 
du es dir denn überhaupt mal angeschaut??

Und jetzt geh hin und schau dir das an. Ansonsten ist jede weitere 
Diskussion hier müssig.
Gast #5022895
Lesenswert?

H.Joachim S. schrieb:
> Aber eben nur nur mit einem
> bestimmten Encodertyp, der dir aber wiederum zu teuer ist.

Moin, warum willst Du meinen Text nicht richtig lesen? Und dann bin ich 
schwachsinnig? Bitte?

H.Joachim S. schrieb:
> hast
> du es dir denn überhaupt mal angeschaut??

Jo. Ist aber C und ich programmiere nur in Assembler. Ich habe schlicht 
weg keine Lust auf C umzustellen. Außerdem selber schreiben bringt ja 
meistens mehr als abschreiben.


Zu Sache. Habe jetzt mal einen 1 ms-Interrupt eingebaut und frage den 
Encoder ab.

Drehung nach rechts: 10 00 01 11
Drehung nach links:  01 00 10 11

Egal wie schnell ich drehe. Immer kommen die entsprechenden 
Reihenfolgen. Die minimale Geschwindigkeit ist durch das Moment, welche 
beim Überwindung der Reibung der Rastung bestimmt und dafür reichen 1 ms 
gut aus.


Holger
Moderator (Firma: Titel) Persönliche Seite #5023662
Lesenswert?

Holger schrieb:
> Und dann bin ich schwachsinnig?
Du doch nicht. Nur der Lösungsansatz. Jeder kann mal einen schwachen 
Moment haben. Und das mit der Pufferung im RAM war so einer: 
Symptombekämpfung statt Ursachensuche.

Holger schrieb:
> Wenn ich es nicht so mache, wie man es hier will oder üblicherweise
> handhabt, ist man halt zu blöd.
Man kann es natürlich auch anders machen, wenn das denn besser 
funktioniert. Allerdings ist es immer eine gute Idee, einen bereits 
tadellos funktionierenden Ansatz zu verstehen und dann verbessern.

Holger schrieb:
> Jo. Ist aber C und ich programmiere nur in Assembler. Ich habe schlicht
> weg keine Lust auf C umzustellen.
Ja und, zum Verstehen des Prinzips musst du ja nur die zehn Zeilen 
C-Code lesen können. So viel Phantasie traue ich dir zu. Man muss sich 
halt mal auf was Neues einlassen... ?

Holger schrieb:
> was könnt Ihr empfehlen?
Nimm ein Oszi und miss die Signale. Das ist der allererste Schritt in so 
einem Fall. Denn sonst kannst du nur raten. Insbesondere, ob die 
Abtastung mit 1ms tatsächlich schnell genug ist...

BTW, kennst du diese alte Redewendung:
Wie man in den Wald hineinruft schallt es wieder heraus.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren