Forum: Mikrocontroller und Digitale Elektronik PWM-Analogsignal invertieren


von Robert (Gast)


Lesenswert?

Guten Abend liebe Forengemeinde.
Dies ist mein erster Beitrag in eurem Forum, wobei mich seit längerem 
zahlreiche Recherchen zu eurem Forum geführt haben und diese dann auch 
zur Zufriedenheit beantwortet wurden.

Leider ergab eine gründlich Recherche zu folgendem Thema kein sinnvolles 
Ergebnis.

Ich stehe vor folgendem Problem:
Ich möchte mittels eines PWM-Signals meines Arduino Nano eine 
Konstantstromquelle ansteuern (integrierter PWM-Eingang).
Die KSQ reduziert bei steigender Spannung am PWM-Eingang die Helligkeit 
der LED. Leider ist die "fertige" (nicht von mir erstellte) 
Programmierung so geschrieben, das bei LED=Aus der PWM-Ausgang auch 0V 
hat.
Das bedeutet, die LED ist an wenn sie ausgeschaltet sein sollte...
Softwaretechnich möchte und kann ich dies auch nicht ändern (zu wenig 
Erfahrung mit C++).
Ich bervorzuge eine Hardwareseitige Lösung, da die LED beim Einschalten 
des Arduino bis zur dessen Bereitschaft, wegen fehlenden PWM-Signal 
direkt leuchten würde. Auch wenn der Arduino resettet werden sollte geht 
die LED damit an.

Deshalb die Frage an euch. Wie bastele ich mir kostengünstig eine 
Schaltung, die das PWM-Signal genau invertiert? Also bei PWM=0V -> 5V 
und PWM=5V -> 0V. Auch die Zwischenbereiche möchte ich möglichst 
abdecken, also PWM=3V -> 2V


Ich danke euch im Voraus für die Mühe! :)

von Wolfgang (Gast)


Lesenswert?

Robert schrieb:
> Softwaretechnich möchte und kann ich dies auch nicht ändern (zu wenig
> Erfahrung mit C++).

Du könntest das PWM-Signal invertieren.
Aber meinst du nicht, eine Programmzeile mit
1
y' = 1 - y
 oder wie auch immer dein PWM-Signal normiert ist, wäre einfacher 
einzufügen?

von Heinz (Gast)


Lesenswert?

Normalerweise analogWrite(pin, value)
invertiert analogWrite(pin, 255-value)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das PWM-Signal hat exakt zwei Spannungen, 0V und 5V.

Spannungswerte dazwischen gibt es keine, die werden erst durch 
Integration des Signals gebildet (d.h. je länger es auf 5V ist, desto 
höher die resultierende Spannung).

Und damit ist die Aufgabe sehr einfach zu lösen:
Direkt zwischen den PWM-Ausgang des µCs und den daran angeschlossenen 
Kram kommt ein einzelner Inverter, wie er sechsfach in einem 74xx04 
enthalten ist (xx=HC, LS, AC, wasauchimmer).

Mit zwei Widerständen und einem Transistor lässt sich das Ziel auch 
erreichen.

https://i.stack.imgur.com/5A9pw.gif
(hier wahlweise für einen NPN- und einen PNP-Transistor dargestellt)

von Christian S. (roehrenvorheizer)


Lesenswert?

Hallo,

entweder Du invertierst das digitale PWM-Signal oder gibst die analoge 
Spannung auf einen geeigneten Subtrahierer mit OPV.

https://www.mikrocontroller.net/articles/Operationsverst%C3%A4rker-Grundschaltungen

mfG

von Robert (Gast)


Lesenswert?

Wolfgang schrieb:
> Du könntest das PWM-Signal invertieren.
> Aber meinst du nicht, eine Programmzeile mity' = 1 - y oder wie auch
> immer dein PWM-Signal normiert ist, wäre einfacher einzufügen?

Sicherlich wäre dies einfacher. Das Programm was ich da erhalten habe 
ich jedoch sehr komplex. Außerdem steht ja noch das Problem mit der 
Bootzeit des Ardunio im Raum. Gibt es keine einfache Schaltung?

von Wolfgang (Gast)


Lesenswert?

Robert schrieb:
> Gibt es keine einfache Schaltung?

Das kommt drauf an, was während des Bootens am Steuereingang der KSQ 
passieren muss, damit alles glatt läuft.

von Thomas E. (thomase)


Lesenswert?

Robert schrieb:
> Gibt es keine einfache Schaltung?

Ja, das, was Rufus dir vorgeschlagen hat: Transistor und 2 Widerstände 
oder ein Inverter-IC und ein Stützkondensator.

von Einer K. (Gast)


Lesenswert?

Robert schrieb:
> Gibt es keine einfache Schaltung?

NPN + zwei R

von Thomas E. (thomase)


Lesenswert?

Christian S. schrieb:
> entweder Du invertierst das digitale PWM-Signal oder gibst die analoge
> Spannung auf einen geeigneten Subtrahierer mit OPV.

Aus einem Arduino kommt keine analoge Spannung. Was die analog nennen, 
ist eine PWM.

Beitrag #5240007 wurde vom Autor gelöscht.
von Joe F. (easylife)


Lesenswert?

Arduino F. schrieb:
> NPN + zwei R

Ist nicht wirklich ein Inverter, da high und low mit unterschiedlichen
Impedanzen getrieben werden.

Es gibt allerdings schön kleine Single-Gate Inverter, die sowohl high
als auch low treiben.

Beispiel: NC7S04M5X

Gibt's z.B. bei Conrad für 50 Cent.

Den Inverter setzt du einfach zwischen den Ausgangspin und den
Lowpass-Filter (RC).
Zwischen VCC und GND des ICs kommt dann noch ein 100nF
Stütz-Kondensator.

Wenn dir DIL lieber ist: z.B. CD74HC4049E

von Thomas E. (thomase)


Lesenswert?

Joe F. schrieb:
> Den Inverter setzt du einfach zwischen den Ausgangspin und den
> Lowpass-Filter (RC).

Ich bezweifle mal, daß da sowas drin ist. Die KSQ wird mit PWM gesteuert 
und dem hochohmigem Eingang dürfte das

Joe F. schrieb:
> Ist nicht wirklich ein Inverter, da high und low mit unterschiedlichen
> Impedanzen getrieben werden.

egal sein.

von Wolfgang (Gast)


Lesenswert?

Thomas E. schrieb:
> Aus einem Arduino kommt keine analoge Spannung. Was die analog nennen,
> ist eine PWM.

Das kommt drauf an, was das für ein Arduino das ist. Der Due hat zwei 
echte Analogausgänge.

von Thomas E. (thomase)


Lesenswert?

Wolfgang schrieb:
> Das kommt drauf an, was das für ein Arduino das ist. Der Due hat zwei
> echte Analogausgänge.

Ok.

Aber der TO schrieb oben erstens vom Nano und zweitens vom PWM-Eingang 
der KSQ.

von Der falsche MaWin (Gast)


Angehängte Dateien:

Lesenswert?

Robert schrieb:
> Gibt es keine einfache Schaltung?

Ich habe hier mal einen Inverter aufgetrieben der in Wirklichkeit gar 
nicht invertiert. Erst wenn man die LED parallel zum Transistor schaltet 
wird invertiert. Oder man dreht die Schaltung auf dem Kopf und baut 
statt eines NPN-Transistors einfach einen PNP-Transistor (BC327) ein.

Vielleicht reicht es aber auch aus, wenn die LED am Ausgang von dem 
PWM-Signal nach Vcc geschaltet wird, statt nach Masse. Dann wird ja 
automatisch invertiert? Ganz ohne Schaltung.

von Thomas E. (thomase)


Lesenswert?

Der falsche MaWin schrieb:
> Vielleicht reicht es aber auch aus, wenn die LED am Ausgang von dem
> PWM-Signal nach Vcc geschaltet wird, statt nach Masse. Dann wird ja
> automatisch invertiert? Ganz ohne Schaltung.

Vielleicht hättest du mal den Eröffnungsbeitrag lesen sollen.

von Einer K. (Gast)


Angehängte Dateien:

Lesenswert?

Der falsche MaWin schrieb:
> Ich habe hier mal einen Inverter aufgetrieben der in Wirklichkeit gar
> nicht invertiert.

Und ich habe deinen Plan mal zu einem "Richtigen Inverter" umgemalt

von Robert (Gast)


Lesenswert?

Arduino F. schrieb:
> Und ich habe deinen Plan mal zu einem "Richtigen Inverter" umgemalt

Danke an euch alle. Ich probier es gleich mal aus.

von Der falsche MaWin (Gast)


Lesenswert?

Thomas E. schrieb:
> Vielleicht hättest du mal den Eröffnungsbeitrag lesen sollen.

Robert schrieb:
> Auch die Zwischenbereiche möchte ich möglichst
> abdecken, also PWM=3V -> 2V

Da ein PWM-Signal ohne nachgeschalteten Tiefpass keine Zwischenbereiche 
hat, ist meine Lösung also die Beste.

von Der falsche MaWin (Gast)


Lesenswert?

Arduino F. schrieb:
> Und ich habe deinen Plan mal zu einem "Richtigen Inverter" umgemalt

Jaa genau, das ist noch besser. Und jetzt könnte noch mein falscher 
Inverter dahinter geschaltet werden, damit die LED mit dem invertierten 
Signal richtig angesteuert werden kann.

Beitrag #5240060 wurde vom Autor gelöscht.
von Einer K. (Gast)


Lesenswert?

Der falsche MaWin schrieb:
> damit die LED mit dem invertierten
> Signal richtig angesteuert werden kann.

Vielleicht hättest du mal den Eröffnungsbeitrag lesen sollen.

von Der falsche MaWin (Gast)


Lesenswert?

Arduino F. schrieb:
> Vielleicht hättest du mal den Eröffnungsbeitrag lesen sollen.

Wieso, was ist denn jetzt schon wieder? Hab ich doch gemacht, sonst 
wüsste ich das doch alles gar nicht.

von Einer K. (Gast)


Lesenswert?

Ein zweiter Transistor ist flüssiger als Wasser.
Überflüssig.

von Thomas E. (thomase)


Lesenswert?

Arduino F. schrieb:
> Ein zweiter Transistor ist flüssiger als Wasser.
> Überflüssig.

Lass ihn, der trollt doch nur.

von Robert (Gast)


Lesenswert?

Arduino F. schrieb:
> Und ich habe deinen Plan mal zu einem "Richtigen Inverter" umgemalt

So...
Ich habe die Zeichnung mal in den Simulator geworfen.
Funktioniert hier Prima :)
Um die annähernd genaue Umwandlung von 5V->0V und 0V->5V habe ich einen 
60 Ohm Kollektorwiderstand eingesetzt. Der Basiswiderstand 4k7 ist 
geblieben.
Bei einer Basisspannung von 5V (LED an) fließt theoretisch ein 
Kollektor-Emiter-Strom von 81mA.
Ist das noch vertretbar mit einem Handelsüblichen Transistor?

von Stefan F. (Gast)


Lesenswert?

Offtopic: Ich habe gerade gelernt, dass man bei STM32F1 einfach nur ein 
Bit in einem Register setzen muss, um das Signal zu invertieren.

von Joe F. (easylife)


Lesenswert?

Robert schrieb:
> Um die annähernd genaue Umwandlung von 5V->0V und 0V->5V habe ich einen
> 60 Ohm Kollektorwiderstand eingesetzt. Der Basiswiderstand 4k7 ist
> geblieben.

Das ist das, was ich meine.
Mit einem Push-Pull Inverter hast du dieses Problem nicht. Da high und 
low die gleiche Impedanz haben, handelt man sich keine Asymmetrie ein.

> Bei einer Basisspannung von 5V (LED an) fließt theoretisch ein
> Kollektor-Emiter-Strom von 81mA.
> Ist das noch vertretbar mit einem Handelsüblichen Transistor?

Kommt auf die Sichtweise an. Der Transistor wird es überleben, aber du 
erzeugst dir unnötige Pulse auf der Versorgungsspannung.
Und der Kollektorwiderstand muss im Zweifel 1/2 W verheizen können.


Die 80mA benötigst du ja auch nur, wenn deine KSK einen relativ 
niederohmigen PWM Eingang hat.
Mit welcher Impedanz hast du den Low-Pass der KSK denn angenommen / 
simuliert?

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Der falsche MaWin schrieb:
> Da ein PWM-Signal ohne nachgeschalteten Tiefpass keine Zwischenbereiche
> hat, ist meine Lösung also die Beste.

Das kommt drauf an, wovon man redet.
Der Mittelwert vom PWM liegt zwischen 0 und 100% des Signalpegels ;-)

Robert schrieb:
> Um die annähernd genaue Umwandlung von 5V->0V und 0V->5V habe ich einen
> 60 Ohm Kollektorwiderstand eingesetzt.

Warum so ein kleiner Widerstand. Auch wenn du 1A fließen lässt, wirst du 
nicht genau 5V erreichen und die 0V schon gar nicht, weil U_CE eher bei 
0.3V liegt - genaueres im Datenblatt.

Welchen Pegel braucht denn deine KSQ am Steuereingang?
Normalerweise liegt die Schaltschwelle bei 50%, manchmal für High bei 
70%.

von Thomas E. (thomase)


Lesenswert?

Stefan U. schrieb:
> Offtopic: Ich habe gerade gelernt, dass man bei STM32F1 einfach nur ein
> Bit in einem Register setzen muss, um das Signal zu invertieren.

Das macht man bei der PWM beim AVR auch. Jetzt hast du schon wieder was 
gelernt.

von Robert (Gast)


Lesenswert?

Joe F. schrieb:
> Die 80mA benötigst du ja auch nur, wenn deine KSK einen relativ
> niederohmigen PWM Eingang hat.
> Mit welcher Impedanz hast du den Low-Pass der KSK denn angenommen /
> simuliert?

Die KSQ hat tatsächlich einen sehr niederohmigen PWM-Eingang. Ich habe 
einfach aus Versuchszwecken einen 5k Wiederstand an den GND des PWM 
Eingangs gelegt.


Wolfgang schrieb:
> Welchen Pegel braucht denn deine KSQ am Steuereingang? Normalerweise
> liegt die Schaltschwelle bei 50%, manchmal für High bei 70%.

Das ist eine Interessante Frage. Ich nahm bisher an das der PWM Eingang 
eine Dimmfunktion beinhaltet. Also bei niedriger Eingangsspannung am PWM 
Eingang ein höherer Ausgangsstrom am LED Ausgang

von Wolfgang (Gast)


Lesenswert?

Robert schrieb:
> Ich nahm bisher an das der PWM Eingang
> eine Dimmfunktion beinhaltet.

Wenn das wirklich ein PWM-Eingang ist, liegt die Steuerinformation im 
Tastverhältnis und nicht im (genauen) Spannungspegel.

Vielleicht solltest du erstmal klären, was die Kiste braucht.

von Thomas E. (thomase)


Lesenswert?

Robert schrieb:
> Die KSQ hat tatsächlich einen sehr niederohmigen PWM-Eingang. Ich habe
> einfach aus Versuchszwecken einen 5k Wiederstand an den GND des PWM
> Eingangs gelegt.

Lass mal das Datenblatt von der KSQ rüberwachsen. Ich befürchte mal, daß 
mindestens einer in diesem Thread ganz gehörig auf dem Holzweg ist.

von Joe F. (easylife)


Lesenswert?

Robert schrieb:
> Die KSQ hat tatsächlich einen sehr niederohmigen PWM-Eingang. Ich habe
> einfach aus Versuchszwecken einen 5k Wiederstand an den GND des PWM
> Eingangs gelegt.

Also das klingt recht ungewöhnlich.
Entweder ist es ein reiner Digitaleingang, dann reicht auch ein PWM 
Pegel von 1V/4V, oder hinter dem Eingang liegt erstmal ein 
Tiefpassfilter, der aus dem Eingangssignal ein Analogsignal macht.

Um das herauszufinden, hilft entweder das Datenblatt, oder ausprobieren.

Wenn man die LED Helligkeit durch Anlegen einer analogen Spannung 
zwischen 0V und 5V "stufenlos" dimmen kann, dann ist es die 
"Tiefpass-Variante".
Dann könnte man allerdings auch noch einen zusätzlichen Widerstand in 
Reihe legen, macht die Regelung zwar etwas träger, braucht dann aber 
nicht mehr so gewalttätige Ströme.

: Bearbeitet durch User
von Robert (Gast)


Lesenswert?


von Thomas E. (thomase)


Lesenswert?

Dann nimm dir mal ne Lupe und erzähl uns, was auf dem 8-Pinner 
draufsteht. Vielleicht lässt sich damit was anfangen.

von Robert (Gast)


Lesenswert?

Joe F. schrieb:
> Wenn man die LED Helligkeit durch Anlegen einer analogen Spannung
> zwischen 0V und 5V "stufenlos" dimmen kann, dann ist es die
> "Tiefpass-Variante".

Es scheint sich doch um einen reinen Digitaleingang zu handeln. Ich habe 
eine 1,5 Volt batterie an den PWM gehalten und die KSQ hat die LED 
komplett ausgeschaltet.
Sry für die Missverständnisse

Thomas E. schrieb:
> Dann nimm dir mal ne Lupe und erzähl uns, was auf dem 8-Pinner
> draufsteht. Vielleicht lässt sich damit was anfangen.

Das kann ich mit viel Licht auch mit bloßem Auge sehen.
XLSEMI
XL4001E1
22NR

von Joe F. (easylife)


Lesenswert?

http://www.xlsemi.com/datasheet/XL4001%20datasheet.pdf

Die PWM geht einfach auf den Enable-Eingang (digital).
Alles über 1.4V wird als "high" erkannt.

Nimm einfach den 1K Kollektorwiderstand. Das muss funktionieren und es 
wird auch keinerlei "Verzerrungen" der PWM geben.

Die 0.8V für ein "low" machen evtl. mehr Probleme mit dem NPN 
Transistor.
Du könntest stattdessen auch einen 2N7002 Fet nehmen, der schaltet 
deutlich besser auf 0V.

: Bearbeitet durch User
von Thomas E. (thomase)


Lesenswert?

Robert schrieb:
> Das kann ich mit viel Licht auch mit bloßem Auge sehen.

Respekt.

Check mal, ob der PWM-Eingang auf Pin 6 von dem Fiffi geht. Das würde 
sich mit dem oben beschriebenen Verhalten decken.

von Wolfgang (Gast)


Lesenswert?

Joe F. schrieb:
> Die 0.8V für ein "low" machen evtl. mehr Probleme mit dem NPN
> Transistor.

Die U_CE eines vernünftig durchgesteuerten NPN-Transistors liegt doch 
locker unter dem als V_EN Low-Wert angegebenen 0,8V. Wieso hast du da 
Bedenken?

Bei einem BC547 liegt die z.B. typisch bei 0,09V, maximal bei 0,25V 
(@10mA).
Und selbst 10mA wären für diese Anwendung noch mehr als reichlich.

von Peter D. (peda)


Lesenswert?

Rufus Τ. F. schrieb:
> Mit zwei Widerständen und einem Transistor lässt sich das Ziel auch
> erreichen.

Eher nicht, so ein RTL-Inverter ist bestenfalls für statische Signale 
geeignet. Die Laufzeiten sind gegenüber TTL oder CMOS vielfach höher und 
stark unsymmetrisch.
Eine PWM hat einen recht hohen Basistakt, d.h. das Tastverhältnis wird 
massiv verfälscht.

von Wolfgang (Gast)


Lesenswert?

Peter D. schrieb:
> Eine PWM hat einen recht hohen Basistakt, d.h. das Tastverhältnis wird
> massiv verfälscht.

Na ja, beim Arduino 8-Bit PWM mit seinen 490Hz liegt der Basistakt bei 
125kHz. Für einen 1-Bit Fehler müsste die Unsymmetrie schon etwa 8µs 
betragen. Und ob das bei einem Lampendimmer auffällt, ist noch die 
zweite Frage.

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.