Hallo,
Für einen HiWi-Job an der Uni habe ich folgende Problemstellung.
Ich benötige für einen Servo-Regler eine Spannung im Bereich von -1V bis
1V. Je nach Spannung und Polarität dreht der Motor dann durch den Regler
in verschiedene Richtungen mit verschiedenen Drehzahlen. Die Genauigkeit
ist hier erstmal nicht so wichtig es genügt wenn der Wert auf +-50mV
eingestellt werden kann.
Das ganze soll durch einen Arduino ermöglicht werden.
Durch Internetrecherche bin ich auf die Möglichkeit die Spannung mittels
PWM zu erzeugen gestoßen oder über R2R.
Da ich dann aus dem Unipolaren Signal ein Bipolares Signal machen muss,
bin ich auf eine Lösung mittels Operationsverstärker gekommen.
http://masteringelectronicsdesign.com/design-a-unipolar-to-bipolar-converter-for-a-unipolar-voltage-output-dac/
Da ich mit meinem Arduino Spannungen zwischen 0 und 5V erzeugen kann
muss ich abschwächen.
Nun habe ich zwei Lösungsmöglichkeiten in Betracht gezogen.
Entweder Abschwächung direkt beim Operationsverstärker.
(Ich habe diesen Rechner zur Hilfe gezogen)
http://masteringelectronicsdesign.com/differential-amplifier-calculator-2/
Oder die Abschwächung mit Hilfe eines Spannungsteilers.
Nun komme ich nicht weiter. Zu allererst weiß ich nicht, welchen
Operationsverstärker ich nehmen soll. Ist es grundsätzlich so, dass alle
Operationsverstärker auch abschwächen können bis runter zu 0V oder gibt
es auch Operationsverstärker die nur Signale über einer bestimmten
Spannung ausgeben können?
Außerdem weiß ich nicht ob es besser ist direkt durch den
Operationsverstärker abzuschwächen oder den Operationsverstärker das
Signal erstmal bipolar verstärken zu lassen z.B. von 0-5V auf -10V bis
10V und dann mit Hilfe eines Spannungsteilers abzuschwächen.
Lohnt sich der Aufwand für R2R überhaupt oder ist es mit PWM auch getan
(was ist genauer am Arduino und fällt das überhaupt ins Gewicht?)
Kann mir jemand weiter helfen, am besten mit einer Kaufempfehlung für
einen OP?
Danke schonmal für die Hilfe und ich hoffe ich habe mein Problem
verständlich geschildert.
Gruß Moritz
ein paar wichtige fragen müssten wir noch klären:
ist der Regler digital, also im Arduino und der Ausgang bereits das
signal für die leistungsendstufe oder, wovon ich ausgehe, wird das +-1v
signal der sollwert für einen nachgeschalteten Regler?
das hat Einfluss drauf welche Bandbreite bzw. änderungsgeschwindigkeit
diese Spannung haben muss. je höher diese sein muss, desto schwieriger
wird es die pwm ausreichend zu filtern und gleichzeitig genug zeitliche
Auflösung zu erhalten. machst du den filter mit niedriger eckfrequent
dauert es lang bis dein sollwert eingeschwungen ist, machst du die
eckfrequenz hoch wird die pwd nicht sauber gefiltert. also richtet sich
die minimale eckfrequent erstmal nach deiner änderungsgeschwindigkeit
für den sollwert. die pwd Frequenz muss deutlich darüber liegen, sodass
der filter sie sauber unterdrücken kann. liegt sie jedoch zu hoch, wirst
du Probleme haben die pwm fein genug aufzulösen durch den timer. es ist
also in gewissen grenzen ein Kompromiss.
das ausgangssingal dann auf einen Opv invertierend beschaltet. mit dem
Verhältnis aus rin zu rv kannst du von 0.5 auf 0.2 skalieren. am nicht
inv. einging kannst du durch eine entsprechende Spannung auf -1+1
verschieben.
Genau +-1V wird der Sollwert für einen nachgeschalteten Regler.
Das Problem ist, dass der Regler (der dann den Motor steuert) für mich
quasi eine Blackbox ist. Aus alten Unterlagen habe ich nur
herausgefunden, dass er eben ein analoges Signal zwischen -1V und 1V
benötigt. (Eigentlich zwischen -10V und 10V, die Geschwindigkeit soll
aber begrenzt werden)
Früher wurde das System über einen LPT Port, der zu einem DA Wandler
geführt hat der wiederum ein analoges Signal an den Motor gegeben hat
betrieben. Da der LPT Port immer Probleme macht und keiner mehr weiß was
der DA Wandler macht und wie er es macht, soll nun eben auf einen
Arduino umgestiegen werden, der den Regler des Motors bedient.
Somit weiß ich nicht genau wie schnell sich das Signal einstellen muss.
Allerdings wird der Motor nur dafür benützt eine Linearachse
anzutreiben. Der Verfahrweg wird dann nochmal über ein Poti gemessen.
"Arbeitsauftrag" meines Betreuers war es die Geschichte zum Laufen zu
bringen. Es ist für den Versuchsaufbau unerheblich wie genau die
Drehzahl des Motors eingestellt werden kann. Wichtig ist dass man sie
einstellen kann und dass man einen Unterschied "merkt". Die Umschaltzeit
von z.B. 0V auf 1V ist nicht so wichtig. Außer der Motorregler hat damit
ein Problem was ich leider nicht wissen kann.
das klingt also nicht nach einem besonders dynamischen system, zumindest
nicht was den sollwert angeht. wenn du von einer linearachse sprichst
und du einen Drehzahlregler verwendest wird die achse ja fast
zwangsläufig in die Anschläge fahren? bist du sicher, dass die
Geschwindigkeit gesteuert wird und es sich nicht um einen lagerealer
handelt?
sei es drum, es klingt nach einer vergleichsweise langsamen Geschichte,
was die sollwertänderungsrate angeht. d.h. ich würde definitiv auf pwm
und tiefpass gehen.
bei 2v und geforderten 50mv Genauigkeit ergeben das 40 schritte. das
schafft ein 8bit timer mit links. allerdings solltest du, wenn du
analogwrite beim Arduino verwendest bedenken dass der nur mit 500hz
arbeitet. man kann die Frequenz des timers auch hochstehen. dann wird
das mit dem filtern einfacher und ein system kann dynamischer werden.
nehmen wir mal an für dein system reichen 10Hz locker aus. dann hast du
mit einem tiefpass 1. ordnung vermutlich noch keinen besonders
befriedigenden erfolg. aber das kannst du auch super mit lt spice
simulieren. ich rate zu 2. Ordnung. wenn du es geschickt machst kannst
du ein rc Glied am Ausgang des Arduino und dann deutlich hochohriger in
den Opv rein über dessen gegenkopplung dann den 2. tiefpass setzen.
cableer schrieb:> wenn du es geschickt machst kannst> du ein rc Glied am Ausgang des Arduino und dann deutlich hochohriger in> den Opv rein über dessen gegenkopplung dann den 2. tiefpass setzen.
Wenn man es ganz geschickt macht, baut man um den OPV einen aktiven
Tiefpass mit komplexen Polstellen, z.B. einen Tschebyscheff Tiefpass
2.ter Ordung. Das gibt einen deutlich steileren Übergang vom
Durchlassbereich zum Sperrbereich. Eine Gegenüberstellung der
verschiedenen TP-Typen findet man z.B. um Tietze-Schenk.
Halbleiter-Schaltungstechnik, Kap. 12 Aktive Filter
So hab mich mal schnell hier angemeldet.
Ja Drehzahl wird geregelt. Der Motor treibt Zahnriemen an und das
Bauteil wird somit auf der Linearachse verschoben. Ich muss dann
natürlich das Poti auswerten welches am Aufbau mit dran hängt und bei
erreichen der gewünschten Fahrposition das Signal auf 0V schalten. Dann
weiß der Regler für den Motor er muss den Motor stoppen.
Vielen Dank auf jeden Fall für die Hilfe schonmal. Muss mich erstmal mit
Elektrotechnik anfreunden. Habe damit in meinem Studium sonst nicht viel
am Hut.
Was ich verstanden habe, ist dass ich einen Tiefpass zweiter Ordnung an
mein PWM Ausgang am Arduino hänge. Hier die Frage was für einen
Widerstand, Kondensator und was für eine Induktivität muss meine Spule
haben. In einem Beispiel aus einem Arduino Buch war nur ein Tiefpass 1.
Ordnung mit 1kOhm und 10nF.
Daran Schalte ich nun wie bei
http://masteringelectronicsdesign.com/differential-amplifier-calculator-2/
beschrieben meinen Opv
und daran kommt nochmal ein Tiefpass 2. Ordnung.
Mein größtes Problem ist weiterhin was für einen Opv kann ich dafür
benützen geht z.B.
https://www.reichelt.de/LM-358-DIP/3/index.html?ACTION=3&LA=446&ARTICLE=10483&artnr=LM+358+DIP&SEARCH=LM358
was mich hier verwirrt, ist die Beschreibung: Ausgangsspannung: 5 - 27
VDC
Wolfgang schrieb:> cableer schrieb:>> wenn du es geschickt machst kannst>> du ein rc Glied am Ausgang des Arduino und dann deutlich hochohriger in>> den Opv rein über dessen gegenkopplung dann den 2. tiefpass setzen.>> Wenn man es ganz geschickt macht, baut man um den OPV einen aktiven> Tiefpass mit komplexen Polstellen, z.B. einen Tschebyscheff Tiefpass> 2.ter Ordung. Das gibt einen deutlich steileren Übergang vom> Durchlassbereich zum Sperrbereich. Eine Gegenüberstellung der> verschiedenen TP-Typen findet man z.B. um Tietze-Schenk.> Halbleiter-Schaltungstechnik, Kap. 12 Aktive Filter
der Gedanke war mit nur einem Opv auszukommen, weniger die qualitativ
hochwertigste Lösung zu bieten. was die flanke angeht ist der
tschebyscheff natürlich deutlich besser.
@to: nicht mit spulen arbeiten. lieber nur rc.
für mich klingt das so als wäre das "Poti auswerten" ein zweiter
regelgreis der um den Drehzahlregler herum gestrickt wird als äußerer
regelkreis. in dem fall ist die Bandbreite des sollwertes eben nicht
total egal. wobei du mit einem langsameren äußeren kreis eher noch auf
der sicheren Seite bist.
Moritz B. schrieb:> Was für einen Operationsverstärker kann ich für meine ZweckeLM358 könnte passen. Kann ab +-1.5V Versorgungsspannung betrieben
werden.
Siehe App Note im Anhang.
Es geht auch ohne Operationsverstärker, siehe Beispiel im Screenshot.
Die Spannungsquelle V2 ist die 500Hz PWM des Arduino. Diese schaltet
eine Konstantstromquelle aus Q1 und Q2. An R2 wird daraus eine Spannung,
geglättet durch C1 und R1, C2. Die Nutzspannung wird zwischen out2 und
virtGND abgegriffen. Mit 18% bis 65% PWM entstehen die gewünschten +1V
bis -1V.
Die Schaltung kann von -2,5V bis +1,8V liefern. V1 stellt die 5V
Spannungsversorgung dar.
Hallo Moritz,
ich würde die Schaltung mit dem OPV nehmen, die Du schon selber raus
gesucht hast.
Ich denke auch das Zeitgeschichten bei Dir eher eine untergeordnete
Rolle spielen, da diese +/-1V nur eine Sollgröße für den Regler sind,
die ihm sagt wie schnell das Ding und in welcher Richtung es fahren
soll. Ich denke mal das jeder moderne OPV für Deine Sache ausreichend
schnell.
Jetzt mal konkret:
Die Schaltung macht bei 0V -5V und bei +5V +5V. Demzufolge kommt bei
2,5V 0V raus. Du mußt also dafür sorgen, das Dein Arduino als
Ruhezustand 2,5V ausgibt. Das geht am besten mit einem DA-Wandler (z.B.
CP4901-E/P PDIP-8, das Teil kostet 1,39€ bei C). Da die OPV-Schaltung
eine Steilheit von 1V/0,5V hat, mußt Du also eine Spannung von 2V für
-1V und 3V für +1V ausgeben. Wie fein Du das stufen kannst hängt von
Deinem DA-Wandler ab - die gibt es von 8 - 12bit.
Du benötigst für Dein Projekt also einen OPV (LM358, TL081 oder auch
einen klassischen Typ wie µA725/741), den DAC und den Arduino. Der Rest
wird mit Software erledigt. Wenn Du ganz gut bist siehst Du noch was
vor, das beim Einschalten 0V an Deine Blackbox gegeben werden und
Verbindung zu Deiner Schaltung erst dann hergestellt wird wenn das
System in einem stabilen Zustand ist.
Dies scheint mir die einfachste Lösung zu sein. Aufwandsmäßig gibt es
nach oben keine Grenzen - kommt halt drauf an was Du willst.
Zeno
Joe F. schrieb:> So rischdisch geil wäre ja die 0 .. -1V über eine 2. PWM und eine> chargepump zu erzeugen. dann fällt die negative versorgungsspannung> weg...
Prinzipiell hast Du da nicht ganz unrecht, aber Du brauchst halt 2 PWM's
und dann muß das Signal auch ordentlich geglättet werden, denn die
Blackbox des TO's wirkt definitiv nicht integrierend.
Das Prinzip wie ich es beschrieben habe, wurde in unserer Firma über
viele Jahre bei Schablonenbelichtern für die Steuerung des Kreuztisches
(Masse so um die 50kg) benutzt. Die Positioniergenauigkeit war besser
als 0,1µm. Also dieses Verfahren kann so schlecht nicht sein.
Zeno
Zeno schrieb:> und dann muß das Signal auch ordentlich geglättet werden
und genau da liegt auch das problem mit PWM. ich gebe dir vollkommen
recht, dass eine lösung mit symmetrischem power supply und op-amp am
besten ist. zusätzlich ein günstiger 8bit SPI DAC, und der lack glänzt.
Vielen Dank für die vielen Antworten hatte über das Wochenende leider
keine Zeit zu antworten. Ich werde mich jetzt mit Bauteilen eindecken
und mal ein bisschen Praktisch herumprobieren. Falls ich noch Fragen
habe bin ich hier ja gut aufgehoben!
Danke :)
Joe F. schrieb:> So rischdisch geil wäre ja die 0 .. -1V über eine 2. PWM und eine> chargepump zu erzeugen. dann fällt die negative versorgungsspannung> weg...
und wenn man die -U mit charge pump aus einer PWM erzeugt und von unten
an einen Spannungsteiler führt und oben +VCC dann kann man am
Mittelpunkt vonn -U bis +U steuern, so habe ich es mit einer
Kontrastspannung eines LCD gemacht.
http://www.holger-klabunde.de/dcdc/picdcdc.htm
geht auch mit Atmel!