Forum: Mikrocontroller und Digitale Elektronik Matrix mit 5x Rotary Encoder für STM32 uC


You were forwarded to this site from EmbDev.net. Back to EmbDev.net
von D. Z. (zoundgalaxy)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich möchte eine Buttonmatrix mit 5x Rotary Encoder + Taster (KY-040) 
erstellen. Leider habe ich hierzu nichts gefunden. Die Rotary Encoder 
können doch als 3 fach Taster angesehen werden? Ist die Schaltung so 
richtig? Welche Diode würdet ihr empfehlen?

Danke euch

von D. Z. (zoundgalaxy)


Angehängte Dateien:

Lesenswert?

Sorry falsches Bild. Dies ist das richtige Bild.

von Falk B. (falk)


Lesenswert?

D. Z. schrieb:
> ich möchte eine Buttonmatrix mit 5x Rotary Encoder + Taster (KY-040)
> erstellen.

Warum? Hast du damit so viele IOs gespart? 5 Encoder sind 15 
Eingangssignale, die man problemlos mit 2x8 Bit Schieberegistern 
einlesen kann. Dazu braucht es gerade mal drei IOs. Deine Matrix braucht 
8.

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


Lesenswert?

D. Z. schrieb:
> Dies ist das richtige Bild.
Allerdings sind IN und OUT wirklich eine schlechte Namenswahl. 
Besonders, wenn der Pin am Signal STM32_OUT als Input konfiguriert 
werden muss.

D. Z. schrieb:
> Welche Diode würdet ihr empfehlen?
Eine mit möglichst niedriger Uf wie z.B. eine LL103.

Und ich würde die Pullups etwas niederohmiger machen, wenn da schon wild 
rumgeschaltet wird.

Ich würde aber auch die Schieberegister-Variante nehmen.

: Bearbeitet durch Moderator
von D. Z. (zoundgalaxy)


Lesenswert?

Es müssen 8x von dieser Schaltung, sowie weitere Schaltungen an einen 
STM32MP151AAA3 (176 I/O Pins) angeschlossen werden. mit dieser Schaltung 
würde ich unter die 176 kommen.

von D. Z. (zoundgalaxy)


Lesenswert?

Beim suchen nach einer Lösung wurde die Matrix immer den 
Schieberegistern bevorzugt. Zeitverzögerungen, Ausfallsicherheit 
kompletter Bereiche usw. wurden dabei angeführt. Oder hab ich das falsch 
verstanden?

von Falk B. (falk)


Lesenswert?

D. Z. schrieb:
> Es müssen 8x von dieser Schaltung, sowie weitere Schaltungen an einen
> STM32MP151AAA3 (176 I/O Pins) angeschlossen werden. mit dieser Schaltung
> würde ich unter die 176 kommen.

Was umso mehr für Schieberegister spricht.

> Beim suchen nach einer Lösung wurde die Matrix immer den
> Schieberegistern bevorzugt. Zeitverzögerungen,

Unfug. Deine 8x2 Byte liest man selbst bei schnachlangsamen 1 MHz Takt 
innerhalb von "sagenhaften" 128us aus, real gut Faktor 10 schneller.

> Ausfallsicherheit

Ebenso Unsinn. Wer eine handvoll Schieberegister nicht stabil betreiben 
kann, sollte was anderes machen.

von Random .. (thorstendb) Benutzerseite


Lesenswert?

Hat jemand eine config für die STM32 Timer, um die RotaryEncoder etwas 
zu entprellen? Die Timer zählen korrekt, aber es kommen tonnenweise 
Interrupts (trotz Filterung per status flag). Und das Up/Down Flag ist 
falsch, während man im Interrupt ist.

von Axel S. (a-za-z0-9)


Lesenswert?

D. Z. schrieb:
> Beim suchen nach einer Lösung wurde die Matrix immer den
> Schieberegistern bevorzugt.

Dieser Satz kein Deutsch.

Und deine Frage ist ein Paradebeispiel dafür, wie man es nicht macht. 
Wenn du 40 Encoder abfragen und dabei mit wenig Pins auskommen willst, 
dann solltest du das auch so sagen.

Allerdings:

D. Z. schrieb:
> Es müssen 8x von dieser Schaltung, sowie weitere Schaltungen an einen
> STM32MP151AAA3 (176 I/O Pins) angeschlossen werden.

Ein Encoder braucht auch bei Direktanschluß gerade mal 3 Pins, also 120 
Pins für 8×5=40 Encoder gesamt. Natürlich führst du nicht näher aus, was 
"weitere Schaltungen" sind oder machst gar eine konkrete Rechnung auf 
a'la "ich habe X Pins für den Anschluß von Y Encodern".

Aber da anzunehmen ist, daß die Encoder sowieso auf einer größeren 
Platine angeordnet sein werden (A4 Größe ist für 40 Stück eher knapp) 
und das Routing von 120 Signalen eher häßlich wird, würde ich erst recht 
auf kaskadierte Schieberegister setzen. Im Extremfall ein einziges, 
120=15×8 Bit langes. Vielleicht willst du aber Encoder lieber in Gruppen 
zusammenfassen. Weiß ja außer dir niemand.

von m.n. (Gast)


Lesenswert?

D. Z. schrieb:
> Es müssen 8x von dieser Schaltung, sowie weitere Schaltungen an einen
> STM32MP151AAA3 (176 I/O Pins) angeschlossen werden. mit dieser Schaltung
> würde ich unter die 176 kommen.

Wie wäre es, pro Encoder einen ATtiny25/ATtiny202 zu verwenden und ihn 
per IIC abzufragen?
http://mino-elektronik.de/mt12_iic/mt12_iic.htm#qcnt_tiny25 ff.

von D. Z. (zoundgalaxy)


Lesenswert?

Welchen Schieberegister würdet ihr dann empfehlen und habt ihr eine 
passende Schematic?

von Εrnst B. (ernst)


Lesenswert?

D. Z. schrieb:
> habt ihr eine
> passende Schematic?

AVR-Tutorial: Schieberegister: Porterweiterung für Eingänge

Pullups dazu, Encoder dran...

von Micha (Gast)


Lesenswert?

Random .. schrieb:
> Hat jemand eine config für die STM32 Timer, um die RotaryEncoder
> etwas
> zu entprellen? Die Timer zählen korrekt, aber es kommen tonnenweise
> Interrupts (trotz Filterung per status flag). Und das Up/Down Flag ist
> falsch, während man im Interrupt ist.

https://www.mikrocontroller.net/articles/Drehgeber#Signalauswertung

von D. Z. (zoundgalaxy)


Lesenswert?

Ich ergänze das ganze mal etwas:

Ich möchte ein Main PCB erstellen. Dort sitzt der uC und diverse 
Schaltungen wie zb. die Schmitt Trigger um die WS2812B Signalleitung auf 
5V hoch zu bekommen. Von dem Main PCB geht es dann über 
Steckverbindungen über eine Distanz von ca. 50cm (max.)zu den 
nachfolgenden PCBs:

8x 5fach Rotary Encoder PCB
4x 2fach Rotary Encoder PCB
2x 16fach Button PCB
...

sowie zu den dazu gehörigen Status LED (WS2812B).

Zum Pc/Software sollen Button/Rotary Encoder 1 bis .... und von der 
Software die Daten zum ansteuern der Status LED ausgegeben werden.

von Falk B. (falk)


Lesenswert?

Ein Mischpult zum 1001mal. Dann mal los.

von Εrnst B. (ernst)


Lesenswert?

D. Z. schrieb:
> Ich möchte ein Main PCB erstellen.
> 8x 5fach Rotary Encoder PCB
> 4x 2fach Rotary Encoder PCB


Dann würde ich das ganze modular gestalten:

Auf die PCBs jeweils noch einen kleinen µC (muss ja kein Tiny wie von 
m.n. vorgeschlagen sein) und die Verbindung zu deinem Main-Board über 
ein Bussysstem, I²C, SPI, UART, ...

Den Input-Platinchen dann halt jeweils noch ein Mäuseklavier/Jumper zum 
Einstellen einer Adresse spendieren, und schon können die Platinen 
identisch sein.

Dann bist du auch flexibel, und wenn du z.B. dann mal eine Input-Platine 
mit qTouch-Slidern etc bauen willst, kann die das selbe Interface 
nutzen.

: Bearbeitet durch User
von D. Z. (zoundgalaxy)


Lesenswert?

Εrnst B. schrieb:

> Auf die PCBs jeweils noch einen kleinen µC

So ein ähnliches System auf Basis eines CAN BUS habe ich schon in der 
mache. Ich wollte es eigentlich schlanker machen und die Kosten für eine 
Kleinserienfertigung (brauche vorerst ca. 10 komplette Systeme eventuell 
weitere 10 bis 20 im Nachgang) senken. Dies scheint aber wohl nicht der 
Fall zu sein?!

von Εrnst B. (ernst)


Lesenswert?

D. Z. schrieb:
> und die Kosten für eine
> Kleinserienfertigung

gerade bei Kleinserien überwiegen die Entwicklungskosten deutlich.
Die paar € für die zusätzlichen µCs sind im Vergleich zum Aufwand, sie 
zu programmieren pillepalle.

Musst du entscheiden, ob die reduzierte Komplexität für das Gesamtsystem 
und die vereinfachte Programmierung des "Master-µC" das wieder rausholt.

Ansonsten ginge bei der Schieberegister-Umsetzung auch ein Daisy-Chain 
über die einzelnen Input-Platinen. Dann limitiert aber die Verkabelung 
die maximale SPI-Frequenz.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Es gibt sogar fertige Rotary Encoder mit I²C Schnittstelle.

https://learn.adafruit.com/adafruit-i2c-qt-rotary-encoder?view=all

Oder nur die Platine mit µC: 
https://www.duppa.net/shop/i2c-encoder-mini/

von Martin S. (mmaddin)


Lesenswert?

...oder man nimmt das "Behringer BCR2000" und adaptiert sich an die Midi 
Schnittstelle...

https://www.behringer.com/product.html?modelCode=P0245

M

von m.n. (Gast)


Lesenswert?

Stefan F. schrieb:
> Es gibt sogar fertige Rotary Encoder mit I²C Schnittstelle.

Schnäppchen sehen anders aus, aber wenn der TO schon Probleme hat, 
Schieberegister anzuschließen, muß es wohl in diese Richtung gehen.

Εrnst B. schrieb:
> D. Z. schrieb:
>> Ich möchte ein Main PCB erstellen.
>> 8x 5fach Rotary Encoder PCB
>> 4x 2fach Rotary Encoder PCB
>
> Dann würde ich das ganze modular gestalten:

Oder das ganze einem "flotten Rechenknecht" (RP2040) mit zusätzlichen 
Schieberegistern übertragen. Das wäre recht günstig.

von Frank K. (fchk)


Lesenswert?

D. Z. schrieb:
> Εrnst B. schrieb:
>
>> Auf die PCBs jeweils noch einen kleinen µC
>
> So ein ähnliches System auf Basis eines CAN BUS habe ich schon in der
> mache. Ich wollte es eigentlich schlanker machen und die Kosten für eine
> Kleinserienfertigung (brauche vorerst ca. 10 komplette Systeme eventuell
> weitere 10 bis 20 im Nachgang) senken. Dies scheint aber wohl nicht der
> Fall zu sein?!

Dass CAN was kostet, hat die Automobilindustrie auch schon gemerkt und 
für die Dinge, die keine so hohe Bandbreite brauchen, LIN erfunden. Bei 
Mouser kostet ein CAN-Transceiver in EInzelstückzahlen ca. 2€ minimal, 
ein LIN-Transceiver aber unter einem €. Plus: Ein CAN-Knoten braucht 
einen Quarz, ein LIN-Slave kommt ohne aus, da er sein Bustiming am 
Synchronbyte ausmessen kann. Und ein Microcontroller mit LIN-fähigem(!) 
UART kostet deutlich weniger als einer mit CAN.

Nur mal so als Idee, was im echten Leben draußen so passiert.

fchk

von Bauform B. (bauformb)


Lesenswert?

Frank K. schrieb:
> D. Z. schrieb:
>> Εrnst B. schrieb:
>>
>>> Auf die PCBs jeweils noch einen kleinen µC
>>
>> So ein ähnliches System auf Basis eines CAN BUS habe ich schon
>> in der mache.
> Dass CAN was kostet, hat die Automobilindustrie auch schon gemerkt und
> für die Dinge, die keine so hohe Bandbreite brauchen, LIN erfunden.

Kleine uC mit CAN haben den großen Vorteil, dass der große uC nicht 
pollen muss.

Den Vorteil kann man aber auch mit einem normalen UART haben, ganz ohne 
CAN und ohne LIN. Man baut keinen Bus, sondern eine Daisy Chain, immer 
UART-TX an UART-RX vom nächsten. Als letzter hängt der große uC in der 
Kette. Ja, die Latenz ist bei jedem Knoten anders und wird mit jedem 
weiteren uC immer größer; bei 115200 Baud wäre die Grenze mit 3.6ms bei 
42 Knoten ;)

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


Lesenswert?

D. Z. schrieb:
> Beim suchen nach einer Lösung wurde die Matrix immer den
> Schieberegistern bevorzugt.
Einfach, weil es schon immer so gemacht wurde? Oder warum?
Basierend auf welchen Erfahrungen?

> Zeitverzögerungen
Man kann da alle Schieberegister hintereinander schalten und eine DMA 
aufsetzen. Dann ist das keine Verzögerung oder gar Rechenaufwand in der 
Software.

> Ausfallsicherheit kompletter Bereiche usw. wurden dabei angeführt.
Das ist ein Scheinargument. Denn auch wenn nur 1 Encoder ausfällt, dann 
ist das laut Murphy immer genau der, den ich gerade brauche. Da hilft 
es nichts, wenn die 39 anderen noch tadellos funktionieren.

Random .. schrieb:
> Hat jemand eine config für die STM32 Timer, um die RotaryEncoder etwas
> zu entprellen?
Per Definition müssen Drehencoder dank des Graycodes nicht entprellt 
werden.

> Die Timer zählen korrekt
So soll es sein, das ist das Wichtigste.

> aber es kommen tonnenweise Interrupts (trotz Filterung per status flag).
Welche Interrupts denn?
Der Zähler an sich braucht keine. Und wenn due den Zähler auslesen 
willst, dann tust du das am Besten dann, wenn es dir gerade so passt. 
Ich würde nie in meiner Software manuelle Eingaben einen Interrupt 
auslösen lassen. Da kann es ja sicher nicht auf die Millisekunde 
ankommen. Und bis dahin ist die Mainloop sowieso einmal durch.

: Bearbeitet durch Moderator
von Kemma (Gast)


Lesenswert?

Lothar M. schrieb:
> Random .. schrieb:
>> Hat jemand eine config für die STM32 Timer, um die RotaryEncoder etwas
>> zu entprellen?
> Per Definition müssen Drehencoder dank des Graycodes nicht entprellt
> werden.

Das stimmt nur wenn die Drehencoder Graycodes ausgeben. Es gibt in der 
freien Wildbahn aber auch Encoder, die z.B. getrennte 
Drehrichtungsausgänge haben und dort je nach Drehrichtung kurze Impulse 
ausgeben. Also muss die Frage an den TO lauten, welche Encoder werden 
eingesetzt?

von Wolfgang (Gast)


Lesenswert?

Kemma schrieb:
> Das stimmt nur wenn die Drehencoder Graycodes ausgeben.

Drehencoder mit 2-Bit Gray-Code sind deutlich am weitesten verbreitet.
Bei solchen mit Rastung muss zusätzlich noch auf die Kanalzuordnung 
achten, damit man stabile Ausgangswerte bekommt.
Für die Auslegung der Abtastung ist die maximale Pulsfrequenz an den 
Ausgängen entscheidend.

von Jobst M. (jobstens-de)


Lesenswert?

D. Z. schrieb:
> Die Rotary Encoder
> können doch als 3 fach Taster angesehen werden?

Ja.

> Ist die Schaltung so richtig?
> Sorry falsches Bild. Dies ist das richtige Bild.

Ja, kann man so machen.

> Welche Diode würdet ihr empfehlen?

BAT54AW, BAS40-06-G, BAS70-06-G
Aber wenn sie in der Schublade liegt auch eine 1N4148.

... nur um mal die gestellten Fragen zu beantworten.

Wie schon erwähnt, kann man die Widerstände verkleinern um eine 
schnellere Abfrage zu ermöglichen.


Gruß
Jobst

von Uwe K. (ukhl)


Lesenswert?

Random .. schrieb:
> Hat jemand eine config für die STM32 Timer, um die RotaryEncoder etwas
> zu entprellen? Die Timer zählen korrekt, aber es kommen tonnenweise
> Interrupts (trotz Filterung per status flag). Und das Up/Down Flag ist
> falsch, während man im Interrupt ist.

Schaue dir mal die Funktion "encode" an. Die ist auch im Interrupt 
stabil und prellfrei.

Beitrag "Re: Drehgeber/Encoder 1-, 2- oder 4-schrittig - neuer Algoritmus"

Sicher auch für STM32 protierbar.

von Ron-Hardy G. (ron-hardy)


Lesenswert?

ohne mir jetzt alles genau anzusehen: IMHO gehen die ganzen 
Decoderroutinen doch von fest an den GPIO verschalteten Drehencoders aus 
und arbeiten dann interruptgesteuert und dröseln das auf. Ich hab 
absolut keine Idee wie man da eine SPI-Schieberegisterkette eintütet. 
Gibt es da eine Referenzimplementation?

von m.n. (Gast)


Lesenswert?

Ron-Hardy G. schrieb:
> Ich hab
> absolut keine Idee wie man da eine SPI-Schieberegisterkette eintütet.
> Gibt es da eine Referenzimplementation?

Indem man nicht die Pegel direkt von den GPIO verwendet, sondern zuvor 
die Eingangspegel der Schieberegister in den Speicher holt und dann wie 
gehabt verarbeitet.
Pro 8 Bit SR könnte man von zwei Encodern jeweils drei Pins anschließen 
und die beiden freien unbenutzt lassen. War das jetzt schwer?

von Εrnst B. (ernst)


Lesenswert?

Ron-Hardy G. schrieb:
> IMHO gehen die ganzen
> Decoderroutinen doch von fest an den GPIO verschalteten Drehencoders aus
> und arbeiten dann interruptgesteuert und dröseln das auf.

Nein. Die laufen per Timer-Interrupt oder per periodischem Task aus der 
main()-Loop, pollen den Zustand der IOs, und lösen den Gray-Code auf.

Das geht problemlos auch über Schieberegister oder I²C-Portexpander.

Und hat den Vorteil, dass der Zählerstand nicht wild durch die Gegend 
springt, gerne auch gegen die Drehrichtung, sobald der Drehencoder etwas 
älter wird und stärker prellt.

Das Polling muss nur schnell genug erfolgen, dass die maximale 
Umdrehungsgeschwindigkeit, die man per Hand noch hinbekommt, noch sauber 
abgetastet werden kann.

von Stefan F. (Gast)


Lesenswert?

Ron-Hardy G. schrieb:
> Ich hab absolut keine Idee wie man da eine SPI-Schieberegisterkette eintütet.

Du liest einfach alle Schieberegister in Variablen ein und wertest dann 
deren Inhalt so aus, als wären es Input-Register von Ports.

von Wolfgang (Gast)


Lesenswert?

Uwe K. schrieb:
> Schaue dir mal die Funktion "encode" an. Die ist auch im Interrupt
> stabil und prellfrei.

Auch die Schalter in Drehencodern prellen. Bei Gray-Code stört das 
nicht.
Was ist eine "prellfreie" Funktion?

von Steve van de Grens (roehrmond)


Lesenswert?

Wolfgang schrieb:
> Auch die Schalter in Drehencodern prellen. Bei Gray-Code stört das
> nicht.

Wäre schön, wenn diese Theorie in der Praxis zutreffen würde. Ich meide 
mittlerweile den Kauf von Geräten mit Drehencodern, weil sie so oft 
Probleme machen.

Ganz aktuell: Im vergangenen Sommer wurden im Büro smarte Thermostate 
auf die Heizungsventile geschraubt. Wenn man daran dreht, springt die 
angezeigte Soll-Temperatur um mehrere Grad wild rauf und runter. Es ist 
jedes mal ein Glücksspiel, da die gewünschte Temperatur einzustellen.

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


Lesenswert?

Steve van de Grens schrieb:
> Wenn man daran dreht, springt die angezeigte Soll-Temperatur um mehrere
> Grad wild rauf und runter.
Ich wünsche dem jeweiligen Programierer dann im ersten Augenblick 
immmer, dass er sich täglich mit solchen Geräten herumärgern muss.

Kurz danach fällt mir dann aber ein, dass es vielleicht tatsächlich so 
ist und er seinen Krempel deshalb so grauenhaft schlecht programmiert, 
weil er meint, es ginge sowieso nicht besser und es wäre somit gut 
genug, auch wenn der Wert ab und zu hin und her hüpft.

Ron-Hardy G. schrieb:
> IMHO gehen die ganzen Decoderroutinen doch von fest an den GPIO
> verschalteten Drehencoders aus
Das ist der einfachste Fall.
> und arbeiten dann interruptgesteuert
Das sind gern die schlechten Encoder-Auswertungen, die mit ganz neuen 
Encodern "ziemlich gut" funktionieren. Aber wehe, wenn der mal eine 
winzige Oxidschicht auf den Schaltkontakten hat und schon beim Anfassen 
"kratzt".

Wie gesagt: du brauchst für deine 40 Drehgeber genau 1 einzigen 
Interrupt, nämlich den Timerinterrupt. Und in diesem einen 
Timerinterrupt verarbeitest du die zuvor per DMA eingelesenen 40 Encoder 
mit ihren 120 Signalen, machst auf den 80 Drehgebersignalen die 
Geberauswertung und entprellst zudem die 40 Taster. Danach startest du 
das Einlesen der Schieberegister per DMA für den nächsten 
Timerinterrupt.

: Bearbeitet durch Moderator
von Falk B. (falk)


Lesenswert?

Ron-Hardy G. schrieb:
> ohne mir jetzt alles genau anzusehen: IMHO gehen die ganzen
> Decoderroutinen doch von fest an den GPIO verschalteten Drehencoders aus

Ja.

> und arbeiten dann interruptgesteuert

Jain, mit einem Timer-Interrupt, mit fester Frequenz.

> und dröseln das auf. Ich hab
> absolut keine Idee wie man da eine SPI-Schieberegisterkette eintütet.

Das ist trivial, siehe Bitmanipulation. Denn ob die Bits aus einem 
IO-Register oder einer normalen Variable im RAM kommen, ist egal.

> Gibt es da eine Referenzimplementation?

Mach's selber, dann lernst du was!

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Das schöne ist das er das auf einem STM32MP1 machen will. Das kann von 
"kein Problem", wenn die Auswertung im integrierten M4 erfolgen darf und 
an das Linux im A7 weitergegeben wird, bis "funktioniert überhaupt nicht 
zuverlässig", wenn die Auswertung auf dem A7 in $SCRIPTSPRACHE per sysfs 
GPIO-Bitbanging erfolgt, alle Zwischenstufen der Frustration erreichen 
:-)

Matthias

von Uwe K. (ukhl)


Lesenswert?

Wolfgang schrieb:
> Uwe K. schrieb:
>> Schaue dir mal die Funktion "encode" an. Die ist auch im Interrupt
>> stabil und prellfrei.
>
> Auch die Schalter in Drehencodern prellen. Bei Gray-Code stört das
> nicht.
> Was ist eine "prellfreie" Funktion?

Wenn es sich ausgeprellt hat, stimmt der Wert. Das ist schon richtig.
Beim Prellen kann es aber passieren, das zwischen zwei Werten hin- und 
hergesprungen wird. Mit der Funktion ist es unmöglich zwischen zwei 
Werten zu pendeln. Sozusagen "prellfrei". Und das in der höchsten 
Auflösung, wenn man will.

von Jobst M. (jobstens-de)


Lesenswert?

Uwe K. schrieb:
> Mit der Funktion ist es unmöglich zwischen zwei
> Werten zu pendeln.

Das ist aber u.U. ziemlich hinderlich ...

Gruß
Jobst

von Εrnst B. (ernst)


Angehängte Dateien:

Lesenswert?

Uwe K. schrieb:
> Mit der Funktion ist es unmöglich zwischen zwei
> Werten zu pendeln.

Dazu muss man nur den Drehgeber richtig anschließen. Die Ausgänge A und 
B sind nicht beliebig vertauschbar.
Bei der PeDa-Auswertung (Drehgeber: Signalauswertung) wackelt dann 
ggfs. das LSB im Zwischenspeicher, aber der "encode_read"-Rückgabewert 
bleibt stabil, und ändert sich nur exakt zwischen den Rastpunkten, nie 
"an" ihnen.

von Wolfgang (Gast)


Lesenswert?

Uwe K. schrieb:
> Mit der Funktion ist es unmöglich zwischen zwei
> Werten zu pendeln. Sozusagen "prellfrei". Und das in der höchsten
> Auflösung, wenn man will.

Pendelfreiheit erreicht man mit Filterung, gesteuert durch eine 
Hysterese zusammen mit Richtungsumkehr. Das bedeutet aber immer einen 
Verlust an Auflösung bei der Richtungsumkehr.
Bei rastenden Encodern mit voller Auflösung entsteht Pendelei (ggf. 
temperaturabhängig), wenn einer der Phasenumschaltpunkt zu dicht an der 
Rastposition liegt oder die Rastung ausgenudelt ist. Bei halber 
Auflösung kann Pendelei entstehen, wenn die Kanäle vertauscht sind.

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


Lesenswert?

Εrnst B. schrieb:
> und ändert sich nur exakt zwischen den Rastpunkten
Ich hatte da auch schon solche Encoder, die alles andere als "exakt" 
waren:
1
A      ____-----------------------______________________----------------
2
B     ______-----------------------______________________----------------
3
Rastung    ^                      ^                     ^
Wenn man bei dem eine Vierfachauswertung macht und den Knopf nur leicht 
berührt, dann gibt es auf einer der Leitungen einen Pegelwechsel.

: Bearbeitet durch Moderator
von Axel S. (a-za-z0-9)


Lesenswert?

Wolfgang schrieb:
> Bei rastenden Encodern mit voller Auflösung entsteht Pendelei (ggf.
> temperaturabhängig), wenn einer der Phasenumschaltpunkt zu dicht an der
> Rastposition liegt oder die Rastung ausgenudelt ist. Bei halber
> Auflösung kann Pendelei entstehen, wenn die Kanäle vertauscht sind.

Wenn der Encoder rastend ist, ist die mechanische Auflösung (vulgo: 
Rastpunkte) eigentlich immer gröber als die elektrische Auflösung. 
Manchmal halbe, meist sogar nur viertel Auflösung.

Oder anders gesprochen, eine Rastung alle 2 oder gar je 4 Schritte. Dann 
ist es immer möglich, den resultierenden Schaltpunkt so zu legen, daß 
der Encoder nicht klappert. Der Code im Artikel Drehgeber 
demonstriert das sehr schön.

von Wolfgang (Gast)


Lesenswert?

Axel S. schrieb:
> Wenn der Encoder rastend ist, ist die mechanische Auflösung (vulgo:
> Rastpunkte) eigentlich immer gröber als die elektrische Auflösung.

Das kann jeder Hersteller machen, wie er möchte. Es spricht prinzipiell 
nichts dagegen, die Rastung so fein bzw. die Kodierung so grob zu 
machen, dass die Rastung für beide Spuren jeweils gut zwischen den 
Schaltpunkten liegt, d.h. gleiche Auflösung für Rastung und Gray-Code. 
Ein Blick ins Datenblatt hilft.

Für die Anwendung ist es ziemlich sinnfrei, die Auflösung der Ausgabe 
anders zu wählen, als die der Rastung.

von Uwe K. (ukhl)


Lesenswert?

Εrnst B. schrieb:
> Uwe K. schrieb:
>> Mit der Funktion ist es unmöglich zwischen zwei
>> Werten zu pendeln.
>
> Dazu muss man nur den Drehgeber richtig anschließen. Die Ausgänge A und
> B sind nicht beliebig vertauschbar.
> Bei der PeDa-Auswertung (Drehgeber: Signalauswertung) wackelt dann
> ggfs. das LSB im Zwischenspeicher, aber der "encode_read"-Rückgabewert
> bleibt stabil, und ändert sich nur exakt zwischen den Rastpunkten, nie
> "an" ihnen.

Hört sich so an, dass man um jeden Preis, eine interessante Idee umgehen 
muss. Auf keinen Fall ausprobieren. Einfach schrecklich, wenn es 
funktioniert.

Falsch anschließen gibt es bei meiner Routine nicht. Funktioniert immer.

Selbstverständlich wählt man die Auflösung der Rastpunkte.
Es gibt aber auch welche ohne Rastung, dann kann man frei wählen.

Der Richtungswechsel wird ignoriert und es entsteht ein Impulsverlust. 
Aber nur bei der höchsten Auflösung. Und beim nächsten Richtungswechsel 
wird der Impuls wieder aufgeholt. Es bleibt positionsgenau. Dreht man 
rückwärst, fehlt ein Impuls. Beim vorwärts drehen passt es wieder. Das 
ist aber nur bei der höchsten Auflösung der Fall.

Niemand muss meine Routine benutzen. Ist alles freiwillig. Solle es 
jemand machen und Probleme entdecken, lasst es mich wissen.

von Uwe K. (ukhl)


Lesenswert?

Jobst M. schrieb:
> Uwe K. schrieb:
>> Mit der Funktion ist es unmöglich zwischen zwei
>> Werten zu pendeln.
>
> Das ist aber u.U. ziemlich hinderlich ...

Genauer gesagt ist es unmöglich zwischen zwei Codes zu pendeln. Bei 
Drehgebern mit Rastpunkt wechseln mindestes zwei Codes von Punkt zu 
Punkt. Da wird natürlich bei jedem Rastpunkt der Wert geändert.

von Jobst M. (jobstens-de)


Angehängte Dateien:

Lesenswert?

Uwe K. schrieb:
> Genauer gesagt ist es unmöglich zwischen zwei Codes zu pendeln. Bei
> Drehgebern mit Rastpunkt wechseln mindestes zwei Codes von Punkt zu
> Punkt. Da wird natürlich bei jedem Rastpunkt der Wert geändert.


Natürlich wertet man bei einem rastenden Drehgeber nur jene Pulse aus, 
welche sich nicht in der Rastung befinden. Bzw. gar nur eine Flanke auf 
der man rauf oder in der anderen Richtung eben runter zählt.

Es gibt aber nicht nur rastende Drehgeber mit 2 Codes pro Schitt, 
sondern zig verschiedene Sorten:
Einige geben alle 4 Flanken von Rastung zu Rastung aus, einige 2 
Flanken, davon einige beide Flanken außerhalb der Rastung, andere eine 
Flanke in der Rastung, eine außerhalb, und wieder andere nur eine Flanke 
zwischen den Rastpunkten. Bei Letzteren muss man also um 4 Rastschritte 
drehen, um alle 4 Flanken 1x zu sehen.
Neben den fertigen Drehgebern (Bourns, Alps, ...) gibt es außerdem auch 
Dinger, die Gerätehersteller direkt auf die Platine ätzen und mit 
Schleifkontakten versehen. Mit und ohne Rastung.

Wenn der Wert nun zwischen 2 Rastpunkten zappelt, ist mir das völlig 
Wumpe.  Dort ändert sich der Wert sowieso. Nur in der Rastung muss er 
stabil sein. Also dürfen dortige Flanken nicht beachtet werden. Wie ich 
schon geschrieben habe: Nur eine Flanke zwischen den Rastpunkten, die 
man beachtet.
Eine Filterfunktion habe ich die letzten 20 Jahre nicht vermisst.


Gruß
Jobst

von Wolfgang (Gast)


Angehängte Dateien:

Lesenswert?

Uwe K. schrieb:
> Bei Drehgebern mit Rastpunkt wechseln mindestes zwei Codes von Punkt zu
> Punkt.

Unsinn

von Wolfgang (Gast)


Angehängte Dateien:

Lesenswert?

Jobst M. schrieb:
> Nur in der Rastung muss er stabil sein. Also dürfen dortige Flanken nicht
> beachtet werden. Wie ich schon geschrieben habe: Nur eine Flanke zwischen
> den Rastpunkten, die man beachtet.

Die Panasonic EVE Encoder sind ein Beispiel. An beiden Flanken von 
Signal A muss der Pegel von Signal B ausgewertet werden, um die 
Dreh-/Zählrichtung zu bestimmen und entsprechen hoch oder runter zu 
zählen. An den Rastpunkten passiert in der SW nichts. Die Auflösung 
liegt hier bei 1/2 Zyklus pro Rastung.

Bei Vertauschung von A und B hätte man an den Rastpunkten instabile 
Verhältnisse mit Pendelei.

Εrnst B. schrieb:
> Dazu muss man nur den Drehgeber richtig anschließen. Die Ausgänge A und
> B sind nicht beliebig vertauschbar.

Genau bei den Panasonic EVE trifft das bspw. zu, bei den Bourns ECW oder 
den von Jobst gezeigten dagegen nicht.

Jobst M. schrieb:
> screenshot164.png

von Jobst M. (jobstens-de)


Lesenswert?

Also Augen auf beim Drehgeberkauf!

DIE Routine, die ohne weitere Parametrierung mit allen Drehgebern 
zusammen arbeitet, gibt es nicht!
Und das ist vermutlich auch der Grund dafür, dass viele damit immer 
wieder Probleme haben.

Gruß
Jobst

von Uwe K. (ukhl)


Lesenswert?

Wolfgang schrieb:
> Uwe K. schrieb:
>> Bei Drehgebern mit Rastpunkt wechseln mindestes zwei Codes von Punkt zu
>> Punkt.
>
> Unsinn

Unsinn = Ausnahmen bestätigen die Regel.

Ich bin erstaunt, dass sowas hergestellt wird (ECW D0009). Es wird wohl 
Anwendungen geben, bei denen 9 Zyklen pro Umdrehung von Vorteil sind...

Da ist das Auslassen des Richtungswechsels störend.

Der Bourns ECW ist ein hochwertiger Drehgeber, der nicht auf einem 
Schaltpunkt einrastet. Ansonsten müsste ich ihn als "unbrauchbar" 
einstufen.

Die empfohlene Beschaltung ist interessant. Debounce mit MC14490 und 5ms 
delay. Also eine 5ms Abtastrate zum Entprellen. Das ist recht lang für 
einen Drehgeber, aber notwendig bei einer maximalen Prellzeit von 5ms.

Beim allen ECW ohne Rastung, würde ich den Richtungswechsel auslassen, 
um ein "Flattern" zu vermeiden, wenn er auf einem Schaltpunkt stehen 
bleibt.

Eine Universallösung gibt es nicht. Parameter die ich sehe:

- Drehgeschwindigkeit: Eine höhere Abtastrate erhöht die 
Prellwahrscheinlichkeit. Hier sind andere Maßnahmen zum Entprellen 
erforderlich. Oder man nimmt ein leichtes Prellen in Kauf. Ignoriert man 
den Richtungswechsel, kann die Abtastrate beliebig erhöht werden, da das 
Prellen effektiv herausgefiltert wird.

- Halten auf einen Schaltpunkt: Hier sollte der Richtungswechsel, auf 
Schaltpunkt ebene, ignoriert werden. Das ist nicht zwingend der 
Rastpunkt. Damit wird das "Flattern" auf dem Schaltpunkt zuverlässig 
verhindert.

von Wolfgang (Gast)


Lesenswert?

Uwe K. schrieb:
> Unsinn = Ausnahmen bestätigen die Regel.

"mindestens" ist keine Regel, sondern ein harter Grenzwert ;-)

von Uwe K. (ukhl)


Lesenswert?

Wolfgang schrieb:
> Uwe K. schrieb:
>> Unsinn = Ausnahmen bestätigen die Regel.
>
> "mindestens" ist keine Regel, sondern ein harter Grenzwert ;-)

Ihr nehmt es aber sehr genau. Gut so.

Für mich war es überraschend, dass man sowas herstellt. Ich frage mich 
aber auch, wann man Drehgeber braucht mit einem Rastpunkt auf jedem 
Schaltwechsel. Zumal 36 Rastungen auch mit zwei Schaltwechseln 
problemlos machbar sind und einfacher zu handhaben.

Danke für die Info. Sehr interessant.

von Falk B. (falk)


Lesenswert?

Uwe K. schrieb:
> Für mich war es überraschend, dass man sowas herstellt. Ich frage mich
> aber auch, wann man Drehgeber braucht mit einem Rastpunkt auf jedem
> Schaltwechsel.

Wahrscheinlich gar nicht, aber es gibt genügend Produkte, bei denen die 
Entwickler nicht weiter denken als bis zur Mittagspause! Oder die 
Toleranzen der Produktion einfach nur grottenschlecht sind.

von Jobst M. (jobstens-de)


Lesenswert?

Uwe K. schrieb:
> Unsinn = Ausnahmen bestätigen die Regel.

Nein. Damit, dass es Ausnahmen gibt, ist Deine Aussage einfach nicht 
zutreffend.
"Ich brauche für meinen Wagen mindestens 15000€!" "Ich biete ihnen 
5000!" "Deal!"

Uwe K. schrieb:
> Ich bin erstaunt, dass sowas hergestellt wird (ECW D0009). Es wird wohl
> Anwendungen geben, bei denen 9 Zyklen pro Umdrehung von Vorteil sind...

Der hat 36 Rastpunkte. Irgendwann werden die Strukturen auch zu klein. 
um 18 oder gar 36 komplette Zyklen kostengünstig unterzubringen.


Uwe K. schrieb:
> Eine höhere Abtastrate erhöht die
> Prellwahrscheinlichkeit. Hier sind andere Maßnahmen zum Entprellen
> erforderlich.

Nein, es ist überflüssig!
In der nächsten Rastung passt der Wert wieder!
Es sei denn, Du drehst so schnell, dass das Nutzsignal kürzere Dauer als 
die Prellzeit hat. Da filterst Du dann aber auch nichts mehr.


Gruß
Jobst

von Jobst M. (jobstens-de)


Lesenswert?

Uwe K. schrieb:
> Ich frage mich
> aber auch, wann man Drehgeber braucht mit einem Rastpunkt auf jedem
> Schaltwechsel.

Es ist völlig irrelevant, wie viele Schaltwechsel stattfinden!

Gruß
Jobst

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Jobst M. schrieb:
> Irgendwann werden die Strukturen auch zu klein.
> um 18 oder gar 36 komplette Zyklen kostengünstig unterzubringen.

Das sag mal denjenigen, die auf einer Umdrehung 25000 Zyklen 
unterbringen. Kostengünstig sind die in Relation zur Leistung immer 
noch.
Es muss nicht alles immer billig, billig beim Buchhändler sein.

von Jobst M. (jobstens-de)


Lesenswert?

Wolfgang schrieb:
> Es muss nicht alles immer billig, billig beim Buchhändler sein.

Na, für einige Gerätehersteller schon.

Gruß
Jobst

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.