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".
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?
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.
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.
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.
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.
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.
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.
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
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.
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)
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.
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.
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.
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?
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:
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
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.
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
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?
? ? ?
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.
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...
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.
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 ...
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!
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.
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.
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... ?
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.
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?
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'.
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.
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: (?)
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.
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.
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.
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!
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.
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.
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
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.
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.
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.
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.
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!
c-hater schrieb:> Lerne rechnen, du Vollpfosten!
Lerne Kommunizieren, Lesen und Denken:
Die Controller-HW ist vorgebenen. Da gibt es nichts auszutauschen.
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.
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.
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.
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?
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.
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.
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.
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...
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.
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.
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.
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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"
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.
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.