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.
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
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.
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.
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
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)
:
Bearbeitet durch User
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.
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
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
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
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
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.
Beitrag #6109751 wurde von einem Moderator gelöscht.
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.
:
Bearbeitet durch Moderator
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.
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
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.
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
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.
Brummel schrieb: > Man braucht bestimmt keinen µC pro Encoder wäre aber einfacher, einmal bauen 16 Kopien machen und abliefern.
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.
:
Bearbeitet durch User
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.
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"
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...
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?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.