Forum: Analoge Elektronik und Schaltungstechnik Probleme beim OPV umschalten zwischen invertierendem und nichtinvertierendem Betrieb


von Roman M. (aplocheilichthys)


Angehängte Dateien:

Lesenswert?

Hallo Forum,

für ein Projekt an der Uni benötige ich eine Schaltung die mir aus einem 
Signal von 0-5V ein Signal von -10V bis 10V. Es soll über einen Arduino 
(deshalb die 5V) ein Hydraulikventil (benötigt jene -10V bis 10V) 
angesteuert werden.

Im Voraus: Ich bin kein Elektrotechniker, habe mich nur hobbymäßig etwas 
damit befasst (vor dem Projekt). Ich hoffe das die folgende Beschreibung 
ausreichen Informationen leifert um mein Problem zu verstehen.

Nachdem ich versucht habe mich über allerlei Quellen schlau zu machen, 
bin ich nun soweit:
Dem Arduino entnehme ich nach Bedarf per PWM eine Spannung, diese lasse 
ich über ein RC-Filter glätten, um sie anschließend mit einem OPV 
(LM358, nach einem Forenbeitrag ausgewählt) um den Faktor 2 zu erhöhen. 
Das klappt soweit auch wunderbar. Bis auf die Tatsache dass das Filter 
doch sehr langsam ist. (Dieses Problem werde ich in den nächsten Tagen 
hoffentlich durch den Einsatz eines LTC2644 beheben. Der wandelt das 
PWM-Signal mit geringer Verzögerung in ein Analogsignal um,.. 
hoffentlich).

Was mir noch fehlte war die Möglichkeit die Polarität umzuschalten um 
auch den "negativen" Spannungsbereich abdecken zu können. Auch hier bin 
ich über eine Schaltung gestolpert, direkt hier im Forum, welche einen 
OPV mittels eines Steuersignals zwischen invertierendem und 
nichtinvertierendem Verhalten umschaltet.
Link:
Beitrag "OPV umschaltbar zwischen Invertieren/Nichtinvertieren"

Ich versuche jetzt seit einer geraumen Zeit das entsprechend dem 
Forenbeitrag nachzubauen (entsprechend der letzten Schaltung im Thread, 
auch nochmal angehangen), allerdings kommt dabei nichts sinnvolles raus. 
Den ersten Fehler habe ich noch entdeckt, ich hatte den OPV nur mit 
0-12V (unsymmetrisch) versorgt. Dazu habe ich mir noch den TLE2426 
(Virtual Ground) besorgt, um eine symmetrische Spannung, bzw. eine 
virtuelle Masse zu erzeugen. Jetzt kann ich mit meinem Steckernetzteil 
wenigstens schonmal den OPV mit -6V/6V versorgen um zu schauen ob die 
Schaltung so funktioniert.


Der Grundlegende Aufbau sieht dann folgendermaßen aus:
1. Das Netzteil wir an den TLE2426 (Virtual Ground) angeschlossen.
2. Arduino bekommt Speisespannung über die +12V vom Netzteil, und den 
TLE2426 (hier liegen somit ~6V an)
3. OPV erhält vom Netzteil +12 Volt und Masse, somit bzgl der Virtuellen 
Masse +6V/-6V
Ansonsten ist meine Schaltung äquivalent zu der angehangenen.

Die Schaltung funktioniert soweit, auch das invertieren der Spannung 
mittels Transistor gelingt. Allerdings erhalte ich nicht den exakten 
Betrag beim invertieren, i.e. bei 50% PWM erhalte ich "nichtinvertiert" 
2,43V, nach dem umschalten auf "invertierend" nur -1,92V. (Das gleiche 
erhalte ich wenn ich den Transistor durch einen "mechanischen Schalter" 
ersetze, daran liegts also nicht.)

Ich habe mal ein bisschen mit den Widerständen gespielt, wenn ich den 
Widerstand am nichtinvertierenden Eingang erhöhe (37,5k statt 10k) 
erhalte ich bei 50% PWM immerhin 2,43V zu -2,08V. (Mit 100k --> 2,43V zu 
-2,13V)
Ich habe in mehreren Quellen gelesen dass die Widerstände entsprechen R1 
= R2 = 2*R3 dimensioniert werden sollen, deshalb gehe ich davon aus dass 
dies nicht der richtige Weg ist.

An dem "Virtual Ground" Baurteil kann es meiner Meinung nach auch nicht 
liegen; das gibt konstant die gleiche Spannung an den Arduino 
(gemessen).

Kann mir jemand helfen den Fehler zu entdecken? Mir fällt gerade nichts 
mehr ein woran das liegen könnte.

Vielen Dank schonmal!

Grüße,
Roman

von Benedikt S. (Gast)


Lesenswert?

Nimm eine gescheiten i2c Adc mit dem erzeugst du eine Spannung. Mit 
einem Spannungsteiler erzeugst du 2.5 V diese Spannung und die ADC 
Spannung schickst du in deinen invertierenden Verstärker.
2.5V an +
ADC an -

ich würde ien versärkungsfaktor von 5 nehmen, dann kommst du gut über 
die +-10 V ohne an irgent welche Versorgunsspannungsgrenzen zu kommen.

von Joe F. (easylife)


Lesenswert?

Dein Schaltungsansatz ist ziemlich eigenartig.
Wesentlich einfacher wäre es, aus 0-5V direkt -10V..+10V zu machen. Der 
Verstärkungsfaktor wäre dann 4, und du benötigst einen entsprechenden 
Offset.

Um die PWM schneller in einen Analogwert zu wandeln empfiehlt sich ein 
Filter höherer Ordnung.

von Christian L. (cyan)


Lesenswert?

Benedikt S. schrieb:
> Nimm eine gescheiten i2c Adc

ADC? Du meinst wohl eher einen DAC.

von Joe F. (easylife)


Angehängte Dateien:

Lesenswert?

+/-16V ist übrigens grenzwertig für den LM358.
+/-12V reichen auch aus.

Welche Frequenz hat denn deine PWM?
Und mit welcher max. Verzögerung soll der Ausgangswert dem Eingangswert 
entsprechen (90%)?

: Bearbeitet durch User
von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

@ Roman M. (aplocheilichthys)

>für ein Projekt an der Uni benötige ich eine Schaltung die mir aus einem
>Signal von 0-5V ein Signal von -10V bis 10V. Es soll über einen Arduino
>(deshalb die 5V) ein Hydraulikventil (benötigt jene -10V bis 10V)
>angesteuert werden.

>Dem Arduino entnehme ich nach Bedarf per PWM eine Spannung, diese lasse
>ich über ein RC-Filter glätten,

OK.

> um sie anschließend mit einem OPV
>(LM358, nach einem Forenbeitrag ausgewählt) um den Faktor 2 zu erhöhen.

Jain.

>Das klappt soweit auch wunderbar. Bis auf die Tatsache dass das Filter
>doch sehr langsam ist. (Dieses Problem werde ich in den nächsten Tagen
>hoffentlich durch den Einsatz eines LTC2644 beheben. Der wandelt das
>PWM-Signal mit geringer Verzögerung in ein Analogsignal um,..
>hoffentlich).

Mach es wie Benedikt K. vorgeschlagen hat. Ein DA-Wandler per I2C 
(Arduino-Sprech Wire.h) und dahinter einen einfache OIPV mit Offset, 
dann kann man +/-10V in einem Rutsch erzeugen. Das Umschalten ist 
unsinnig.

>virtuelle Masse zu erzeugen. Jetzt kann ich mit meinem Steckernetzteil
>wenigstens schonmal den OPV mit -6V/6V versorgen um zu schauen ob die
>Schaltung so funktioniert.

Nein, denn du willst ja eine gescheite Masse haben. Wenn gleich der 
Trick mit der virtuellen Masse mit einem potentialfreien Netzteil 
funktioniert, so bleiben diverse Problemchen, u.a. die 
Strombelastbarkeit des Ausgangs. Besorg dir ein 12VAC Netzteil und mach 
daraus per Mittelpunktgleichrichtung +/-15V mit echter Masse.

>2. Arduino bekommt Speisespannung über die +12V vom Netzteil, und den
>TLE2426 (hier liegen somit ~6V an)

Da knallt es. Die Ausgangsmasse ist dann nicht mehr gleich 
Eingangsmasse! MÖÖÖP!

Siehe Anhang.

von Falk B. (falk)


Lesenswert?

Hmm, vielleicht besser nur ein 9V AC Netzteil, das reicht.

von Benedikt S. (Gast)


Lesenswert?

@Christian L man sollte noch einmal lesen, bevor man auf senden drückt. 
Meine natürlich einen DAC.

Joey F. hat sogar dankenswerter Weise alles für den TO berechnet.

von Roman M. (aplocheilichthys)


Lesenswert?

Hallo zusammen,

erstmal vielen Dank für die Antworten.


Joe F. schrieb:
> Um die PWM schneller in einen Analogwert zu wandeln empfiehlt sich ein
> Filter höherer Ordnung.
Zu dem gleichen Schluss bin ich auch gekommen. Da ich aber angenommen 
habe das es für mich als Laien eine etwas wackelige Angelegenheit werden 
könnte einen gut funktionierenden Filter n-ter Ordnung zu basteln 
(Bauteiltoleranzen... ), habe ich mich entschieden einen IC-Lösung zu 
verwenden. (Ok, zugegebenermaßen war ich auch etwas zu faul, als ich 
gesehen habe dass es eine vollintergrierte Lösung gibt... )
Als Anhaltspunkt nahm ich diesen Forumseintrag, 
Beitrag "DAU IC gesucht", insbesondere:
Dergute W. schrieb:
> Also sollte das ein Butterworth-Tiefpass mit einer Ordnung >=11
> hinbekommen.
Meine Anforderungen sind ähnlich wie in dem Beitrag:
PWM-Freq: 490 Hz;
V_Ripple(8-Bit-PWM, U=5V) = 0,0195V
Die Auslegung des Filters nach 
[https://www.mikrocontroller.net/articles/Pulsweitenmodulation#RC-Filter_dimensionieren]
RC-Filter: C=100µF, R = 1,3k


Joe F. schrieb:
> Welche Frequenz hat denn deine PWM?
Laut Datenblatt vom Arduino-µC bei Standardeinstellungen ~490Hz (bei 
Clock_freq: 16MHz, 8-Bit PWM-Auflösung, Multiplikator 128) . Hab ich 
auch nochmal nachgemessen. Ich nehm an dass die Frage auf die 
Filterdimensionierung abzielte?

Joe F. schrieb:
> Und mit welcher max. Verzögerung soll der Ausgangswert dem Eingangswert
> entsprechen (90%)?
Tut mir leid, ich verstehe die Frage nicht. Meinst du eine zeitliche 
Verzögerung? (Das Prozent verwirrt mich etwas, sorry /: )

Benedikt S. schrieb:
> Joey F. hat sogar dankenswerter Weise alles für den TO berechnet.
Jap, Danke auch für die Schaltung! Werde das mal so probieren. Eine 
Frage dazu noch, ich bin mir da nicht ganz sicher, unter welcher 
Bezeichnung kann ich die Art von OPV-Ansteuerung finden (ist das einfach 
ein Subtrahierverstärker?)? Damit ich das auch nochmal für mich 
durchrechnen und mir die Theorie zu Gemüte führen kann.


Falk B. schrieb:
> Das Umschalten ist
> unsinnig.
Das hatte ich befürchtet, insbesondere da ich das ganze für eine 
Regelung benötige (Ich sehe vor meinem geistigen Auge wie ihr euch an 
die Köpfe fasst...  (; )
Ich hatte gehofft dadurch die Auflösung nicht weiter zu verringern. Also 
256 Schritte (später sollen das 12-Bit sein) für 0-10V in beide 
Richtungen. Aber wie gesagt, ich dachte mir schon dass das für die 
Anwendung problematisch sein könnte.

Falk B. schrieb:
> Mach es wie Benedikt K. vorgeschlagen hat. Ein DA-Wandler per I2C
> (Arduino-Sprech Wire.h) und dahinter einen einfache OIPV mit Offset,
> dann kann man +/-10V in einem Rutsch erzeugen.
Ich werde mir den Vorschlag auch mal anschauen. Mit I2C hatte ich mich 
noch nicht sehr weit auseinandergesetzt. Bevor ich mich da weiter 
vertiefe hätte ich auch dazu noch eine Frage: Ergibt dass denn Probleme 
wenn ich 2 Zylinder parallel ansteuern möchte? Weil I2C ja eigentlich 
seriell funktioniert..

Falk B. schrieb:
> Besorg dir ein 12VAC Netzteil und mach
> daraus per Mittelpunktgleichrichtung +/-15V mit echter Masse.
Mir steht ein 30 V DC Netzteil zur Verfügung, ich hoffe die Anschaffung 
eines weiteren Netzteils vermeiden zu können. Ich glaube ich habe aber 
schon gesehen dass man damit auch eine symmetrische Spannung erzeugen 
kann, das werde ich auch nochmal recherchieren.



Falls es interessiert, oder hilft, etwas genauer über das Projekt:
Es sollen zwei Hydraulikzylinder angesteuert werden, das stellen der 
Zylinder erfolgt über Ventile mit eigenen Steuerkarten. Die Position der 
Ventile wird über eine Spannung gesteuert, jene -10V bis +10V, wobei die 
Eingangswiderstände sehr hoch sind, die Spannung hier also nur als 
Signal dient.
Die Zylinder sind übereinander angeordnet, so dass der obere der 
Bewegung des unteren folgt. Der untere soll eine vorgegebene Kurve 
fahren (bspw. sinusförmig), der obere soll die Bewegung durch eine 
Regelung ausgleichen.

Nochmal Danke für die Antworten, ich werde mich die nächsten Tage damit 
beschäftigen die Vorschläge auszuprobieren. Dann werde ich mich nochmal 
melden.
Ich hoffe dass ich eure Geduld nicht zu sehr auf die Probe stelle (;

Grüße,
R.

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.