Forum: Analoge Elektronik und Schaltungstechnik Einstellbarer Widerstand aus PWM Signal


von Robert G. (robert_g)


Angehängte Dateien:

Lesenswert?

Hallo Experten!

Ich arbeite gerade an einem kleinen Projekt und würde einen 
einstellbaren Widerstand benötigen (Bereich ca. 0 - 500k). Zum Ansteuern 
habe ich ein PWM Signal von einem AtMega8 (ca. 1kHz-65kHz möglich).

Im Netz habe ich folgende Schaltung mit einem FET gefunden (siehe 
Anhang)
Der FET wird über ein RC Glied angesteuert und realisiert einen 
verstellbaren Widerstand.

Das PWM Signal kann ich leider nicht direkt verwenden, weil damit eine 
uralt Hardware (Commodore 64 Analoge Paddle Eingänge) angesteuert werden 
soll.
(siehe Bild paddle_innenschaltung_c64.gif)

Ich Forum habe ich leider nichts passendes finden können und bin für 
jede Idee dankbar.

von Helmut L. (helmi1)


Lesenswert?

Einstellbaren Widerstand braucht man normalerweise nicht. Du kannst die 
beiden Potis durch einstellbare Stromquellen ersetzten. Das ist 
wesentlich einfacher und linearer zu bewerkstelligen.

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


Lesenswert?

Robert G. schrieb:
> Zum Ansteuern habe ich ein PWM Signal von einem AtMega8
Gib das doch einfach über einen Widerstand direkt auf den Kondensator. 
Der Widerstand muss so groß sein, wie der "kleinste" Paddelwiderstand, 
damit du bei 100% PWM Vollausschlag hast.
"Höhere" Widerstandswerte werden dann durch PWM nachgebildet. Irgendwo 
bei 50..70% PWM wird dann Schluss sein, weil die Schaltschwelle des 
Komparators nicht mehr erreicht wird. Und du kannst dann mit PWM Werten 
zwischen dieser "Untergrenze" und 100% den Paddelausschlag steuern.

: Bearbeitet durch Moderator
von Michael B. (laberkopp)


Lesenswert?

Robert G. schrieb:
> Ich arbeite gerade an einem kleinen Projekt und würde einen
> einstellbaren Widerstand benötigen (Bereich ca. 0 - 500k).

Man kann keine einstellbaren Widerstand einfach realisieren.

Man könnte ein Motorpoti nehmen, oder das PWM Signal erfassen und an ein 
DigitalPoti weiterleiten, oder den Sollwert auf Eingangsseite mit dem 
Stromfluss vs. Spannungswert auf Ausgangsseite vergleichen und einen 
MOSFET danach regeln, aber keine Lösung davon ist einfach.

Die Schaltungen sind Unsinn.

Robert G. schrieb:
> Das PWM Signal kann ich leider nicht direkt verwenden, weil damit eine
> uralt Hardware (Commodore 64 Analoge Paddle Eingänge) angesteuert werden
> soll.

Gerade da, bei Schaltungen die sowieso nur den Strom durch einen 
Widerstand aufintegrieren, reicht PWM direkt. Einfach statt +5V dort die 
PWM des jeweiligen Kanals anlegen. Das funktioniert nit nucr beim CBM 
sondern auch beim Apple und IBM PC Gameport.

Bei Anspruch auf extreme Genauigkeit (die bei Paddles normalerweise 
nicht erfordelich ist), muss man eventuell die PWM mit der 
Analgschalter-Umschaltungen synchronisieren. Zumindest muss die Frequnz 
höher sein als die Paddle-Auswertung dauert.

von Robert G. (robert_g)


Lesenswert?

@Michael Bertrandt

Michael B. schrieb:
> Die Schaltungen sind Unsinn.

Die paddle_innenschaltung_c64.gif ist kein Unsinn, genauso funktioniert 
das bei C64 Paddles. Der Analogschalter dient nur dazu, jeweils Port 1 
und Port 2 umzuschalten, den kann man sich auch wegdenken.
Der SID entlädt die Kondensatoren über PIN 23 und 24, wenn er mit der 
Messung fertig ist. Danach werden die Kondensatoren wieder über die 
Paddle Widerstände geladen und die Zeit x gemessen, bis die 
Kondensatoren wieder eine bestimmte Ladung haben (muss ich mit dem Oszi 
mal ausmessen, geht aber wohl sehr schnell)

fet_rest.png kann vermutlich Unsinn sein, das war ja auch meine Frage.

Michael B. schrieb:
> Gerade da, bei Schaltungen die sowieso nur den Strom durch einen
> Widerstand aufintegrieren, reicht PWM direkt. Einfach statt +5V dort die
> PWM des jeweiligen Kanals anlegen. Das funktioniert nit nucr beim CBM
> sondern auch beim Apple und IBM PC Gameport.

Das habe ich bereits ausprobiert, dabei kommen nur Randomwerte aus dem 
SID Register. Das wäre ja mein erster Ansatz gewesen.
Habe verschiedene Frequenzen ausprobiert, bis ca. 65kHz. Mehr schafft 
der AVR leider nicht via PWM.

Die Kondensatoren haben jeweils 1,8nF.

von Helmut L. (helmi1)


Lesenswert?

1
                       OP
2
                   | \
3
------R1----+------| +\
4
            |      |   >-+---R2----
5
            C    +-| -/  |
6
            |    | | /   | 
7
            GND  +-------+
R1 + C integrieren die PWM zu einer Gleichspannung, der OP puffert diese 
niederohmig. R2 dient mit dem C im C64 als Zeitkonstante die noch von 
der Spannung abhaengt vom OP abhaengt. Must du jetzt mal testen ob die 
minimale Spannung des OP noch ausreichend ist.

: Bearbeitet durch Moderator
Beitrag #5232621 wurde vom Autor gelöscht.
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Robert G. schrieb:
> muss ich mit dem Oszi mal ausmessen
Wenn du schon mal am Messen bist, dann miss doch mal den maximalen und 
minimalen Paddel-Widerstand. Also den Widerstand wo das Paddel 
tatsächlich noch reagiert und was tut...

: Bearbeitet durch Moderator
von Robert G. (robert_g)


Lesenswert?

Lothar M. schrieb:
> Wenn du schon mal am Messen bist, dann miss doch mal den maximalen und
> minimalen Paddel-Widerstand...

Muss ich nicht, bei C64 Paddles sind so 470k - 500kOhm Potis üblich.
Also 0 - 470kOhm Bereich

Bei den alten Atari Paddles waren es übrigens 1 MOhm Potis.

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


Lesenswert?

Robert G. schrieb:
> Also 0 - 470kOhm Bereich
Meine Frage zielte darauf ab, statt 0 Ohm einen Wert größer als 0 Ohm zu 
bekommen, der sich "noch genau wie 0 Ohm" verhält. Das wäre der R2 aus 
Helmuts Schaltung und der von mir erwähnte "kleinste" Widerstand.

Und dann könnte man sich Werte für diese Schaltung ausdenken:
1
   
2
   PWM 0/5V -----R1----o------Rpaddelmin------> Paddeleingang 
3
hohe Frequenz          |
4
                      === z.B. 47µF
5
                       |
6
                      GND

: Bearbeitet durch Moderator
von Robert G. (robert_g)


Lesenswert?

Lothar M. schrieb:
> Also den Widerstand wo das Paddel
> tatsächlich noch reagiert und was tut...

Ok das werde ich mir heute Abend ansehen.
Soviel ich weiß gibt es da aber größere Ungenauigkeiten.
Toleranzen von den kleinen Kondensatoren bzw auch in den Potis der 
Paddles usw.

Die Schaltung mit dem Integrierer könnte klappen, an so etwas hab ich 
schon gedacht. 471er hätte ich noch herumliegen. Lassen die sich 
asymmetrisch betreiben?

von Falk B. (falk)


Lesenswert?

@Robert Grasböck (robert_g)

>(siehe Bild paddle_innenschaltung_c64.gif)

Dafür brauchst du eine steuerbare Konstantstromquelle. Die kann man 
hier leicht mit einem OPV + Gemüse aufbauen.

http://www.ti.com/lit/an/snoa474a/snoa474a.pdf

Figure 5

Das Thema Abgleich kannst du dir sparen, kauf 1% Widerstände und gut. 
Dein PWM-Signal filterst du mit einem RC-Tiefpaß und legst die 
gefilterte Gleichspannung an den + Eingang der Schaltung.

Also OPV reicht ein TS912, dort sind sogar 2 OPVs drin, perfekt für 2 
Eingänge.

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

@ Lothar Miller (lkmiller) (Moderator)

>Und dann könnte man sich Werte für diese Schaltung ausdenken:

Wird wahrscheinlich nicht funktionieren, weil bei kleinen Spannungen die 
Komparatorschwelle nicht erreicht wird. Man muss auch bei kleinen 
Spannungen weit in Richtung VCC ziehen können. Siehe mein vorheriger 
Beitrag.

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


Lesenswert?

Falk B. schrieb:
> weil bei kleinen Spannungen die Komparatorschwelle nicht erreicht wird.
Wie ich schon schrieb: es wird sich ab ca. 50%-70% PWM was tun. Denn der 
Komparator im SID ist ein simpler CMOS-Eingang. Und weil das Ganze 
sowieso überaus nichtlinear ist, muss vor die PWM-Ausgabe noch eine 
"Verzerrungsfunktion".

Eine steuerbare Konstantstromquelle braucht diese "Verzerrrung" der 
Übertragungsfunktion auch, weil so ein Widerstand ja auch keine KSQ 
ist...

: Bearbeitet durch Moderator
von MaWin (Gast)


Lesenswert?

Robert G. schrieb:
> 471er hätte ich noch herumliegen. Lassen die sich asymmetrisch
> betreiben?

Klar.

Du kannst sie mit -5V und +12V versorgen um 0-5V Signale zu verarbeiten.
Denn sie wollen mit zumindest 3V weniger als dem kleinsten zu 
vetarbeitenden Signal und 3V mehr als dem grössten zu verarbeitenden 
Signal versorgt werden.
Einem TS912 hingegen würden 0V und 5V als Versorgung reichen.
Irgendwo muss ja der technologische Fortschritt sein, man kann doch 
nicht glauben dsss der alte Scheiss immer noch die beste Lösung wäre.

von Robert G. (robert_g)


Lesenswert?

Lothar M. schrieb:
> Robert G. schrieb:
>> Also 0 - 470kOhm Bereich
> Meine Frage zielte darauf ab, statt 0 Ohm einen Wert größer als 0 Ohm zu
> bekommen, der sich "noch genau wie 0 Ohm" verhält. Das wäre der R2 aus
> Helmuts Schaltung und der von mir erwähnte "kleinste" Widerstand.
>
> Und dann könnte man sich Werte für diese Schaltung ausdenken:
>
>
>    PWM 0/5V -----R1----o------Rpaddelmin------> Paddeleingang
> hohe Frequenz          |
>                       === z.B. 47µF
>                        |
>                       GND
>

Also das werde ich heute mal ausprobieren.
Wenn das nicht funktioniert, dann werde ich wohl oder übel in den OPV 
Apfel beißen müssen.

Danke erst mal an alle für eure Antworten. Ich werde weiter berichten.
Der Wert im SID ist übrigens 8 Bit 0...255 also relativ ungenau.
Spiele verwenden meist nur einen Teilbereich.
Bei Atari Paddles (~1MOhm) am C64 ist der höherohmige Teilbereich des 
Potis tot. Da die Ladezeit des Kondis außerhalb des Messbereichs.

: Bearbeitet durch User
von Andi (Gast)


Lesenswert?

So was sollte doch auch funktionieren.
1
 5V PWM ------|>|------[ R1 ]--------> Paddle Input
2
3
             1N4148     2k

Es geht ja nur darum den Kondensator im Paddle Input mit verschiedenen 
Geschwindigkeiten aufzuladen. Die PWM lädt ihn mit kurzen Pulsen 
variabler Länge, während dem das Poti in mit verschieden grossen Strömen 
lädt.

Wenn du eine 8bit PWM hast, solllte 2k Ohm R1 etwa richtig sein, da
 2k x 256 = 512 kOhm

P.S Masse musst du natürlich auch verbinden.

Andi

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


Lesenswert?

Andi schrieb:
> So was sollte doch auch funktionieren.
>
>
1
> 
2
>  5V PWM ------|>|------[ R1 ]--------> Paddle Input
3
> 
4
>              1N4148     2k
5
>

Nicht wirklich.

Es funktioniert aus dem gleichen Grund nicht, aus dem die ungefilterte 
PWM auch schon nicht funktioniert: weil der SID das Poti "getaktet" 
abfragt. Vereinfacht gesagt: der SID entlädt den Kondensator regelmäßig 
und mißt dann, wie lange es dauert, bis er über den Widerstand des 
Paddles auf eine gewisse Spannung aufgeladen ist. Eine Aufladung per PWM 
müßte nun mit wesentlich höherer Frequenz als der Abtastfrequenz des SID 
geschehen. Sonst gibt es häßliche Aliasing-Effekte.

von Robert G. (robert_g)


Lesenswert?

Lothar M. schrieb:
> PWM 0/5V -----R1----o------Rpaddelmin------> Paddeleingang
> hohe Frequenz          |
>                       === z.B. 47µF
>                        |
>                       GND

hab nun R1 100ohm
C 470uF
Rpaddelmin 22kohm

das ergibt schon recht brauchbare werte
der min wert wäre aber rund 200ohm

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


Lesenswert?

Robert G. schrieb:
> das ergibt schon recht brauchbare werte
Noch ein bisschen mit den Werten herumtricksen, dann wird das schon. Die 
haben das früher(tm) auch so gehandhabt... ;-)

> der min wert wäre aber rund 200ohm
Hmmmmmm, dann müsstest du auf jeden Fall den OP als Puffer vorsehen. Und 
du hättest nur einen recht geringen Teil der PWM zum einstellen. Du 
solltest hier den Rpaddelmin "so hochohmig wie möglich" machen.

von Robert G. (robert_g)


Angehängte Dateien:

Lesenswert?

Lothar M. schrieb:
>> der min wert wäre aber rund 200ohm
> Hmmmmmm, dann müsstest du auf jeden Fall den OP als Puffer vorsehen. Und
> du hättest nur einen recht geringen Teil der PWM zum einstellen. Du
> solltest hier den Rpaddelmin "so hochohmig wie möglich" machen.

Also grundsätzlich!
Damit man auch den Messkondensator in der Zeit der Abtastung ordentlich 
laden kann, darf der Ladewiderstand nicht zu groß sein.

Abtastung alle 512 Takte vom C64 Systemtakt (= 0,98MHz bei PAL, 1,02MHz 
bei NTSC) Die Abtastung erfolgt also mit rund ~1.914kHz  (alle 522.4us)
Wenn ich mich jetzt nicht verrechnet habe.
Das sieht man auch schön auf dem Oszi.

Ich denke auch, dass die Lösung mit einem OPV wohl die beste ist.

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


Lesenswert?

Robert G. schrieb:
> Also grundsätzlich!
> Damit man auch den Messkondensator in der Zeit der Abtastung ordentlich
> laden kann, darf der Ladewiderstand nicht zu groß sein.
Deshalb mein wiederholter Verweis auf den sich etwas widersprüchlich 
anhörenden, bei ausreichender Denkzeit aber logischen "größtmöglichen 
minimalen Paddelwiderstand".

Denn dieser minimale Widerstand ist der, der für eine schnellstmögliche 
Ladung des Kondensators sort. Bei 0 Ohm wird der Kondensator z.B. gar 
nicht entladen oder/und erreicht sofort nach dem Entladevorgang wieder 
die Schaltschwelle.
Wenn das Paddel bei 1k "gerade so" an den Anschlag kommt, dann sind ist 
dieser 1k der minimale Paddelwiderstand, der eingesetzt werden muss. Und 
zwar primär unabhängig ob die Schaltung mit oder ohne OP aufgebaut ist.
Das einzige, was der OP besser kann, ist die PWM zu glätten, denn dann 
kann man mit 100k und 1µF eine hübsche glatte Spannung erzeugen...

: Bearbeitet durch Moderator
von Robert G. (robert_g)


Lesenswert?

Naja der Minimale Paddle Widerstand wäre (habe beim Joystick gemessen) 
rund 50 Ohm. Aber bei rund 100Ohm wird schon 0 als Registerwert 
eingelesen.
Rauf geh es ca. bis 400kOhm.

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


Lesenswert?

Robert G. schrieb:
> bei rund 100Ohm wird schon 0 als Registerwert eingelesen.
Dann wirst du da recht niederohmig werden müssen und bauchst den OP.
Ich würde allerdings versuchen, trotzdem noch hochomiger zu werden, 
sonst wird die Einstellung eine recht knifflige Sache, wo sich bei 
kleinsten PWM-Änderungen schon am Paddelwert was tut...

von Falk B. (falk)


Lesenswert?

@Lothar Miller (lkmiller) (Moderator)

>sonst wird die Einstellung eine recht knifflige Sache, wo sich bei
>kleinsten PWM-Änderungen schon am Paddelwert was tut...

Dann vielleicht doch die steuerbare Stromquelle?

von Helmut L. (helmi1)


Lesenswert?

Oder eine andere Idee:


2 x 4066 Analogschalter, binaer angesteuert die 8 Widerstaende in 2 
Potenzen abgestuft schalten. Fuer Paddelgenauigkeit sollten die 
Widerstaende reichen.

von Harald W. (wilhelms)


Lesenswert?

Robert G. schrieb:

>> Die Schaltungen sind Unsinn.
>
> Die paddle_innenschaltung_c64.gif ist kein Unsinn,

Nein, aber wo gibts denn dort "Einstellbare Widerstände aus PWM Signal"?

Elektronisch "Einstellbare Widerstände" kann man zwar schaltungs-
technisch verwirklichen; sie sind aber normalerweise wirklich
unsinnig und nur mit grossen Abweichungen vom Wunschwert zu ver-
wirklichen.

von Robert G. (robert_g)


Lesenswert?

Lothar M. schrieb:
> Robert G. schrieb:
>> bei rund 100Ohm wird schon 0 als Registerwert eingelesen.
> Dann wirst du da recht niederohmig werden müssen und bauchst den OP.
> Ich würde allerdings versuchen, trotzdem noch hochomiger zu werden,
> sonst wird die Einstellung eine recht knifflige Sache, wo sich bei
> kleinsten PWM-Änderungen schon am Paddelwert was tut...

Hab mir gerade die OPVs bestellt. Wenn ich die Schaltung zum Testen 
aufgebaut habe, werde ich wieder berichten. Ich denke das wird damit 
ganz gut funktionieren.

Helmut L. schrieb:
> 2 x 4066 Analogschalter, binaer angesteuert die 8 Widerstaende in 2
> Potenzen abgestuft schalten. Fuer Paddelgenauigkeit sollten die
> Widerstaende reichen.

Das wird, so denke ich, noch komplizierter als die OPV Lösung. Außerdem 
benötigt man dann einige Outputs vom uC zum Schalten des 4066. So viele 
habe ich aber leider nicht mehr über. Die Idee ist aber sehr gut und 
wurde auch schon manchmal so eingesetzt, soviel ich weiß.

Harald W. schrieb:
>>
>> Die paddle_innenschaltung_c64.gif ist kein Unsinn,
>
> Nein, aber wo gibts denn dort "Einstellbare Widerstände aus PWM Signal"?

Naja, vielleicht hätte ich etwas weiter ausholen sollen bei meinem 
Vorhaben.
Der größte Teil der IOs vom ATMega ist bereits belegt. Es stehen mir 
eben Digitale Outputs (für die Digitalen Eingänge des C64) und bzw PWMs 
(gedacht für die Analogeingänge) zur Verfügung.

Ein digitales Potentiometer als Chip hätte wohl auch funktioniert, 
jedoch bräuchte ich dann wieder mind. 2 Outputs (i2C). Außerdem bin ich 
mir nicht sicher ob es diese Dinger in meinem Wertebereich gäbe. 
Schaltgeschwindigkeit mal ganz vernachlässigt.

von Helmut L. (helmi1)


Lesenswert?

Robert G. schrieb:
> Außerdem
> benötigt man dann einige Outputs vom uC zum Schalten des 4066.

Ein 4094 Schieberegister laesst gruessen.

von Robert G. (robert_g)


Lesenswert?

Wenn es interessiert was aus dem Projekt geworden ist:
https://github.com/djtulan/nunchuk64/blob/master/hardware/nunchuk64/nunchuk64.pdf

Ging dann doch viel einfacher als erwartet. Software sei Dank.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.