mikrocontroller.net

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


Autor: Holger (Gast)
Datum:

Bewertung
-1 lesenswert
nicht 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

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: H.Joachim S. (crazyhorse)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Holger (Gast)
Datum:

Bewertung
-3 lesenswert
nicht 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

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Georg (Gast)
Datum:

Bewertung
2 lesenswert
nicht 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

Autor: Holger (Gast)
Datum:

Bewertung
-3 lesenswert
nicht 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

Autor: fpga (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
https://www.reichelt.de/Drehimpulsgeber/STEC11B03/...

Mit taster, Abstastung wie gewollt. Dauerte 1 min. Wie suchst du im 
internet?

Gruß J

Autor: Holger (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Moin fpga,

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


Holger

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: fpga (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Aber taugt der auch was?

Wie definierst du das?

Gruß J

Autor: Jobst M. (jobstens-de)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Holger (Gast)
Datum:

Bewertung
-3 lesenswert
nicht 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

Autor: Holger (Gast)
Datum:

Bewertung
-1 lesenswert
nicht 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

Autor: H.Joachim S. (crazyhorse)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: fpga (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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#Sig...

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

Autor: Holger (Gast)
Datum:

Bewertung
-1 lesenswert
nicht 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

Autor: fpga (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Du liest ja nicht mal die Antworten. Helf dir selbst.

Autor: Holger (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
fpga schrieb:
> Helf

Hilf!


;-)



Holger

Autor: H.Joachim S. (crazyhorse)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Holger (Gast)
Datum:

Bewertung
-2 lesenswert
nicht 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

Autor: Lothar M. (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.