Forum: Mikrocontroller und Digitale Elektronik Mehrere Dreh-Encoder an einem Arduino / ADC


von Olf O. (Gast)


Angehängte Dateien:

Lesenswert?

Ich möchte mehrere Encoder mit Schalter über wenige Pins anschließen und 
deshalb alle Schaltfunktionen mit einem ADC einlesen vor dem ein 
Analog-Multiplexer hängt.

So wie ich Encoder kenne, sind deren Schalter (A + B + S) innen entweder 
offen oder geschlossen und haben einen gemeinsamen Anschluss. Die ziehen 
dann ein Signal z.B. auf GND, das man selber noch pullen muss.

Eigentlich müsste es aber auch gehen, jeden Schalter per Widerstand mit 
einem anderen Strom zu füttern und den Strom mit den Schaltern 
zusammenzuführen, um dann eine Spannung an einem seriellen R abfallen zu 
lassen, so wie bei einem R-2R-DAC. Ich habe es innen in rot hingemalt, 
wie ich denke, dass es geht.

Stimmt das so, oder habe ich einen Denkfehler?

Wie groß muss dann der R4 gegen GND sein?

Was passiert, wenn kein Schalter geschlossen ist? Muss noch ein 
Null-Pullup oben dran?

Ich hätte gerne eine Spannung von z.B. 0, wenn die Leitung defekt ist 
und eine kleine Spannung, wenn die Leitung zum DAC ok ist.

Dann ein Code von 1,2,3,4,5,6,7 wenn eine echte Kombination anliegt.

Z.B. denke ich an 0,4V pro digit -> 2,8V bei Vollausschlag für den ADC 
und dann nochmals 0,5V offset für "Leitung an".

von Olf O. (Gast)


Lesenswert?

Gerade noch einen Einfall gehabt: Das "Leitung an" wäre ja nur ein 
weiteres Bit mit einem 8k-Widerstand. Das ergäbe die Codes:

1 3 5 7 9 11 13 15

Bit 0 wird immer auf 1 gelegt. Damit kommt nur eine Null beim ADC an, 
wenn die kaputt ist.

Bit 1 und 2 wären die Encodersignale

Bit 3 der Druckschalter.

Ich tue mich aber schwer mit dem pull down gegen GND.

Wenn alle Schalter geschlossen sind, wirken (alle Parallel) etwa 500 
Ohm. Wie groß muss der dann sein, damit etwas Sinnvolles kommen kann?

Bei einem echten R2R-DAC kommt ja von jedem 0-Bit ein echter GND, der 
auch runter zieht. Muss ich das hier vlt komplett anders dimensionieren?

von student (Gast)


Lesenswert?

Mach mal einen ordentlichen Schaltplan, es ist für mich nicht 
ersichtlich, wo die ganzen Leitungen links und rechts hingehen sollen.

So wie ich das sehe, schließt du 3,3V und GND links direkt kurz.

von student (Gast)


Lesenswert?

Das R-2R Prinzip geht so ohne weiteres nicht, dafür brauchst du Taster, 
die zwischen GND und V_Ref umschalten können. Du kannst aber nur GND und 
floating.

Hier ist beschrieben, wie es mithilfe von einfachen Logikbausteinen 
dennoch geht: 
http://www.dieelektronikerseite.de/Lections/R2R-Netzwerke%20-%20Magische%20Wandlung.htm

von Olf O. (Gast)


Angehängte Dateien:

Lesenswert?

Mist, ja in der Tat!

Diese Verbindung ist ein Zeichenfehler und muss weg!

Also nochmal neu, diesmal sortiert und mit den bits.
(Die Reihenfolge ist jetzt verändert)

Mal angenommen, ich nehme einen 500 Ohm Widerstand, dann bewegen sich 
die Werte zwischen etwa 50% und 100%-x der Spannung. Wie kriege ich das 
mit mehr Auflösung hin?

student schrieb:
> Hier ist beschrieben, wie es mithilfe von einfachen Logikbausteinen
> dennoch geht:
Ja, hatte ich auch gedacht, aber ich würde gerne zusätzliche Schalter in 
Form von Chips vermeiden. Es sollte eigentlich nur der Encoder und die 
richtigen R rein.

von student (Gast)


Lesenswert?

Jens U. schrieb:
> Ja, hatte ich auch gedacht, aber ich würde gerne zusätzliche Schalter in
> Form von Chips vermeiden. Es sollte eigentlich nur der Encoder und die
> richtigen R rein.

Dann wirst du es IMO sehr schwer haben passende Widerstandswerte zu 
finden, damit sämtliche denkbare Kombinationen ausreichend Abstand zu 
einander haben.

von Achim H. (pluto25)


Lesenswert?

Wie wärs mit 1k zu Gnd und 10k als Pullup?

von Peter D. (peda)


Lesenswert?

Schalte alle Kontakte in Reihe mit je einem Widerstand parallel.
Dann hast Du eine binäre Stufung.
Dann noch einen Pullup, um die Spannung zu messen.

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


Lesenswert?

student schrieb:
> Dann wirst du es IMO sehr schwer haben passende Widerstandswerte zu
> finden, damit sämtliche denkbare Kombinationen ausreichend Abstand zu
> einander haben.
Im Besonderen, wenn mal irgendeiner der vielen daran beteiligten 
mechanischen Schalter ein wenig oxidiert oder verschmutzt ist. Oder, 
wenn gerade mal gesampelt wird, während ein Schalter gerade einen 
größeren Spannungsbereich umschaltet. BTDT, Fazit: das wird niemals 
langfristig zuverlässig laufen.


Ich würde die vielen Geber einfach an ein paar Schieberegister 
anschließen und per SPI einlesen. Das lässt sich ganz problemlos auch 
skalieren (z.B. 2 Geber pro 8-Bit SR). Und wenn mans schon hat: auch auf 
weitere Eingänge ausdehnen.

: Bearbeitet durch Moderator
von MaWin (Gast)


Lesenswert?

Jens U. schrieb:
> Ich möchte mehrere Encoder mit Schalter über wenige Pins anschließen und
> deshalb alle Schaltfunktionen mit einem ADC einlesen

Der Witz bei Encodern ist, das man sie in regelmässigen Abständen 
einliest, und daraus die Position bestimmt.
Nehmen wir an, dein Encoder liefer ohne gedrückten Knopf

0.5V wenn beide Kontakte offen sind
1V wenn A geschlossen ist
1.5V wenn B geschlossen ist
2V wenn A und B geschlossen sind

dann ergibt sich beim Drehen in eine Richtung:

0.5 1 2 1.5 0.5 1 2 1.5 0.5

Wären die zu regelmässigen Zeitpunkten ermittelten Analogwandlerwerte 
ca.

52 50 59 108 108 205 155 150 54 50 98 210 201 157 151 50

kann man Drehung und Position auch ermitteln.

Wenn aber die Analogwandlung genau in dem Moment erfolgt in dem die 
Kontakte wechseln, dann wird der Wandler einen Zwischenwert liefern

52 50 59 78 108 205 155 150 99 50 98 210 201 157 101 50

und schon ist die Kacke am damofen, 2 mal falsch gezählt selbst wenn 
Programm und Schaltung richtig funktionieren.

Mit dem Analogwandlermist ist eine Encoderauswertung prinzipiell nicht 
fehlerfrei durch führbar, und den Einfluss vom Taster haben wir noch gar 
nicht berücksichtigt (addiert 0.25V..)

Man könnte noch über Filterung der Analogwerte durch Mehrfachabtastung 
und 2 von 3 Auswahl nachdenken, aber man wird wesentlich langsamer 
dadurch als mit jeder anderen technischen Lösung.

Ich würde 1 extra uC nehmen, an den kommen x Encoder a 3 pins und er 
liefert seriell die Positionen.

von Johnny B. (johnnyb)


Lesenswert?

MaWin schrieb:
> Mit dem Analogwandlermist

Dem schliesse ich mich an; es so machen zu wollen ist völliger Mist. 
Besser einen uC mit mehr Pins verwenden und normal anschliessen.

von georg (Gast)


Lesenswert?

Jede Schaltung zum Einlesen von Drehencodern hat eine obere 
Grenzfrequenz. Verwendet man statt Logik-Eingängen ADC-Wandlung, 
womöglich noch mehrfach, so liegt die um wahrscheinlich 2 oder mehr 
Grössenordnungen niedriger. Wenn man dazu noch "mehrere" Encoder auf 
diese (blödsinnige) Art anschliesst, darf man wahrscheinlich bloss noch 
ganz ganz vorsichtig und schrittweise am Encoder drehen.

Georg

von Peter D. (peda)


Lesenswert?

Die Gefahr ist groß, daß man mit dem ADC falsche Zwischenwerte einliest, 
die Leitungskapazität muß sich ja umladen. Man muß also noch in SW 
filtern, was zusätzlich Zeit kostet.
Nimmt man dagegen eine UART als SPI, lassen sich pro Interrupt 16 Bit 
(2* 74HC165) = 5 Drehgeber zugleich einlesen.

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


Lesenswert?

Jens U. schrieb:
> Ich möchte mehrere Encoder mit Schalter über wenige Pins anschließen und
> deshalb alle Schaltfunktionen mit einem ADC einlesen vor dem ein
> Analog-Multiplexer hängt.

Das ist eine vollkommen blödsinnige Idee. Insbesondere das mit dem 
Analog-Multiplexer.

Ein Encoder liefert Digitalsignale - wenn überhaupt, dann würde man 
zwischen mehreren Encodern mit einem digitalen Multiplexer umschalten. 
Andererseits braucht man ja nur 3 digitale Eingänge pro Encoder. Die 
kann man mit den herkömmlichen Methoden wie Schieberegistern oder 
IO-Expandern (an SPI oder I2C oder ...) realisieren.

Siehe: Porterweiterung mit SPI oder auch 
AVR-Tutorial: Schieberegister

PS: noch eine Variante: jedem Encoder einen ATTiny zuordnen, der den 
Encoder auswertet und seinerseits als z.B. I²C Slave arbeitet. Dann 
kannst du bis zu 127 solche Einheiten an einen I²C Bus hängen. Vor allem 
hast du so keine Probleme mehr mit dem Timing. IIRC hatte Mino mal sowas 
vorgestellt. Genau, hier wars: 
http://mino-elektronik.de/mt12_iic/mt12_iic.htm (runterscrollen)

: Bearbeitet durch User
von Olf (Gast)


Lesenswert?

Peter D. schrieb:
> Schalte alle Kontakte in Reihe mit je einem Widerstand parallel.
> Dann hast Du eine binäre Stufung.
Das geht technisch nicht, weil die Schalter intern verbunden sind. 
Darüber hatte ich bereits nachgedacht.

Axel S. schrieb:
> braucht man ja nur 3 digitale Eingänge pro Encoder.
Ja, "nur" 3. Aber es sind mehrere Encoder, z.B. 16, macht 48 Kanäle.

Lothar M. schrieb:
> Ich würde die vielen Geber einfach an ein paar Schieberegister
> anschließen und per SPI einlesen.
Dann brauche ich aber 3 SR-Eingänge je Encoder. Das wären bei den 48 
Kanälen immerhin 6 Bausteine. Würde ich gerne vermeiden. Ein 16er 
Multiplexer bekomme ich noch als Platine über EBAY zu 1,- der Rest ist 
Luftverdrahtung im Gehäuse.


MaWin schrieb:
> Wenn aber die Analogwandlung genau in dem Moment erfolgt in dem die
> Kontakte wechseln, dann wird der Wandler einen Zwischenwert liefern
Das Problem hat man mit digitalen Pins aber auch. Die Einschwingzeit 
bleibt gleich. Es ist klar, dass ich jeden Analogwert eine ausreichende 
Zeit sampeln muss, um einen stabilen Wert zu erkennen. Das ist bei 
digital ausgelesenene Schaltern aber dasselbe. Auch die können Prellen.


georg schrieb:
> Jede Schaltung zum Einlesen von Drehencodern hat eine obere
> Grenzfrequenz.
Ja, so kann man das rechnen. Ich rechne mit einem maximalen Prellen von 
10ms und taste daher mit z.B. 1600 Hz alle Einheiten ab. Das sind alle 
1ms ein neuer Wert für jeden Encoder.

> Verwendet man statt Logik-Eingängen ADC-Wandlung,
> womöglich noch mehrfach, so liegt die um wahrscheinlich 2 oder mehr
> Grössenordnungen niedriger.
Das sehe ich nicht so, weil das Prellen eines Encoders zwar alle 3 
Schalter betreffen könnte, diese aber gleichzeitig Prellen und insgesamt 
genau so schnell damit fertig sind. Ich lese nur mit einem Rutsch alle 3 
Werte gleichzeitig.

Die Werte selber sind mit einem RC-Glied gedämpft. Meines Erachtens muss 
das genau so ausgelegt werden, wie bei einem normalen Decoder-Schalter 
auch.

Die Drehgeschwindigkeit schätze ich mit maximal 10/ms ab. Das müsste 
reichen, um Pausen zwischen dem Prellen zu erkennen.

von MaWin (Gast)


Lesenswert?

Olf schrieb:
> Das Problem hat man mit digitalen Pins aber auch. Die Einschwingzeit
> bleibt gleich. Es ist klar, dass ich jeden Analogwert eine ausreichende
> Zeit sampeln muss, um einen stabilen Wert zu erkennen. Das ist bei
> digital ausgelesenene Schaltern aber dasselbe. Auch die können Prellen

Du hast offenbar NICHT DAS GERINGSTE von Drehencodern verstanden.
Der Witz der digitalen Auswertung (ja, die funktioniert sehr wohl 
substantiell anders als deine analoge weil bei analog eine 
Realitätsveränderung "nicht Zustand A oder B sondern beim Übergang von A 
nach B zufällig Zustand C erkannt" erfolgt während digital nur entweder 
A oder B liefert beim prellen, nicht dss niemals real vorliegende C) 
liegt gerade darin, dass man sich um prellende Kontakte nicht kümmern 
muss, die filtert die Decoderroutine von selbst weg.

von Olf (Gast)


Angehängte Dateien:

Lesenswert?

Aber genau so, kann sie doch auch jeden anderen falschen Zustand 
wegfiltern?

Ich habe das jetzt mit 100,200,400 und 800 Ohm vorgesehen und einen pull 
von 400. Das ergibt die Abstände in der Tabelle:

Bei Sprüngen gibt es falsche Zwischenzustände, die man wegfiltern kann.

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


Lesenswert?

Olf schrieb:
> Axel S. schrieb:
>> braucht man ja nur 3 digitale Eingänge pro Encoder.
> Ja, "nur" 3. Aber es sind mehrere Encoder, z.B. 16, macht 48 Kanäle.

Ja. Und? 6 Schieberegister zu 8 Bit, hast du deine 48 Eingänge. Die 
Frage ist eher, ob dein Arduino die schnell genug abgefragt und 
ausgewertet kriegt. Ein vernünftiges Abtastintervall für manuell 
bediente Drehgeber wäre 1ms. Da muß man schon mit Hardware-SPI ran und 
kann nicht mit digitalWrite() und digitalRead() rummachen.

Am weitesten skaliert die Variante mit einem dedizierten µC pro Encoder. 
Kann man statt mit einem ATTiny25 pro einen Encoder auch mit einem 
größeren µC wie z.B. ATTiny261 (16 I/O) für jeweils 4 Encoder machen.

Was soll es denn für ein Crackpotmist werden? Mit 16 Encodern an einem 
Arduino?

von Olf (Gast)


Angehängte Dateien:

Lesenswert?

Axel S. schrieb:
> m weitesten skaliert die Variante mit einem dedizierten µC pro Encoder.
Ja, ein uc je Decoder. Das klingt nach Kostenoptimierung :-)

Axel S. schrieb:
> Was soll es denn für ein Crackpotmist werden? Mit 16 Encodern an einem
> Arduino?
Eine einfache und preisgünstige Lösung, um 16 Parameter einzustellen. Es 
muss ja nur langsam von Statten gehen.

Ich habe es einmal simuliert:

von Volker B. (Firma: L-E-A) (vobs)


Lesenswert?

Warum multiplext Du die Encoder nicht einfach?

Alle A-Kontakte gehen jeweils über eine Diode gemeinsam auf einen 
MCU-Eingangspin, ebenso alle B-Kontakte und einer der Schalter-Kontakte.
Die Dioden sind so gepolt, dass die Encoder-Signale den MCU-Pin auf low 
ziehen können. Jeder der drei Busse bekommt einen eigenen 
Pull-Up-Widerstand.

Der andere Schalterkontakt und der Common-Pin C eines jeden Encoders 
wird dann jeweils an einen eigenen MCU-Ausgangspin geschaltet.

Wenn Du einen der Encoder auslesen willst, schaltest Du den zugehörigen 
MCU-Ausgang auf low, während die der anderen Encoder high bleiben.

Um n Encoder auszuwerten, werden also 3 + n binäre Pins der MCU 
benötigt.
Durch Einsatz eines Binärdecoders, wie den 74xx138, kann die Zahl der 
MCU-Pins reduziert werden.

Grüßle
Volker

von Olf (Gast)


Lesenswert?

Volker B. schrieb:
> Wenn Du einen der Encoder auslesen willst, schaltest Du den zugehörigen
> MCU-Ausgang auf low, während die der anderen Encoder high bleiben.

Erzeugt sehr viel EMV auf den Leitungen hin zum Decoder und soll 
vermieden werden.

von Volker B. (Firma: L-E-A) (vobs)


Lesenswert?

Olf schrieb:

> Erzeugt sehr viel EMV auf den Leitungen hin zum Decoder und soll
> vermieden werden.

Juhu, endlich wieder die hier so geliebte Salamitaktik!

Nun ja, einen Tod wirst Du wohl sterben müssen -- dann viel Erfolg!

Volker

von Einer K. (Gast)


Lesenswert?

Olf schrieb:
> Erzeugt sehr viel EMV auf den Leitungen hin zum Decoder und soll
> vermieden werden.

Wo ist das Problem wenn viel Elektromagnetischeverträglichkeit erzeugt 
wird?

? ? ?

von Olf (Gast)


Angehängte Dateien:

Lesenswert?

Volker B. schrieb:
> Juhu, endlich wieder die hier so geliebte Salamitaktik!

Ich weiß schon, warum ich mir diese Lösung überlegt habe und nicht 
normales Multiplexing oder Charlyplexing oder was es alles gibt.

Die Auflösung des Wandler müsste reichen, auch bei Variation der 
Widerstände um 5% oder Verschmutzung. Hier eine Simulation mit Tiefpass: 
Im schlimmsten Fall wird eben bei gedrückter Taste eine Drehung nicht 
verstanden.

von c-hater (Gast)


Lesenswert?

Olf schrieb:

> Eine einfache und preisgünstige Lösung, um 16 Parameter einzustellen.

Du wirst schon noch merken, wie einfach das ist. Wenn du den Erwachsenen 
nicht glauben magst, dann bau' den Scheiß doch einfach. Warum fragst du 
hier erst dumm rum, wenn du sowieso alles besser weißt?

> Es
> muss ja nur langsam von Statten gehen.

Nö, es muss zuverlässig funktionieren, sonst ist es sinnlos.

> Ich habe es einmal simuliert:

Naja, das Blöde an Simulationen ist, dass sie immer nur genau die 
Aspekte der bitterbösen Realität abbilden, die der Schöpfer der 
Simulation der Simulation zumuten mochte.
Ich bin sicher, du hast nicht mal die Exemplarstreuungen der Widerstände 
berücksichtigt, sonst sähe der Graph schon etwas weniger nett aus. Und 
wenn man das mal mit ein paar Stufen (=Kontakten) mehr durchexerziert, 
dann sieht er garnicht mehr nett aus, sondern erwartungsgemäß: 
unbrauchbar...

von Olf (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> Wo ist das Problem wenn viel Elektromagnetischeverträglichkeit erzeugt
> wird?

Spassvogel - gemeint ist natürlich "viele EMV-Probleme". Oder viel EMI 
von mir aus. Die Leitungen sind recht lang und ich will keinen riesigen 
Kabelbaum. Die angedachten Muliplexer haben TriStateausgänge und 
erlauben es, die analogen Leitungen hart zusammenzuschalten. 
Wahrscheinlich nehme ich aber noch 1kOhm seriell rein.

Die MUX brauchen 4 Leitungen, die ich mit einem SR machen kann. Ich 
brauche also nur 2 Digitale Outputs.

von Tippgeber (Gast)


Lesenswert?

Olf schrieb:
>> m weitesten skaliert die Variante mit einem dedizierten µC pro Encoder.
> Ja, ein uc je Decoder. Das klingt nach Kostenoptimierung :-)

Nimm einen STM8S003 pro Encoder, die kosten weniger als 50 ct pro Stück, 
machen die Encodersache perfekt mit geringem (Software)Aufwand. 
Einsammeln der Werte dann mit i2c oder RS485 oder ...

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


Lesenswert?

Olf schrieb:
> Ich weiß schon, warum ich mir diese Lösung überlegt habe
Zieh es durch. Sei von deiner Lösung überzeugt und lass dich nicht durch 
die ganzen demotivierenden Argumente vom Kurs abbringen.

Olf schrieb:
> Ich brauche also nur 2 Digitale Outputs.
Bring einfach mal genau 1 Encoder ganz ohne Multiplexer auf diese Art 
zuverlässig ans Laufen (und zwar nicht nur in der wie geleckt 
hingemalten Simulation mit echt optimalen Abtastzeitpunkten). Dann 
kannst du weiter an deiner Schaltung basteln.

Olf schrieb:
> Bei Sprüngen gibt es falsche Zwischenzustände, die man wegfiltern kann.
Und dann waren da noch die bereits erwähnten Übergangswiderstände, die 
im Laufe der Zeit variieren...

Olf schrieb:
> auch bei Variation der Widerstände um 5% oder Verschmutzung.
So sei es!

von Tippgeber (Gast)


Lesenswert?

Die Encoder-Geschichte beim STM8S003 besteht darin, A und B an die 
Timer-Eingänge anzuschließen, den Timer-Modus und den Reload- sowie den 
Startwert einzustellen und den Timer zu starten. Ab diesem Moment steht 
ohne jede Prozessorlast jederzeit der fertige Wert im Timer-Register. 
Das sind in C vielleicht 10 Zeilen. Etwas Klimbim, um die Werte zu 
übertragen dazu.

Wenn man einen Rückkanal (bei i2c z.B.) einplant, kann man die Parameter 
(Anschlag, Startwert, usw.) auch noch einstellbar machen. Die meiste 
Zeit kann der Controller schlafen, spart auch noch Energie.

von Peter D. (peda)


Lesenswert?

Olf schrieb:
> Das geht technisch nicht, weil die Schalter intern verbunden sind.
> Darüber hatte ich bereits nachgedacht.

Natürlich kann man alle 3 Kontakte in Reihe schalten. Der Drehgeber hat 
ja 5 Anschlüsse.

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


Lesenswert?

Peter D. schrieb:
> Natürlich kann man alle 3 Kontakte in Reihe schalten. Der Drehgeber hat
> ja 5 Anschlüsse.
Man spart sich sogar 1 Brücke, weil die schon da ist... ?

von MaWin (Gast)


Lesenswert?

Olf schrieb:
> Die Leitungen sind recht lang und ich will keinen riesigen Kabelbaum.
> Die angedachten Muliplexer haben TriStateausgänge und erlauben es, die
> analogen Leitungen hart zusammenzuschalten

Du willst Analogsignale, bei denen es auf 0.25V ankommt, 5 Meter durch 
die EMV Walachei führen und glaubst am Ende noch was sinnvolles 
auswerten zu können.

Na dann viel Spass.

von Olf (Gast)


Lesenswert?

Peter D. schrieb:
> Natürlich kann man alle 3 Kontakte in Reihe schalten. Der Drehgeber hat
> ja 5 Anschlüsse.

Da blicke ich nicht durch. Wie sähe die Schaltung dann aus?

von Theor (Gast)


Lesenswert?

Olf schrieb:
> Peter D. schrieb:
>> Natürlich kann man alle 3 Kontakte in Reihe schalten. Der Drehgeber hat
>> ja 5 Anschlüsse.
>
> Da blicke ich nicht durch. Wie sähe die Schaltung dann aus?


Zwischen den Kontakten A und B sind schon zwei Schalter in Reihe.

Entweder an A oder B dann einen der S-Anschlüsse. (Den anderen nenne ich 
mal S').

Widerstände dann über A und C, über B und C und über S und S'.

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


Lesenswert?

Olf schrieb:
> Axel S. schrieb:
>> m weitesten skaliert die Variante mit einem dedizierten µC pro Encoder.
> Ja, ein uc je Decoder. Das klingt nach Kostenoptimierung :-)

Ich schrieb nicht von Kostenoptimierung, sondern von Skalierbarkeit
Bring doch einfach mal irgendwie deine 16 Encoder an einen Arduino. 
Zuverlässig und ohne daß du beim schnellen Drehen Schritte verlierst. 
Gerne auch mit deiner ADC Methode. Ach, geht nicht? Sowas aber auch...


>> Was soll es denn für ein Crackpotmist werden? Mit 16 Encodern an einem
>> Arduino?

> Eine einfache und preisgünstige Lösung, um 16 Parameter einzustellen. Es
> muss ja nur langsam von Statten gehen.

16 Encoder sind weder einfach noch preisgünstig. Denn wenn es einfach 
wäre, dann hättest du es längst am Laufen und müßtest hier nicht fragen. 
Ansonsten machen real existierende Geräte die Einstellung von 16 
Parametern nicht mit 16 einzelnen Encodern, sondern einem Display, ein 
paar Tasten für eine Menüstruktur und einem Drehgeber. Man wählt 
erst den Parameter aus, den man verändern will und dreht dann am 
Rad.

Praktisches Beispiel: mein Backofen. Eine Taste "Menü", zwei Tasten für 
"voriger" und "nächster" Parameter und dann ein Drehknopf. 
Funktioniert 1A und ist intuitiv bedienbar. Und das obwohl es real meist 
nur 3 Parameter sind: Betriebsart, Temperatur und Zeit. Drei Drehknöpfe 
wären sogar weniger Bedienelemente gewesen. Aber eben nicht unbedingt 
leichter zu bedienen. Oder einfacher (billiger) zu realisieren.

von Olf (Gast)


Angehängte Dateien:

Lesenswert?

Die müssten dann aber dennoch im Binärmuster sein, denke ich? - ok, das 
bringt die erhöhte Auflösung. Gute Idee! Danke!

Dann brauche ich aber noch die Spannungsanschlüsse. Meines Erachtens 
müsste das so sein: (?)

von Olf (Gast)


Lesenswert?

Axel S. schrieb:
> Ach, geht nicht? Sowas aber auch...
Polemik ist kein guter Gesprächston für Kritik oder Hilfestellung.

> 16 Encoder sind weder einfach noch preisgünstig.
Die Encoder kosten im Einkauf 70 Cent das Stück. Es sollte möglich sein, 
diese auszuwerten, ohne noch extra einen teuren Controller beizustellen. 
Das verdoppelt doch die Kosten.

>sondern einem Display, ein
>paar Tasten für eine Menüstruktur und einem Drehgeber.
Das System hat kein Display. Alle Parameter sollen direkt einstellbar 
sein, ohne Menü oder Umschaltung. Die Rückmeldung erfolgt über 
Systemreaktionen wie bei Potentiometern. Dort ist nur ein 
gefühlsmässiges "mehr" oder "weniger" gefragt. Gucken und Drehen 
sozusagen. Zahlen braucht keiner. Daher gibt es auch keine Skalierung.

Es muss aber jeder Parameter sofort angreifbar sein. So wie Analog eben. 
Oder um beim Beispiel des Elektroherds zu bleiben: Jeder Platte hat 
einen eigenen Regler.

Man hätte auch ein Aufwärts-Abwärts-Tastensystem nehmen können, ok. Aber 
das wären auch 3 Tasten für Mehr-Weniger und Einbuchen.

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


Lesenswert?

Olf schrieb:
> Es sollte möglich sein, diese auszuwerten, ohne noch extra einen teuren
> Controller beizustellen. Das verdoppelt doch die Kosten.
Dann nimmt man einen Controller, der genug Anschlüsse hat.

Olf schrieb:
> Gute Idee!
Die Idee "Drehgeber über Analogeingang einlesen" an sich ist immer noch 
gleich schlecht. Nur die Ausführung ist wesentlich schlauer.

> Dann brauche ich aber noch die Spannungsanschlüsse.
Wo brauchst du da "Spannungsanschlüsse"? Wenn ich diese krude Schaltung 
mal nicht so anschaulich grafisch, sondern als echten Schaltplan 
zeichne, dann finde ich leicht eine Möglichkeit, den Drehgeber mit 
"seinen" Widerständen mit zwei Drähten zum ADC zu führen.
1
  Vcc ------------------------------------------o------.
2
                       Draht 1                  |      | A
3
                                                -      |
4
                                          R1   | |       / S1
5
                                               | |      / 
6
                                                -      |
7
                                                |      |
8
                                                o------o C
9
                                                |      |
10
                                                -      |
11
                                          R2   | |       / S2
12
                                               | |      / 
13
                                                -      |
14
                                                |      |
15
                                                o------o B+S
16
                                                |      |
17
                                                -      |
18
                                          R3   | |       / S3
19
                                               | |      / 
20
                                                -      |
21
                         Draht 2                |      | S
22
 ADC ----o--------------------------------------o------' 
23
         |
24
         -
25
        | | R4                                            
26
        | |                                             
27
         -                                             
28
         |
29
 GND ----'
Da kann man sogar noch den Draht 1 auch an alle andere Drehgeber 
weiterführen und muss somit nur 17 Drähte zur Hauptplatine verkabeln.
Trotzdem bleibt das Verfahren an sich Murks. Probiers aus.

Olf schrieb:
> Die Encoder kosten im Einkauf 70 Cent das Stück. Es sollte möglich sein,
> diese auszuwerten, ohne noch extra einen teuren Controller beizustellen.
> Das verdoppelt doch die Kosten.
Deshalb schreibe ich zum wiederholten Mal: nimm die Schieberegister. Die 
bekommst du in Einzelstückzahlen nach ein wenig Recherche für lausige 17 
Cent:
https://www.elmotex.de/halbleiter/digitale-ics/74hct-smd/74hct165-smd.php
Und 1 Schieberegister reicht für mehr als 2 Drehgeber.

> Die Encoder kosten im Einkauf 70 Cent das Stück.
> Das verdoppelt doch die Kosten.
Dir geht es bei dieser kruden Aktion also letztlich echt um das 
Einsparen von 16*70 Cent = 11 Euro?
Sei dir sicher: das Fluchen der Anwender und die Zeit, die du brauchst, 
um die zu beruhigen und das Ganze hinzumurksen wird mehr kosten.
Selbst wenn du die bisher in das Gebastel investierte Zeit im Supermarkt 
als Regaleinsortierer verbracht hättest, um die 11 Euro anderweitig zu 
"verdienen", hättest du jetzt schon Gewinn gemacht.

Olf schrieb:
> Die Rückmeldung erfolgt über Systemreaktionen wie bei Potentiometern.
Und was genau spricht dann dagegen, tatsächlich auch Potentiometer 
einzusetzen? Die Taster kannst du bei so einem Bedienkonzept ja 
eigentlich nicht brauchen.

: Bearbeitet durch Moderator
von Joachim B. (jar)


Lesenswert?

Lothar M. schrieb:
> Und dann waren da noch die bereits erwähnten Übergangswiderstände, die
> im Laufe der Zeit variieren...

so wie in meiner Lenkrad FB vom Radio, 1 Bit an ADC mit R Matrix, da 
lobe ich doch den Vorschlag mit mehr kleinen AVR Tiny85 o.ä. zur 
Auswertung!

: Bearbeitet durch User
von Johnny B. (johnnyb)


Angehängte Dateien:

Lesenswert?

Axel S. schrieb:
> paar Tasten für eine Menüstruktur und einem Drehgeber. Man wählt
> erst den Parameter aus, den man verändern will und dreht dann am
> Rad.

Es kommt auf die Anwendung an. Für das meiste stimmt schon was Du sagst, 
es gibt aber auch Anwendungen, wo man Dinge direkt einstellen können 
muss ohne erst in einem Menu was umzuschalten. z.B. im Auto könnte man 
zum lenken oder zur lautstärkeeinstellung des Multimediacenters 
denselben Eingabeknopf verwenden. Es ist aber praktischer, wenn man zum 
lenken oder zur lautstärkeeinstellung nicht erst was umschalten muss, 
sondern beides quasi gleichzeitig bedienen kann.
Bei Videokameras ist es auch deutlich; in Consumerkameras muss man sich 
durch zig Menus hangeln um alles einstellen zu können und bei 
professionellen Videokameras für Direktübertragungen hat jede 
Einstellung einen separaten Drehknopf, dass ein geübter Anwender sehr 
schnell etwas spezifisches ändern kann.

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


Lesenswert?

Olf schrieb:
> Axel S. schrieb:
>> Ach, geht nicht? Sowas aber auch...
> Polemik ist kein guter Gesprächston für Kritik oder Hilfestellung.

Du bist so offensichtlich kritik- und beratungsresistent, daß mir das 
mittlerweile vollkommen egal ist.

>> 16 Encoder sind weder einfach noch preisgünstig.
> Die Encoder kosten im Einkauf 70 Cent das Stück. Es sollte möglich sein,
> diese auszuwerten, ohne noch extra einen teuren Controller beizustellen.

Hörst du dir eigentlich selber zu? Oder uns? Wir erklären dir die ganze 
Zeit, wie man das richtig machen kann. Da ist nichts mit "sollte möglich 
sein". Es geht. Definitiv. OK, mit deinem Arduino nicht besonders gut. 
Mach halt nicht so blödsinnige Vorgaben. Normalerweise wählt man auch 
die Hardware passend zur Aufgabe aus, nicht umgekehrt.

Eine weitere Variante wurde übrigens noch nicht erwähnt. 16 Encoder a 3 
Kontakte sind im Prinzip 48 Tasten. Die könnte man auch als Matrix 
verschalten. Z.B. mit 6 + 8 I/Os und 48 Entkopplungsdioden.

>>sondern einem Display, ein
>>paar Tasten für eine Menüstruktur und einem Drehgeber.
> Das System hat kein Display. Alle Parameter sollen direkt einstellbar
> sein, ohne Menü oder Umschaltung.

Dann nimmt man aber eher Potis als Encoder. Da kann man dann auch mit 
einem Blick sehen, wo es gerade steht. Und man fühlt, wenn man den 
Anschlag erreicht hat.

Encoder ohne Rückmeldung sind selten zweckmäßig. ich habe z.B. die 
Lautstärke-Einstellung an meinem Vorverstärker so gemacht. Aber schon 
für die Balance-Einstellung habe ich ein Poti. Mit Strich auf dem Knopf.


Johnny B. schrieb:
> Es kommt auf die Anwendung an. Für das meiste stimmt schon was Du sagst,
> es gibt aber auch Anwendungen, wo man Dinge direkt einstellen können
> muss ohne erst in einem Menu was umzuschalten.

Dann nimmt man aber eher Potis als Encoder. Da kann man dann auch mit 
einem Blick sehen, wo es gerade steht. Und man fühlt, wenn man den 
Anschlag erreicht hat.

Wiederhole ich mich gerade?

Johnny B. schrieb:
> Bei Videokameras ist es auch deutlich; in Consumerkameras muss man sich
> durch zig Menus hangeln um alles einstellen zu können und bei
> professionellen Videokameras für Direktübertragungen hat jede
> Einstellung einen separaten Drehknopf, dass ein geübter Anwender sehr
> schnell etwas spezifisches ändern kann.

Das ist ein gutes Beispiel. Für meinen Standpunkt. Auch meine 
semi-professionelle DSLR hat mehrere Drehgeber und viele Knöpfchen.
Aber: die gerade eingestellten Werte werden im Sucher angezeigt. Sie 
wäre vollkommen unbedienbar ohne diese Anzeigen.

: Bearbeitet durch User
von georg (Gast)


Lesenswert?

Olf schrieb:
> Zahlen braucht keiner. Daher gibt es auch keine Skalierung.
>
> Es muss aber jeder Parameter sofort angreifbar sein.

Da hast du einen massiven Denkfehler. Encoder haben keinen aktuellen 
Wert, sie dienen nur zum Auf- oder Abwärtszählen. Ohne einen Zählwert zu 
speichern gibt es nichts "anzugreifen", insbesondere nach dem 
Einschalten gibt es keinen eingestellten Wert, bzw. er ist Null, wenn 
der Konstrukteur bei Verstand ist. Das ist hier wohl nicht gegeben.

Georg

von Olf (Gast)


Lesenswert?

Lothar M. schrieb:
> Wo brauchst du da "Spannungsanschlüsse"?
Na, die die du nun selber auch eingezeichnet hast. Allerdings verhilft 
diese serielle Verschaltung keineswegs zu einem linearen Verhalten, wie 
ich durch einen Test sehen musste. Was ist nun der Vorteil?


Lothar M. schrieb:
>> Die Encoder kosten im Einkauf 70 Cent das Stück.
>> Das verdoppelt doch die Kosten.
> Dir geht es bei dieser kruden Aktion also letztlich echt um das
> Einsparen von 16*70 Cent = 11 Euro?
Nein. Die 70 Cent sind die Encoder. Ein zusätzlicher MCU pro Kanal 
verteuert das signifikant.


Lothar M. schrieb:
> Und was genau spricht dann dagegen, tatsächlich auch Potentiometer
> einzusetzen?
Die Tatsache, dass die Steuereinheit für unterschiedliche Kanäle 
eingesetzt werden soll, die umgeschaltet werden sollen. Die aktuellen 
Werte der Paramter würden aber augenblicklich springen, wenn man ihnen 
die Werte gemäß Potistellung zuweisen würde. Du darfst schon annehmen, 
dass ich weiß, wozu ich Encoder nehme.

von Olf (Gast)


Lesenswert?

georg schrieb:
> Da hast du einen massiven Denkfehler. Encoder haben keinen aktuellen
> Wert, sie dienen nur zum Auf- oder Abwärtszählen. Ohne einen Zählwert zu
> speichern gibt es nichts "anzugreifen", insbesondere nach dem
> Einschalten gibt es keinen eingestellten Wert, bzw. er ist Null, wenn
> der Konstrukteur bei Verstand ist. Das ist hier wohl nicht gegeben.
Aber exakt das ist doch der Vorteil. Daher benutze ich sie ja.

Axel S. schrieb:
> Encoder ohne Rückmeldung sind selten zweckmäßig.
Die Rückmeldung ist ja da. Aber sie ist in Form eines komplexen 
Maschinenverhaltens da und nicht als reiner Zählwert. Einen 
PID-Vorgabewert von 0,052 kann niemand zuordnen. Er sagt dem Anwender 
nichts aus.

Er kann natürlich ausgelesen und angezeigt werden, aber nicht an der 
Controllereinheit.

von Olf (Gast)


Lesenswert?

Johnny B. schrieb:
> Bei Videokameras ist es auch deutlich;

Danke für dieses Beispiel. Ich finde es bemerkenswert, dass die 
Ingenieure hier im Forum immer erst einmal die Aufgabenstellung 
kritisieren, obwohl sie die Randbedingungen nicht kennen. Meine Frage 
war nicht:

Wie stelle ich bis zu 16 Parameter von 8 Maschinenregelungen ein und 
kann ich dafür Potis nehmen oder einen SuperController mit einem 
Drehregleer und einem 17fach verschachtelten Menü - sondern die Lösung 
ist vorgegeben: 16 inkrmentale Drehregler möglichst einfach und 
kostengünstig an einen Micorcontroller anbinden und dies unter Nutzung 
der vorhandenen Hardware. Also nicht noch ein Diodengrab oder neue 
Schieberegister oder noch extra Controller oder noch einen Raspeberry 
dazwischen oder möglich noch ein tablet mit USB-Interface und 
Multi-Kulti-Anzeige.

von Peter D. (peda)


Lesenswert?

Olf schrieb:
> Allerdings verhilft
> diese serielle Verschaltung keineswegs zu einem linearen Verhalten, wie
> ich durch einen Test sehen musste. Was ist nun der Vorteil?

Wenn R4 sehr groß ist (100k) ist das schon recht linear. Oder man nimmt 
eine Konstantstromquelle.

von c-hater (Gast)


Lesenswert?

Olf schrieb:

> Lothar M. schrieb:
>>> Die Encoder kosten im Einkauf 70 Cent das Stück.
>>> Das verdoppelt doch die Kosten.
>> Dir geht es bei dieser kruden Aktion also letztlich echt um das
>> Einsparen von 16*70 Cent = 11 Euro?
> Nein. Die 70 Cent sind die Encoder. Ein zusätzlicher MCU pro Kanal
> verteuert das signifikant.

Und wenn du nun einfach nur einen µC damit beschäftigst? Einen Mega88 
kannst du bei Reichelt derzeit für 99 Cent kaufen. Der hat erstens genug 
Pins, um 16 Decoder (mit Multiplexing) abzufragen und bietet weiterhin 
die Möglichkeit, problemlos wahlweise per UART, I2C oder SPI mit dem 
Boss zu kommunizieren.

Sprich: Kosten pro Encoder satte 6,irgendwas Cent.

Tipp: Widerstände mit der für deinen Ansatz schon nur theoretisch 
benötigten Genauigkeit wirst du nicht zu 2Cent/Stück bekommen. Mal ganz 
davon abgesehen, dass es praktisch, wie schon vielfach angemerkt, nicht 
funktionieren würde...

Lerne rechnen, du Vollpfosten!

von Olf (Gast)


Lesenswert?

c-hater schrieb:
> Lerne rechnen, du Vollpfosten!

Lerne Kommunizieren, Lesen und Denken:

Die Controller-HW ist vorgebenen. Da gibt es nichts auszutauschen.

von Olf (Gast)


Lesenswert?

Peter D. schrieb:
> Olf schrieb:
>> Allerdings verhilft
>> diese serielle Verschaltung keineswegs zu einem linearen Verhalten, wie
>> ich durch einen Test sehen musste. Was ist nun der Vorteil?
>
> Wenn R4 sehr groß ist (100k) ist das schon recht linear. Oder man nimmt
> eine Konstantstromquelle.

Bei 100k kommt aber nichts mehr an Spannung an, die man dem ADC zuführen 
könnte. Seltsamer Vorschlag.

Beitrag #6109751 wurde von einem Moderator gelöscht.
von Theor (Gast)


Lesenswert?

Olf schrieb:
> Peter D. schrieb:
>> Olf schrieb:
>>> Allerdings verhilft
>>> diese serielle Verschaltung keineswegs zu einem linearen Verhalten, wie
>>> ich durch einen Test sehen musste. Was ist nun der Vorteil?
>>
>> Wenn R4 sehr groß ist (100k) ist das schon recht linear. Oder man nimmt
>> eine Konstantstromquelle.
>
> Bei 100k kommt aber nichts mehr an Spannung an, die man dem ADC zuführen
> könnte. Seltsamer Vorschlag.

Na! :-) Du kannst das nicht wissen, da Du wohl neu hier bist, aber wenn 
Peter was sagt, dann lohnt es sich erfahrungsgemäß doch, mal länger 
drüber nachzudenken, wenn man ihn nicht sofort versteht. Das habe ich 
selbst schon erlebt mit ihm. Und Du auch eigentlich schon. 
(Serienschaltung der Schalter im Encoder). Er schreibt nur nicht so viel 
wie ich. Hi hi.

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


Lesenswert?

Olf schrieb:
> Allerdings verhilft diese serielle Verschaltung keineswegs zu einem
> linearen Verhalten, wie ich durch einen Test sehen musste. Was ist nun
> der Vorteil?
Denk nochmal gaaaaaanz ausführlich drüber nach. Denn eigentlich warst 
von uns beiden doch du derjenige, der unbedingt diesen Lösungsansatz 
nehmen will.
Es ist letztlich schnurzegal wie die Schaltung aufgebaut ist (bei meiner 
Reihenschaltung sind natürlich alle Widerstände unterschiedlich groß, 
damit da irgendwas "lineares" dabei rauskommt, aber warum brauchst du 
das unbedingt linear?), das Verfahren bleibt bleibt letztlich das selbe.

Olf schrieb:
> Du darfst schon annehmen, dass ich weiß, wozu ich Encoder nehme.
Ja, sicher. Aber jetzt nimm einfach mal 1 einzigen der Encoder an einem 
ADC in Betrieb. Wenn das reibungslos läuft, dann kannst du es 
hochskalieren.
So würde ich als fertiger Ingenieur das machen.

Aber ich hin jetzt raus. Was gesagt werden musste, wurde gesagt. Und du 
hast offenbar eine Mission nach dem Motto "Ich mach mein Ding!"
Was mich nur wundert, ist, dass du fragst, obwohl du keine Antwort hören 
willst.

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


Lesenswert?

Olf schrieb:

> Ich finde es bemerkenswert, dass die
> Ingenieure hier im Forum immer erst einmal die Aufgabenstellung
> kritisieren, obwohl sie die Randbedingungen nicht kennen.

Und ich finde es bemerkenswert, daß du erst eine unvollständige 
Problembeschreibung ablieferst und dann Kritik an deinem Lösungsversuch 
mit der Begründung zurückweist, man hätte die Randbedingungen nicht 
beachtet.


Olf schrieb:
> Die Controller-HW ist vorgebenen. Da gibt es nichts auszutauschen.

Dann

1. hast du verloren und
2. wozu fragst du eigentlich?

Brauchst du jetzt noch eine offizielle Bescheinigung, daß du merkbefreit 
bist, oder was?

von Olf (Gast)


Lesenswert?

Theor schrieb:
> a! :-) Du kannst das nicht wissen, da Du wohl neu hier bist, aber wenn
> Peter was sagt, dann lohnt es sich erfahrungsgemäß doch, mal länger
> drüber nachzudenken, wenn man ihn nicht sofort versteht.

Das mag theoretisch sein, praktsich führt ein 100k Widerstand aber zu 
zwei Effekten:

1) Die Schaltung wird hochohmig und damit Störungsempfindlich

2) Nahezu alles, der 3,3V fallen an diesem Widerstand ab. Der Hub, den 
die variierenden R infolge des Schaltens bewirken, ist im mV Bereich und 
damit schwer zu messen.

von Olf (Gast)


Lesenswert?

Lothar M. schrieb:
> Es ist letztlich schnurzegal wie die Schaltung aufgebaut ist (bei meiner
> Reihenschaltung sind natürlich alle Widerstände unterschiedlich groß,
> damit da irgendwas "lineares" dabei rauskommt, aber warum brauchst du
> das unbedingt linear?), das Verfahren bleibt bleibt letztlich das selbe.

Die Idee, dass es mit der Reihenschaltung linear wird, kam nicht von 
mir, sondern von PEDA. Siehe Kopie des Beitrags. Ich hatte das in der 
Eile kritiklos übernommen und erst später gemerkt, dass dadurch nichts 
liniearer wird.

Peter D. schrieb:
> Schalte alle Kontakte in Reihe mit je einem Widerstand parallel.
> Dann hast Du eine binäre Stufung.
> Dann noch einen Pullup, um die Spannung zu messen.

Wie also soll das gehen?

Die Formel lautet meiner Meinung nach R1 + R2 + R3 / (R1 + R2 + R3 + 
R4).

Wenn einer der Widerstände fehlt, ändert sich der Nenner. Das kann nicht 
linear sein.

von Olf (Gast)


Lesenswert?

Axel S. schrieb:
> Und ich finde es bemerkenswert, daß du erst eine unvollständige
> Problembeschreibung ablieferst

Nein, ich habe keine Problembeschreibung abgeliefert sondern nur die 
Details einer Lösung, soweit überhaupt noch Freiraum zur Gestaltung war, 
zur Diskussion gestellt. Was nicht mehr veränderbar oder verhandelbar 
ist, muss auch nicht in die Diskussion, weil es zur Lösung nicht 
beiträgt. Deshalb nutzt es auch nicht, wenn jeder alles über die 
Gesamtaufgabe wissen will, um andere Vorgaben daraus abzuleiten.

Es geht jetzt nur noch darum, ob das seriell (Lösung 2) oder doch in 
konventioneller Weise parallel (wie eingangs angedacht) gemacht wird.

Momentan tendiere ich zur Lösung 1, weil ich in der linearen Schaltung 
bei Überbrückung der Widerstände keinen Vorteil sehe.

Ich habe eine Schaltung am Laufen! Widerstände aus der Kiste 
120,220,470,820 und den gegen GND mit 330. Spannungen praktisch 
rauschfrei.

von c-hater (Gast)


Lesenswert?

Olf schrieb:

> Ich habe eine Schaltung am Laufen! Widerstände aus der Kiste
> 120,220,470,820 und den gegen GND mit 330. Spannungen praktisch
> rauschfrei.

Fein. Und nun mache das mal für alle 16 Encoder...

von Peter D. (peda)


Lesenswert?

Olf schrieb:
> Wenn einer der Widerstände fehlt, ändert sich der Nenner. Das kann nicht
> linear sein.

Wie schon gesagt, nimmste eben ne KSQ.
In der Praxis muß es aber nicht super linear sein. Es reicht, wenn die 
Stufen einen ausreichenden Abstand haben.

Du brauchst in jedem Fall eine Filterung durch Mehrfachabtastung, da 
analog sich eben analog ändert und nicht springen kann.
Dürfte bei 16 Encodern schon zeitlich eine Herausforderung sein, 
AD-Wandlungen dauern halt.
Ich taste Encoder wenigstens alle 1ms ab, um keine Schritte zu 
verlieren.

von Johnny B. (johnnyb)


Lesenswert?

Olf schrieb:
> Johnny B. schrieb:
> Wie stelle ich bis zu 16 Parameter von 8 Maschinenregelungen ein und
> kann ich dafür Potis nehmen oder einen SuperController mit einem
> Drehregleer und einem 17fach verschachtelten Menü - sondern die Lösung
> ist vorgegeben: 16 inkrmentale Drehregler möglichst einfach und
> kostengünstig an einen Micorcontroller anbinden und dies unter Nutzung
> ...

Habe ja schon lange vorher die beste Lösung vorgeschlagen; nimm einfach 
einen Mikrocontroller mit genügend IO's und gut ist.

von Joachim B. (jar)


Lesenswert?

Peter D. schrieb:
> Ich taste Encoder wenigstens alle 1ms ab, um keine Schritte zu
> verlieren.

deswegen müsste die ADC für 16 Version ja mindestens 16x schneller sein 
ggffs. + Überabtastung um einen passenden ADC Wert herauszufinden. Das 
geht ja in µs über und da der Controller nicht im ersten Beitrag genannt 
wurde suche ich jetzt auch nicht.

Johnny B. schrieb:
> nimm einfach
> einen Mikrocontroller mit genügend IO's und gut ist.

kann er nicht, will er nicht

also bleibt nur

für jeden Encoder einen eigenen kleinen µC einzusetzen.

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


Lesenswert?

Johnny B. schrieb:
> Habe ja schon lange vorher die beste Lösung vorgeschlagen; nimm einfach
> einen Mikrocontroller mit genügend IO's und gut ist.

Das geht ja nicht. Er ist bereits auf die Profi-Hardware "Arduino" 
festgelegt. Und das ist nicht verhandelbar.


Joachim B. schrieb:
> also bleibt nur
> für jeden Encoder einen eigenen kleinen µC einzusetzen.

Aber was das kostet! Das würde den TE ruinieren!!1!elf

von Eberhard H. (sepic) Benutzerseite


Lesenswert?

Elektor hat das analoge Verfahren vor ca. einem Jahr anhand eines 
praktischen Beispiels hier beschrieben: 
https://www.elektormagazine.com/labs/rotary-encoder-on-a-single-mcu-pin

Bei 16 Drehgebern würde ich aber dennoch die digitale Methode z. B. mit 
zwei Stück MCP23S17 bevorzugen, die ein paar hilfreiche Features für 
einen solchen Zweck eingebaut haben.

: Bearbeitet durch User
von MaWin (Gast)


Lesenswert?

Johnny B. schrieb:
> Habe ja schon lange vorher die beste Lösung vorgeschlagen; nimm einfach
> einen Mikrocontroller mit genügend IO's und gut ist.

Arduino-beschränkte können nicht einfach was Passendes nehmen.

Die müssen auf Gedeih und Verderb murksen.

Wer 74HC166 nicht kennt, muss halt 16 Drehgeber an 8 (oder gar nur 6) 
Analogeingänge anschliessen, was zumindest 2 Drehgeber pro Eingang 
bedeutet und 64 Spannungspegel erfordern würde.

Da denn, geht nicht gibt's nicht für Olf, der baut auch sicher 
Magnetmotoren.

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


Lesenswert?

Eberhard H. schrieb:
> Elektor hat das analoge Verfahren vor ca. einem Jahr anhand eines
> praktischen Beispiels hier beschrieben
Das kann man schon so hinbasteln, dass das bei einem Funktionsmodell 
geht. Trotzdem funktionert das auf Dauer nicht zuverlässig.
Ist halt wieder so ein vermurkstes Elektrogerät, das man gleich nach der 
Garantiezeit auf die Halde schmeißt, weil man sich sonst zu sehr 
aufregt.
Lass diese Drehgeber mal in paar Jahre im echten Leben ihre Arbeit 
verrichten. Und dann miss die Kontaktwiderstände. Es ist nicht neu, dass 
die Kontaktgabe dann unzuverlässig wird.

Denn wenn ich 3 Bits Information (alle 3 Schalter) in den 
Spannungsbereich 0..5V packe, dann habe ich signifikant geringere 
Störabstände, als wenn ich nur 1 Bit (je Schalter ein Binäreingang) in 
den Bereich von 0..5V packe.

Wenn ich also einen 10k Pullup habe, dann kann der Übergangswiderstand 
gegen GND auch mal 4kOhm sein, und ein normaler Binäreingang erkennt 
eine 0, obwohl die Spannung deutlich höher ist als 0V.

Wie das bei der Lösung mit 3 Schaltern am ADC-Eingang aussieht, das möge 
man sich einfach mal selber ausdenken. Mir ist die Zeit zu schade.

Und der Witz daran: der Übergangswiderstand ist a) nicht konstant und b) 
nicht bekannt.

von Einer K. (Gast)


Lesenswert?

Lothar M. schrieb:
> Und der Witz daran: der Übergangswiderstand ist a) nicht konstant und b)
> nicht bekannt.

Immerhin hat die Schaltung eine Handvoll Kondensatoren, welche die 
Kontakte putzen.

von Joachim B. (jar)


Lesenswert?

MaWin schrieb:
> Wer 74HC166

einige 74HC4067 täten es ja auch, aber statt ein IC Grab zu bauen würde 
ich doch einen µC pro Encoder wählen

von Brummel (Gast)


Lesenswert?

Joachim B. schrieb:
> MaWin schrieb:
>> Wer 74HC166
>
> einige 74HC4067 täten es ja auch, aber statt ein IC Grab zu bauen würde
> ich doch einen µC pro Encoder wählen

Man braucht bestimmt keinen µC pro Encoder. Weiter oben hat doch bereits 
jemand vorgeschlagen wie man die Verschaltung angeht.

von Joachim B. (jar)


Lesenswert?

Brummel schrieb:
> Man braucht bestimmt keinen µC pro Encoder

wäre aber einfacher, einmal bauen 16 Kopien machen und abliefern.

von Brummel (Gast)


Lesenswert?

Joachim B. schrieb:
> Brummel schrieb:
>> Man braucht bestimmt keinen µC pro Encoder
>
> wäre aber einfacher, einmal bauen 16 Kopien machen und abliefern.

Wie viele Portpins werden für eine Matrix aus 16 Encoder (A, B, Switch) 
benötigt? Diese Frage würde ich mir stellen und nicht: wie verbaue ich 
einen kleinen Sack Widerstände, um 16 Encoder mit einem Arduino zu 
verheiraten.

von J. S. (engineer) Benutzerseite


Lesenswert?

Olf schrieb:
> Die Auflösung des Wandler müsste reichen, auch bei Variation der
> Widerstände um 5% oder Verschmutzung.
5% Variation in beide Richtungen machen einen Versatz von aufintegriert 
5% *(1/1 + 1/2 + 1/4 + 1/8) ca 10%. Hinzu kommen Spannungsvariationen, 
Rauschen und eben die Alterung von Kontakten.

Um das 100%ig sicher ohne eine Kalibrierung jederzeit zu unterscheiden, 
braucht es wenigsten den doppelten Abstand für die absoluten Stufen 
(20%) und man bekommt damit deren 5 linear, bei deiner Schaltung gerade 
4. Das reicht nur für 2 Schalter.

Ich hatte für eine Industrieanwendung so etwas Ähnliches vor 15 schon 
entwickelt und musste am Ende 1%- Widerstände vorgeben und noch etwas 
Lernen und Nachkalibrieren für das Altern einbauen.

Eberhard H. schrieb:
> Elektor hat das analoge Verfahren vor ca. einem Jahr anhand eines
> praktischen Beispiels hier beschrieben:
Das ist aber nix Neues :-)

Solche Lösungen kommen immer mal wieder hoch, lohnen sich aber nur, wenn 
man wirklich keine Leitungen hat oder enorm Hardware sparen will (und 
wenn die Stückzahl im Verkauf den gesteigerten Aufwand bei der SW 
rechtfertigt.)

Die Geschichte läuft in etwa so, dass man in einer Anlernphase alle 
Messwerte, die eintrudeln, zu Wolken zusammenfasst, diese mit einem 
Filter mittelt und damit die gültigen Werte absolut berechnet. Dann 
folgen die Sigma-Grenzen für die Werte. Im Betrieb werden diese Werte 
langsam nachgeführt. Einzelne Kontaktverschmutzungen werden erkannt und 
gemeldet. Das allerdings nicht nur wegen der Trimmung des Verfahrens 
sondern auch aus Sicherheitsgründen, um  das System als solches zu 
prüfen.

Wenn es hier in diesem Fall wirklich so gebaut werden soll, würde ich es 
händisch kalibieren. Es sollten aber keine großartigen Kondensatoren 
oder Dämpfungsglieder vorgesehen werden, weil diese die Zeiten stabiler 
Zustände eher noch verengen.

So oder so bleibt nur wenig Zeit zum Erfassen sauberer Signale. Damit 
das obendrein noch für multiplexte Controller funktioniert, braucht man 
mit Umschaltzeit so etwa das 2 x N-fache der Rate.

Ich pädiere auch für die Lösung mit getakteten Schieberegistern und 
entsprechender Auslesetempo, wenn es möglich ist.

von J. S. (engineer) Benutzerseite


Lesenswert?

Zu der angenommenen Drehgeschwindigkeit noch ein Hinweis:

Die in meinem Controller verbauten Encoder mit 24 Rastungen kann ich mit 
einer Bewegung zwischen 2 Fingern (Daumen vorwärts, Zeigefinger 
rückwärts) 4x in einer Sekunde zu fast 2/3 drehen. Das sind 8 
Teil-Bewegungen hin und her in der Sekunde, also etwa 125ms je 
Schnipp-Bewegungen. Fürs Greifen und Druckaufbauen der Finger vergeht 
mehr Zeit, daher liegt die Drehbewegung selbst bei vlt. 100ms. Der 
Sinus(-halb-)bogen, den die Geschwindigkeit beim Schnippen beschreibt, 
hat in der Spitze rund die doppelte Geschwindigkeit, wie dessen 
Mittelwert, wobei etwa 15 Impulse kommen. Ich bekomme also eine 
Spitzenrate von rund bis zu 30 Impulsen in unter 100ms. Das sind also 
gut alle 3ms ein Puls.

1ms Abtastintervall sind also ok. 10ms Prellen ginge aber gar nicht, da 
macht der Drehgeber schon kompletten Unsinn. Das Prellen liegt real im 
Bereich von 1-2ms für einen Dreh. Bei schnellen Drehs ist das nochmal 
anders, als bei langsamen. Trotzdem kann es so oder so durchaus sein, 
dass Zählimpulse verschluckt werden. Es braucht in jedem Fall eine 
intelligente Erkennung des ersten Wechsels mit Totzeit.

Bei mir macht das nichts, weil ich über die Drehbewegung 
drüberintegriere, wenn sie eingesetzt hat und erkannt wurde. D.h. ich 
beschleunige und lasse den Interpreter träge mitrollen, so wie ein Navi 
sich in einem Tunnel ohne GPS verhält, um den Weg nicht zu verlieren. 
Das braucht aber richtig Intelligenz.

Ich würde zu Gebern mit nur 15 Pulsen raten und jeden davon mit 
mindestens 1kHz abtasten. Bei 16 Stück also 16kHz. Keine Ahnung, ob dein 
Prozessor das hinbekommt.

von MaWin (Gast)


Lesenswert?

Jürgen S. schrieb:
> Ich würde zu Gebern mit nur 15 Pulsen raten und jeden davon mit
> mindestens 1kHz abtasten. Bei 16 Stück also 16kHz. Keine Ahnung, ob dein
> Prozessor das hinbekommt

Na ja, ein Arduino braucht etwa 100us pro analogRead, dgal ob Uno oder 
BluePill.

Einmal jeden der 16 Analogeingänge auslesen also 1.6ms, und weil man 
sich auf analoge Werte nicht verlassen kann 3 mal lesen und den 
abgelegenen verwerfen, macht 4.8ms.

Sprich: das wird nichts, man muss die Knöpfe vorsichtig langsam drehen 
damit ein Arduino mitkommt.

Das wird Olf aber nicht stören, er hat sich ja schon für Murks 
entschieden.

von J. S. (engineer) Benutzerseite


Lesenswert?

MaWin schrieb:
> Sprich: das wird nichts, man muss die Knöpfe vorsichtig langsam drehen
> damit ein Arduino mitkommt.

Das fürchte ich auch. Ich hatte soetwas seinerzeit sogar noch im PLD mit 
einem Software-ADC (also PWM auf einen Pin, mischen und wieder einlesen) 
gemacht und da gab es vereinzelt schon Probleme mit schnellen 
Bewegungen, obwohl ich mit bis zu 2kHz abgetastet habe.

http://www.96khz.org/htm/midicontroller15.htm

Den analogen Multiplexer und ADC habe ich fortan auch nur noch für die 
Poti-Regler genommen.

http://www.96khz.org/htm/midicontroller16.htm

Das waren allerdings auch recht einfache und billige Drehgeber die 
richtig geprellt haben. Vom Prinzip her geht das schon. Es wird aber nur 
gemacht, um Schaltprobleme zu vermieden, z.B. in EX-Bereichen, wo man 
mit Schutzbeschaltung dafür sorgt, dass es keine Funken geben kann.

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


Lesenswert?

Olf schrieb:
> Lothar M. schrieb:
>> Und was genau spricht dann dagegen, tatsächlich auch Potentiometer
>> einzusetzen?
> Die Tatsache, dass die Steuereinheit für unterschiedliche Kanäle
> eingesetzt werden soll, die umgeschaltet werden sollen. Die aktuellen
> Werte der Paramter würden aber augenblicklich springen, wenn man ihnen
> die Werte gemäß Potistellung zuweisen würde.
Es gibt Endlos-Potis mit 2 versetzten Schleifern wie die hier:
https://www.alps.com/prod/info/E/HTML/Sensor/Position/RDC80/RDC803101A.html
Die kann man endlos durchdrehen und man kann mit 2 ADC (oder eben 2 
Wandlungen nacheinander) die Absolutposition feststellen.
Dann muss man nur beim "Umschalten" dieses Gebers den Offset als 
Startwert nehmen und hat trotzdem ein vollkommen analoges Bauteil.

Beitrag #6110884 wurde von einem Moderator gelöscht.
von Joachim B. (jar)


Lesenswert?

MaWin schrieb:
> Einmal jeden der 16 Analogeingänge auslesen also 1.6ms, und weil man
> sich auf analoge Werte nicht verlassen kann 3 mal lesen und den
> abgelegenen verwerfen, macht 4.8ms.
>
> Sprich: das wird nichts, man muss die Knöpfe vorsichtig langsam drehen
> damit ein Arduino mitkommt.
>
> Das wird Olf aber nicht stören, er hat sich ja schon für Murks
> entschieden.

genau das hatte ich mir hier auch überlegt:
Beitrag "Re: Mehrere Dreh-Encoder an einem Arduino / ADC"

von e. lektor (Gast)


Lesenswert?


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


Lesenswert?

e. lektor schrieb:
> gibt es schon fertig
"Es wurde schon alles gesagt! Nur nicht von jedem."

Siehe den Beitrag "Re: Mehrere Dreh-Encoder an einem Arduino / ADC" und die 
folgenden...

von Olf (Gast)


Lesenswert?

Lothar M. schrieb:
> Es gibt Endlos-Potis mit 2 versetzten Schleifern wie die hier:
> https://www.alps.com/prod/info/E/HTML/Sensor/Position/RDC80/RDC803101A.html
> Die kann man endlos durchdrehen und man kann mit 2 ADC (oder eben 2
> Wandlungen nacheinander) die Absolutposition feststellen.

Ach was! Sinneswandel? Hier empfiehlst du aber einem, der analoge 
Schritte will, einen digitalen Drehgeber:

Beitrag "Re: continous Poti gesucht"


c-hater schrieb im Beitrag #6110884:
> "OLF" ist lautmalerisch vollkommen kongruent mit dem Geräusch, was
> entsteht, wenn man am Ende einer exzessiven Nacht sein Abendessen
> nochmal rückwärts isst...
Unglaublich, was manche hier für einen Bockmist von sich geben


e. lektor schrieb:
> gibt es schon fertig:
> https://www.elektormagazine.de/labs/rotary-encoder-on-a-single-mcu-pin
Schau an, schau an. Alles Spinner, die das probieren?

von chris (Gast)


Lesenswert?

Hallo Ofl,

dein Projekt finde ich gut.
Schalterketten über Widerstandsschaltungen auszuwerten ist tatsächlich 
etwas herausfordernd, wie ja auch viele hier mit eigenen Erfahrungen 
dazu angemerkt haben. Allerdings ist es auch nicht ganz einfach, 
Schalter rein digital auszuwerten, wie das MC-Net weiß:
https://www.mikrocontroller.net/articles/Entprellung

Mit den Widerstandsschaltungen kann man aber viel erreichen ( ich 
schreibe aus Erfahrung, weil ich das erfolgreich und zuverlässig in 
einem Projekt realisiert haben ), wenn man angepasste Filter dafür 
entwickelt und die nötige Abtastfrequenz erreicht ( dazu muss man evtl. 
einen eigenen Interrupt-Treiber für z.B. den Arduino Uno entwickeln ).

Nichtsdestotrotz wünsche ich Dir Erfolg bei dem Vorhaben. Wenn es 
funktioniert, wäre es gut, wenn Du eine Library auf GitHUB dazu 
veröffentlichen könntest.

Lass Dich nicht provozieren und bleibe sachlich. Ich weiß, das ist in 
diesem Forum schwierig, am Schluss lohnt es sich dann aber, wenn man den 
Thread später noch einmal liest.


>von c-hater (Gast)
>17.01.2020 18:55

>MaWin schrieb:

>> Das wird Olf aber nicht stören, er hat sich ja schon für Murks
>> entschieden.

>Naja, nomen est omen.

>"OLF" ist lautmalerisch vollkommen kongruent mit dem Geräusch, was
>entsteht, wenn man am Ende einer exzessiven Nacht sein Abendessen
>nochmal rückwärts isst...

>Ist das schonmal jemandem aufgefallen?

Es ist hier scheinbar üblich die fachliche Ebene zu verlassen und 
persönlich beleidigend zu werden. Ich halte das für einen Ausdruck eines 
ziemlich schwachen, gehässigen Charakters und mangelnder 
Selbstreflexion.

Beitrag #6111372 wurde von einem Moderator gelöscht.
von J. S. (engineer) Benutzerseite


Lesenswert?

Lothar M. schrieb:
> Die kann man endlos durchdrehen und man kann mit 2 ADC (oder eben 2
> Wandlungen nacheinander) die Absolutposition feststellen.
Die Auswertung ist aber etwas komplizierter, weil die einen Totbereich 
haben und auch erheblich mehr streuen. Zudem sind sie nicht linear.

Am liebsten sind mir SIN-COS-Geber. Mit entsprechend hoher Abtastrate 
sind die supereinfach auszuwerten und hochgenau. Leider recht teuer.

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.