Forum: Mikrocontroller und Digitale Elektronik Arduino: PWM-Out-Amplitude von [0 bis +5]V auf [-2,5 bis +2,5]V verschieben


von Laura M. (laura89)


Lesenswert?

Hallo zusammen.

Ich möchte folgendes tun:
Ich erzeuge mit meinem Arduino Uno eine per DDS 
(Direct-Digital-Synthesis) eine Sinus-Spannung, deren Frequenz zwischen 
50Hz und 1800Hz variiert wird (per Poti über einen Eingangs-Pin).
Diese Sinus-Spannung soll dann anschließend noch verstärkt und für 
Mess-Zwecke eingesetzt werden.

Das ist mein Problem:
Die Spannung muss "symmetrisch" sein, also der Bias (ich glaube das ist 
das richtige Fachwort dafür, bin mir aber nicht sicher) soll nicht von 
0V bis +5V, sondern von -2,5 bis +2,5V reichen.
Daher: Die Sinus-Spannung müsste quasi um die hälfte Ihres 
Spitze-Spitze-Wertes nach unten geschoben werden.

Was mir hier Schwierigkeiten bereitet ist, dass ich gar nicht weis, nach 
was ich eigentlich genau suche.
Ich bin zunächst auf IC's gestoßen wie Ladungs-Pumpe, 
Buck-Boost-Converter oder H-Brücke, die aber alle gemeinsam haben, dass 
die Spannung quasi komplett invertiert wird, und ich dann 2 Kanäle mit 
-5V und +5V zur Verfügung hätte (zumindest habe ich das so verstanden), 
aber das bringt mich ja nicht wirklich weiter.

Dann habe ich noch IC's wie dieses hier gefunden: 
http://www.ti.com/lit/ds/symlink/tle2426.pdf
Diese verschieben zwar den Bias nach unten, allerdings, indem Sie die 
gesamt Amplitude (und damit den DC-Offset) halbieren, also auch nicht 
das, was ich will.

Dann habe ich in diesem Thread: 
Beitrag "Re: 5 V Rechteck --> +/- 2,5 V"
noch die Möglichkeit gefunden, einfach ein Kondensator in Reihe und 
Widerstand nach Masse, also quasi eine Art Hochpass, allerdings (laut 
Thread) würde das nur bei einem Tastverhältnis von 50% funktionieren und 
ich möchte die PWM bzw. die Sinus-Spannung ja in der Frequenz variieren.
Zudem wäre dann noch das Problem, dass ich die 3dB-Eckfrequenz des 
Hochpasses dann dynamisch meiner eingestellten Frequenz für die 
Ausgangs-PWM anpassen müsste.

Da fast alle Mikrocontroller mit 0 bis 5V (oder 3,3V) arbeiten, müsste 
das doch eigentlich ein ganz gängiges Problem sein, für das eine Art 
"Standard-Lösung" existiert, oder liege ich da falsch ?
Hat jemand evtl. Tipps für Informations-Quellen oder Literatur, die sich 
mit diesem Thema auseinander-setzt, oder hat selber schon mal dieses 
Problem gehabt?

Freundliche Grüße

Laura

von Sebastian R. (sebastian_r569)


Lesenswert?

Mit einem Operationsverstärker als Subtrahierer 2.5V von deiner 
Ausgangsspannung abziehen. Braucht halt nur eine negative 
Spannungsversorgung...

von Max D. (max_d)


Lesenswert?

Laura M. schrieb:
> würde das nur bei einem Tastverhältnis von 50% funktionieren und ich
> möchte die PWM bzw. die Sinus-Spannung ja in der Frequenz variieren.

Du kannst die frequenz variieren ohne das tastverhältnis zu 
beeinflussen.

Frequenz = schneller/langsamer
tastverhältnis = relation zwischen an/aus (bei pwm)

von Stefan S. (chiefeinherjar)


Lesenswert?

Laura M. schrieb:
> Zudem wäre dann noch das Problem, dass ich die 3dB-Eckfrequenz des
> Hochpasses dann dynamisch meiner eingestellten Frequenz für die
> Ausgangs-PWM anpassen müsste.

Was hält dich denn davon ab, die Grenzfrequenz einfach unter 50 Hz zu 
setzen? Du willst ja nur den Gleichsspannungsanteil herausfiltern.
Im Grunde brauchst du aber ohnehin einen Bandpass - Untere Grenzfrequenz 
bei <50 Hz und obere Grenzfrequenz bei >1800 Hz.

Ob das Arduino-Framework (mitsamt seinen Libs) dies zulässt weiß ich 
nicht, aber mit AnalogWrite wird es wohl nicht funktionieren, da die 
PWM-Frequenz dort fix bei ein paar hundert Hertz ist - zumindest sagt 
das meine Erinnerung.

von Andre R. (ltisystem)


Lesenswert?

Ich hätte da noch ein Stichwort für dich, obwohl ich mir nicht sicher 
bin ob das auch für Wechselspannung funktioniert:

virtuelle Masse!

Grüße

von foobar (Gast)


Lesenswert?

> [...] einfach ein Kondensator in Reihe und Widerstand nach Masse, also
> quasi eine Art Hochpass, allerdings (laut Thread) würde das nur bei
> einem Tastverhältnis von 50% funktionieren und ich möchte die PWM bzw.
> die Sinus-Spannung ja in der Frequenz variieren.

Du solltest die PWM-Frequenz und dein Nutzsignal auseinanderhalten! Erst 
kommt ein Tiefpass, der die PWM-Frequenz rausfiltert - es bleibt der 
Sinus übrig (der hat dann die 50% Tastverhältnis). Danach der Hochpass, 
der den DC-Anteil rausfiltert.

von Laura M. (laura89)


Angehängte Dateien:

Lesenswert?

Hallo nochmal,

also erstmal Danke an Alle für die schnelle Rückmeldung !


Sebastian R. schrieb:
> Braucht halt nur eine negative
> Spannungsversorgung...

Das wäre eine Option, da ich zum Betreiben des Op-Amps(siehe Skizze) 
sowieso eine negative Spannungsquelle brauche.


Max D. schrieb:
> Du kannst die frequenz variieren ohne das tastverhältnis zu
> beeinflussen.

foobar schrieb:
> Du solltest die PWM-Frequenz und dein Nutzsignal auseinanderhalten!

Sorry, da habt ihr beide recht, also nochmal zur Erklärung:

Bei der DDS (Direct-Digital-Synthesis) wird eine Lookup-Tabelle, in der 
die Werte einer Funktions-Periode gespeichert sind (bei einer 
8bit-Auflösung 2^8 also 256 Werte) "durchlaufen" und dadurch nicht 
direkt ein analoger Sinus erzeugt, sondern eine hochfrequente PWM, auf 
die ein Sinus "aufmoduliert" ist.
Je schneller die Tabelle "durchlaufen" wird, desto höher die Frequenz.

Durch anschließendes Filtern mit einem Tiefpass wird die hochfrequente 
PWM herausgefiltert und dadurch entsteht ein "echter" analoger Sinus.
Wobei ich noch unsicher bin, ob da ein einfacher Tiefpass reicht, es 
finden sich im Internet auch Beispiele wo hier z.B. ein chebyshev-Filter 
verwendet wird.
In meinem Fall wird die Sinus-Spannung dann noch verstärkt.
Ich habe mal eine Skizze hinzugefügt, zum besseren Verständnis.

Also ich habe jetzt mal nach "remove DC-Offset from Sine-Wave" gegoogelt 
und da kommen tatsächlich viele Beispiele wo das einfach mit einem 
Hochpass gemacht wird.


Stefan S. schrieb:
> Was hält dich denn davon ab, die Grenzfrequenz einfach unter 50 Hz zu
> setzen? Du willst ja nur den Gleichsspannungsanteil herausfiltern.
> Im Grunde brauchst du aber ohnehin einen Bandpass - Untere Grenzfrequenz
> bei <50 Hz und obere Grenzfrequenz bei >1800 Hz.

Ok also mal angenommen der Tiefpass reicht zum herausfiltern des Sinus 
aus und der anschließende Hochpass zum entfernen des Offset, dann hätte 
ich ja im Prinzip schon meinen Bandpass (Tiefpass + Hochpass = Bandpass) 
oder sehe ich das falsch ?
Die Frage ist, kann ich dann einfach zwei Fliegen mit einer Klappe 
schlagen und die Grenzfrequenz des Tiefpasses bei <50 Hz ansiedeln und 
die Grenzfrequenz des Hochpasses bei >1800 Hz und hätte dann quasi schon 
meinen Bandpass ?


Freundliche Grüße

Laura

von Falk B. (falk)


Lesenswert?

Laura M. schrieb:
> direkt ein analoger Sinus erzeugt, sondern eine hochfrequente PWM, auf
> die ein Sinus "aufmoduliert" ist.

Stimmt soweit. Und das ist wirklich moduliert, ganz ohne 
Anführungszeichen.

> Durch anschließendes Filtern mit einem Tiefpass wird die hochfrequente
> PWM herausgefiltert und dadurch entsteht ein "echter" analoger Sinus.

Auch hier keine Gänsefüsschen, denn der Filter macht das was er soll, er 
filtert die hochfrequenten Signalanteile raus.

> Wobei ich noch unsicher bin, ob da ein einfacher Tiefpass reicht,

Das kommt auf die PWM-Frequenz und deine Nutzfrequenzen an. Je näher die 
beisammen liegen, umso steiler muß dein Filter sein. Wenn die PWM 100kHz 
hat und die aber max. 2kHz Sinus ezeugen willst, ist es einfach. Bei 
niedrigeren PWM-Frequenzen wird es aufwändiger.

https://www.mikrocontroller.net/articles/Pulsweitenmodulation#DA-Wandlung_mit_PWM

> finden sich im Internet auch Beispiele wo hier z.B. ein chebyshev-Filter
> verwendet wird.
> In meinem Fall wird die Sinus-Spannung dann noch verstärkt.

Dann hast du sowieso einen OPV und mußt den nur passend als 
Addierverstärker beschalten, schon ist dein Mittelwert (=Gleichanteil) 
verschoben.

> Also ich habe jetzt mal nach "remove DC-Offset from Sine-Wave" gegoogelt
> und da kommen tatsächlich viele Beispiele wo das einfach mit einem
> Hochpass gemacht wird.

Kann man machen, wenn die Randbedingungen stimmen. Vor allem darf die 
untere Grenzfrequenz nicht zu niedrig sein, denn sonst wird der 
Kondensator riesengroß.

> Ok also mal angenommen der Tiefpass reicht zum herausfiltern des Sinus
> aus und der anschließende Hochpass zum entfernen des Offset, dann hätte
> ich ja im Prinzip schon meinen Bandpass (Tiefpass + Hochpass = Bandpass)

Ja.

> oder sehe ich das falsch ?

Nein.

> Die Frage ist, kann ich dann einfach zwei Fliegen mit einer Klappe
> schlagen und die Grenzfrequenz des Tiefpasses bei <50 Hz ansiedeln und
> die Grenzfrequenz des Hochpasses bei >1800 Hz und hätte dann quasi schon
> meinen Bandpass ?

Ja, dann hälst du in hervoragender Weise dein Nutzsignal vom Ausgang 
fern ;-)
Nochmal über die Frequenzen von Hoch- und Tiefpaß nachdenken!

> Freundliche Grüße
>
> Laura

Die zu 90%ier Wahrscheinlichkeit keine echte Laura ist ;-)

von Stefan F. (Gast)


Lesenswert?

Warum so kompliziert  mit OP-Amp? Schalte einfach einen Kondensator in 
Reihe zum Ausgang des µC.
1
           C           Last
2
PWM 5V o----||----+----[===]---| GND

Am Kondensator wird Spannung abfallen, da er einen gewissen 
Frequenzabhängigen Widerstandswert hat:

Rc = 1(6,28*F*C)

Zum Beispiel hat 1µF bei 50Hz etwa 1,6k Ohm. Wenn die Last zum Beispiel 
100k Ohm Eingangswiderstand hat, ist der Spannungsabfall am Kondensator 
nur minimal.

Bei einer anderen Last nimmst du einfach einen dazu passenden 
Kondensator.

von Laura M. (laura89)


Lesenswert?

Hallo,

Aaaalso:

Stefanus F. schrieb:
> Warum so kompliziert  mit OP-Amp? Schalte einfach einen Kondensator in
> Reihe zum Ausgang des µC.
Das war ja mein erster Gedanke (siehe oben), jedoch bestand 
Unsicherheit, ob das in diesem Falle ausreicht, da es (siehe Erklärung 
von falk):
Falk B. schrieb:
>> Wobei ich noch unsicher bin, ob da ein einfacher Tiefpass reicht,
>
> Das kommt auf die PWM-Frequenz und deine Nutzfrequenzen an. Je näher die
> beisammen liegen, umso steiler muß dein Filter sein. Wenn die PWM 100kHz
> hat und die aber max. 2kHz Sinus ezeugen willst, ist es einfach. Bei
> niedrigeren PWM-Frequenzen wird es aufwändiger.
nicht immer ausreicht.

Den Op-Amp brauche ich sowieso zum Verstärken (siehe Skizze), wobei ich 
nochmal überdenken muss, ob da nicht doch besser ein Bipolar oder FET 
her muss, weil der Sinus auf +/- 30V verstärkt werden soll.
Zunächst aber, soll ein vernünftiger Sinus zum Vorschein kommen und dann 
geh ich zum nächsten Step.

Falk B. schrieb:
>> Die Frage ist, kann ich dann einfach zwei Fliegen mit einer Klappe
>> schlagen und die Grenzfrequenz des Tiefpasses bei <50 Hz ansiedeln und
>> die Grenzfrequenz des Hochpasses bei >1800 Hz und hätte dann quasi schon
>> meinen Bandpass ?
>
> Ja, dann hälst du in hervoragender Weise dein Nutzsignal vom Ausgang
> fern ;-)
> Nochmal über die Frequenzen von Hoch- und Tiefpaß nachdenken!
Da hast du natürlich Recht, in dem Fall hätte ich eine Band-Sperre für 
meinen Sinus-Frequenzbereich gebaut, es muss natürlich genau anders 
herum.

Falk B. schrieb:
> Die zu 90%ier Wahrscheinlichkeit keine echte Laura ist ;-)
Was ist denn eine "echte Laura" ? Auf jeden Fall ist das mein Name :-P

Freundliche Grüße

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

Laura M. schrieb:

> Den Op-Amp brauche ich sowieso zum Verstärken (siehe Skizze),

Eben.

> wobei ich
> nochmal überdenken muss, ob da nicht doch besser ein Bipolar oder FET
> her muss, weil der Sinus auf +/- 30V verstärkt werden soll.

Das macht man aber nicht mit einem einzelnen Transistor sondern nimmt 
einen fertigen, vollintegrierten Verstärker-IC. Denn bis ein Anfänger 
aus einem Transistor eine brauchbare Endstufe gemacht hat, ist 
Weihnachten dreimal vorbei. TDA2030, TD2050 und TDA7294 sind deine 
Freunde.

> Zunächst aber, soll ein vernünftiger Sinus zum Vorschein kommen und dann
> geh ich zum nächsten Step.

Der früher (tm) Schritt hieß.

>> Die zu 90%ier Wahrscheinlichkeit keine echte Laura ist ;-)
> Was ist denn eine "echte Laura" ? Auf jeden Fall ist das mein Name :-P

Bei weitem nicht alle Forenteilnehmer mit weiblichen Vornamen sind auch 
in der realen Welt weiblich. So what! Namen sind Schall und Rauch und 
das Geschlecht ein gesellschaftliches Konstrukt (Wenn man den 
Gender-Irren Glauben schenken will).

von HildeK (Gast)


Lesenswert?

Stefanus F. schrieb:
> Warum so kompliziert  mit OP-Amp? Schalte einfach einen Kondensator in
> Reihe zum Ausgang des µC.           C           Last
> PWM 5V o----||----+----[===]---| GND

Genau das habe ich in dem Verlauf des Threads auch gefragt!

Natürlich reicht das aus. Das variable Tastverhältnis ist ja genau die 
Information vom Sinus. Und das C wirkt als Hochpass, um den 
unerwünschten Gleichanteil loszuwerden.
Unabhängig davon braucht man auch einen Tiefpass, der den PWM-Anteil 
glättet / entfernt.
Das sind aber zwei verschiedene Dinge.

von Wolfgang (Gast)


Lesenswert?

HildeK schrieb:
> Genau das habe ich in dem Verlauf des Threads auch gefragt!
>
> Natürlich reicht das aus.

Irgendwie doch nicht, wenn hinten eine Sinusamplitude von 30V rauskommen 
soll ;-)

Laura M. schrieb:
> Den Op-Amp brauche ich sowieso zum Verstärken (siehe Skizze), wobei ich
> nochmal überdenken muss, ob da nicht doch besser ein Bipolar oder FET
> her muss, weil der Sinus auf +/- 30V verstärkt werden soll.

von svensson (Gast)


Lesenswert?

Nur für mein Verständnis. Wie kann den die Ausgangsamplitutde beim 
Adruino (Uno) verändert werden?
Ich dachte, analogWrite() würde grundsätzlich nur das Tastverhältnis der 
PWM verändern? Erfolgt da noch eine Integration über einen Kondensator?

von Falk B. (falk)


Lesenswert?

svensson schrieb:
> Nur für mein Verständnis. Wie kann den die Ausgangsamplitutde beim
> Adruino (Uno) verändert werden?

Welche denn? Der einfache Arduino (Uno) hat nur Digitalausgänge, die 
schalten immer mit VCC, sprich 5V.

> Ich dachte, analogWrite() würde grundsätzlich nur das Tastverhältnis der
> PWM verändern?

Tut es auch.

>Erfolgt da noch eine Integration über einen Kondensator?

Fast. Es erfolgt eine Filterung des modulierten PWM-Signals, woraus dann 
ein Sinus entsteht. Das ist das Grundprinzip eines Klasse D Verstärkers.

Beitrag "Re: H-Bridge 50Hz Sinus - LC Filter dimensionieren"

Der Filter dämpft alle Frequenzanteile ab der PWM-Frequenz und höher, 
sodaß im Idealfall nur noch der Mittelwert (Gleichanteil) des 
PWM-Signals übrig bleibt.

von svensson (Gast)


Lesenswert?

Ah, danke. Da ist aber noch ein IC zwischen Arduino und Filter.

Angenommen alle Bauteile hätten ideale Eigenschaften, dann dürfte da 
doch eigentlich kein Sinus entstehen können?

von Stefan S. (chiefeinherjar)


Lesenswert?

svensson schrieb:
> Angenommen alle Bauteile hätten ideale Eigenschaften, dann dürfte da
> doch eigentlich kein Sinus entstehen können?

Warum?
Also kurzum gerade WENN die Bauteile ideal sind/wären, entsteht ein 
störungsfreier Sinus. (Vorausgesetzt, die BE sind korrekt 
dimensioniert).

von Falk B. (falk)


Lesenswert?

svensson schrieb:

> Ah, danke. Da ist aber noch ein IC zwischen Arduino und Filter.

Im dem Beitrag? Jain, dort ist ein Leistungstreiber drin, weil ja 
deutlich höhere Spannungen und Ströme am Ausgang gebraucht werden. Man 
kann aber auch einen einfachen RC-Filter direkt an den Arduino 
anschließen, das wurde dort auch gemacht, um den Sinus am Oszi bewerten 
zu können.

> Angenommen alle Bauteile hätten ideale Eigenschaften, dann dürfte da
> doch eigentlich kein Sinus entstehen können?

Unsinn.

von svensson (Gast)


Lesenswert?

Wenn ein perfektes Rechteck am Ausgang entstehen würde, bei dem sich 
lediglich das Tastverhältnis ändert, dann gibt es nur einen 
rechnerischen Mittelwert, aber keinen physikalischen.

Offenbar findet die physikalische Mittelwertbildung erst im Kondensator 
des Filters statt. Als Problem müßte dann doch eine Lastabhängigkeit 
auftreten?

Das in der obigen Grafik gezeigte Signal vor dem Filter ist dann so 
nicht korrekt, da die Impulse immer Vcc haben.

von svensson (Gast)


Lesenswert?

Hauptsächlich ging es mir darum, ob der der Aduino Uno einen echten DAC 
hat. Das gilt aber offensichtlich erst für den Due.

Die Idee mit der Filterschaltung ist interessant, die merke ich mir, 
falls ich ein entsprechendes Projekt habe. Eine Stromverstärkung könnte 
dann mittels eines OPV erfolgen.

(Wie man vielleicht merkt, bin ich Theoretiker, der mit den Tücken der 
Praxis konfrontiert wird...)

von Falk B. (falk)


Lesenswert?

svensson schrieb:
> Wenn ein perfektes Rechteck am Ausgang entstehen würde, bei dem sich
> lediglich das Tastverhältnis ändert, dann gibt es nur einen
> rechnerischen Mittelwert, aber keinen physikalischen.

Es gibt auch einen physikalischen, wenn man dort z.B. einen Widerstand 
anschließt. Dessen Erwärmung ist vom Mittelwert abhängig.

> Offenbar findet die physikalische Mittelwertbildung erst im Kondensator
> des Filters statt.

Sicher. Aber das geht auch im idealen Kondensator.

> Als Problem müßte dann doch eine Lastabhängigkeit
> auftreten?

Dafür gibt es Verstärker, welche den Filter puffern.

> Das in der obigen Grafik gezeigte Signal

Welche Grafik?

> vor dem Filter ist dann so
> nicht korrekt, da die Impulse immer Vcc haben.

Nö, du bist auf dem Holzweg.

PWM_AVR.png zeigt die Digitalsignale des AVRs
PWM_RC-Filter.png zeigt die gefilterten Signale nach einem einfachen RC 
Filter mit 1kOhm + 220nF

von foobar (Gast)


Lesenswert?

> Ich dachte, analogWrite() würde grundsätzlich nur das Tastverhältnis der
> PWM verändern?

Korrekt.

> Erfolgt da noch eine Integration über einen Kondensator?

Ja, so nen Integrator nennt man auch Tiefpass[1] ;-) Der Tiefpass kann 
diskret aufgebaut sein (z.B. R-C Filter) aber auch aus parasitären 
Effekten entstehen, insb bei mechanischen Teilen wie Motor oder 
Lautsprecher.



[1] Btw, ein Differenzierer ist ein Hochpass.

von svensson (Gast)


Lesenswert?

Falk B. schrieb:
> Welche Grafik?

Ich meine die Grafik von Laura M. ->> Laura M. schrieb im Beitrag 
#5645027:

Die Bilder unter Deinem Link sind schon so, wie ich es erwarten würde.

foobar schrieb:
> parasitären Effekten entstehen, insb bei mechanischen Teilen wie
> Motor oder Lautsprecher.

Ja, das ist es. Natürlich habe ich schon Motoren per PWM so gesteuert.

> Es gibt auch einen physikalischen, wenn man dort z.B. einen Widerstand
> anschließt. Dessen Erwärmung ist vom Mittelwert abhängig.

Sicherlich, aber es müssen eben am Ausgang weitere Bauteile hinzukommen, 
die können dann auch ideal sein.

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.