Forum: Mikrocontroller und Digitale Elektronik Suche Ersatz für Drehencoder Bourns EM14 und PEC11R


von Holger (Gast)


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

von Georg (Gast)


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

von H.Joachim S. (crazyhorse)


Lesenswert?

Genau, Software überarbeiten.
Interrupts (ausser dem Timer) braucht es dafür nicht.
Schau mal hier in die Codesammlung. Alles ganz easy und zuverlässig.

von Wolfgang (Gast)


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.

von Holger (Gast)


Lesenswert?

Moin,

wie üblich wird rumgemäkelt ohne überhaupt irgend eine Kenntnis vom 
Restprogramm zu haben ... Leute Leute.

Ich brauche eine Empfehlung für Drehencoder.



Holger

von Wolfgang (Gast)


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.

von Georg (Gast)


Lesenswert?

Holger schrieb:
> wie üblich wird rumgemäkelt

Ok, hat sich erledigt, wer nicht will der hat schon. Frechheiten müssen 
wir uns nicht bieten lassen.

Georg

von Holger (Gast)


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

von fpga (Gast)


Lesenswert?


von Holger (Gast)


Lesenswert?

Moin fpga,

vielen Dank. Den habe ich auch gefunden. Aber taugt der auch was? Ich 
fragte ja nach einer Empfehlung.


Holger

von Wolfgang (Gast)


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?

von fpga (Gast)


Lesenswert?

>Aber taugt der auch was?

Wie definierst du das?

Gruß J

von Jobst M. (jobstens-de)


Lesenswert?

Holger schrieb:
> Aber taugt der auch was?

Ja, der ist toll!
Passt aber vermutlich auch nicht zu Deiner komischen Software.

Ist im übrigen nicht unser Problem, sondern Deins :-)
Und: Du möchtest das Problem unbedingt aus unerfindlichen Gründen 
behalten.
Wieso sollen wir Verständnis dafür haben?

Gruß
Jobst

von Holger (Gast)


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

von Holger (Gast)


Lesenswert?

Jobst M. schrieb:
> Passt aber vermutlich auch nicht zu Deiner komischen Software.

Moin, das ist ja Quatsch. In den 100 ms erfasse ich doch jegliche 
A/B-Zustände und kann die Übergänge ausfiltern.


Holger

von H.Joachim S. (crazyhorse)


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.

von fpga (Gast)


Lesenswert?

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

Min. doppelt so hoch:
https://de.wikipedia.org/wiki/Nyquist-Shannon-Abtasttheorem

Du bleibst noch eine Antwort schuldig.

Gruß J

von Wolfgang (Gast)


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.

von Holger (Gast)


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

von fpga (Gast)


Lesenswert?

Du liest ja nicht mal die Antworten. Helf dir selbst.

von Holger (Gast)


Lesenswert?

fpga schrieb:
> Helf

Hilf!


;-)



Holger

von H.Joachim S. (crazyhorse)


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.

von Holger (Gast)


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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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.

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.