Hallo Leute,
das Thema ist woanders schon aufgegriffen worden, jedoch eröffne ich
hier ein neuen Thread mit einer neuen Frage, da mit Sicherheit viele
auch an dieser Antwort interessiert sein werden.
Und zwar habe ich ein PWM-Signal mit einer PWM-Frequenz von 490 Hz (mehr
kann mein Arduino UNO nicht).
Um daraus nun ein analog Signal zu generieren, schalte ich ein RC-Filter
dahinter. Werte: R=900 Ohm und C=2e-6
Gedämpft wird es zwar schön, d.h. der Ripple ist in Ordnung, jedoch ist
die Dynamik nicht ausreichend.
Bei einem Sprung dauert es ca. 15ms, bis die analog-Spannung ihren
Endwert erreicht.
Nun meine Frage:
Mit welchem Filter kann man das ganze derart realisieren, dass der
Ripple weiterhin klein bleibt, jedoch die analog-Spannung schneller
ihren Endwert erreicht.
Ich würde es gerne hauptsächlich nur analog realisieren wollen.
Viele Grüße
Willi
im Arduino UNO ist ein Atmega328 verbaut, oder?
Der kann auch viel höhere PWM-Frequenzen, je nach gewünschter Auflösung.
Musst dann allerdings das gewohnte "analogWrite" verlassen, und ein
klein wenig selber Hand anlegen.
Du brauchst nicht Filtern, der Motor ist der Filter. Aber 490Hz sind
halt zu wenig. Die maximale Wandler Frequenz kann dann halt nur 1/490s
sein also ca 2ms. Deine RC kombination läßt aber eh nur 5*RC =
5*900*2e-6=9ms 1/9ms=111Hz zu. Der µC den du benutzt kann erheblich
höhere Frequenzen (bei 8bit fast PWM und 16MHz Takt ca 60KHz) wenn man
nicht die Arduino Firmware benutzt sondern den Atmel C Compiler (und die
timer direkt programmiert).
uwe schrieb:> nicht die Arduino Firmware benutzt sondern den Atmel C Compiler (und die> timer direkt programmiert).
Geht auch ohne komplett auf Arduino zu verzichten.
Arduino ist ja nur ein bischen Library-Gewurschtel um einen normalen
avr-gcc(g++) außenrum, und ansonsten normaler C++-Code mit vollem
Registerzugriff.
http://playground.arduino.cc/Main/TimerPWMCheatsheet
Willi schrieb:> Und zwar habe ich ein PWM-Signal mit einer PWM-Frequenz von 490 Hz (mehr> kann mein Arduino UNO nicht).
15bit-PWM? brauchst Du so viel Auflösung?
Bei 8 Bit sind 62,5kHz drin.
Willi schrieb:> Bei einem Sprung dauert es ca. 15ms, bis die analog-Spannung ihren> Endwert erreicht.>> Nun meine Frage:> Mit welchem Filter kann man das ganze derart realisieren, dass der> Ripple weiterhin klein bleibt, jedoch die analog-Spannung schneller> ihren Endwert erreicht.
Die Zeitkonstante im Screenshot ist etwa 2ms, Grenzfrequenz etwa 80Hz.
Du suchst Filter "höherer Ordnung", und passender Charakteristik
(Bessel, Tschebyscheff, Butterworth, ...).
Damit du bei einem 100%-Sprung auf die 15 Bit Genauigkeit kommst dauerts
etwa 10 Zeitkonstanten. Für schnell wird das ein langer Filter werden...
Schau lieber ob die Auflösung wirklich nötig ist. Oder nimm gleich nen
richtigen (externen) DAC.
Oder: Du weißt ja um den nachgeschalteten Filter mit einer Zeitkonstante
von sagen wir mal 0,5ms (bei 490Hz PWM brauchst du mehr als das).
Statt 9941/32768 mit 15-Bit-PWM (490Hz) würde auch "78/256 78/256 77/256
78/256 78/256 77/256..." mit 8-Bit-PWM(62,5kHz) passen
(=9941.333/32768).
Macht den Filter viel einfacher und die Dynamik besser.
Stephan
Willi schrieb:> Um daraus nun ein analog Signal zu generieren, schalte ich ein RC-Filter> dahinter. Werte: R=900 Ohm und C=2e-6>> Gedämpft wird es zwar schön, d.h. der Ripple ist in Ordnung, jedoch ist> die Dynamik nicht ausreichend.
Dabei ist der Ripple OK? Also ein Ripple von über 600mV wäre für dich
OK? Hast du dir das wirklich angeschaut?
Also wenn du zwei oder drei RC-TP hintereinander schaltest solltest du
problemlos innerhalb von wenigen Millisekunden den Analogendwert
erreichen.
Linksammler schrieb:> Musst dann allerdings das gewohnte "analogWrite" verlassen, und ein> klein wenig selber Hand anlegen.
Problem ist, ich steuer das ganze über Simulink, daher wird es schwer
für mich. Vll. möglich, das über Simulink zu erstellen?
uwe schrieb:> Du brauchst nicht Filtern, der Motor ist der Filter. Aber 490Hz sind> halt zu wenig.
Verwende eisenlose Spule, daher ganz geringe Induktivität.
Stephan H. schrieb:> Die Zeitkonstante im Screenshot ist etwa 2ms, Grenzfrequenz etwa 80Hz.> Du suchst Filter "höherer Ordnung", und passender Charakteristik> (Bessel, Tschebyscheff, Butterworth, ...).> Damit du bei einem 100%-Sprung auf die 15 Bit Genauigkeit kommst dauerts> etwa 10 Zeitkonstanten. Für schnell wird das ein langer Filter werden...>> Schau lieber ob die Auflösung wirklich nötig ist. Oder nimm gleich nen> richtigen (externen) DAC.
Wird also schwer werden meinst du, oder ?
Michael Köhler schrieb:> Dabei ist der Ripple OK? Also ein Ripple von über 600mV wäre für dich> OK? Hast du dir das wirklich angeschaut?> Also wenn du zwei oder drei RC-TP hintereinander schaltest solltest du> problemlos innerhalb von wenigen Millisekunden den Analogendwert> erreichen.
Wo siehst du ein Ripple von 600mV? Etwa 30-50mV laut Simulation in
Simulink.
Bei zwei RC-TP wirds leider net schneller sondern langsamer..?!?!
Ebenfalls in Simulink ausprobiert, lasse mich gerne aber auch von dir
Überzeugen, sofern du eine Simulation hast !
Ich konzentriere mich mal auf deine Ausgangsfrage, und nicht darauf, ob
für deine Applikation eine anderer Lösungsweg möglich oder besser wäre:
Willi schrieb:> Mit welchem Filter kann man das ganze derart realisieren, dass der> Ripple weiterhin klein bleibt, jedoch die analog-Spannung schneller> ihren Endwert erreicht.
Analoge Filter, die möglichst schnell den Endwert erreichen, sind die
Bessel-Filter. Je höher ihre Ordnung, desto steiler der Frequenzabfall,
d.h., bei gegebener Anstiegszeit die Dämpfung einer bestimmten Frequenz
jenseits der Grenzfrequenz. Zur Dimensionierung von analogen Filtern
gibt es Hilfe auf vielen Webseiten, z. B.
http://www.beis.de/Elektronik/Filter/ActiveLPFilter.html.
Willi schrieb:> Wo siehst du ein Ripple von 600mV? Etwa 30-50mV laut Simulation in> Simulink.
Was hast du da simuliert?
Im Anhang mal meine Simulation, das Testsignal ist ein 500 Hz Signal mit
einer DutyCycle von 50% (dabei entsteht der größte Ripple), blau ist das
Eingangssignal, grün das Ausgangssignal des Tiefpasses.
Willi schrieb:> Wo siehst du ein Ripple von 600mV?
490Hz / 80Hz = 6
Dein Tiefpass dämpft die Schwankungen etwa um Faktor 6.
Wenn Deine PWM mit 5V/0V funktioniert, müssen nach dem
Filter die Schwankungen ungefähr 0.8V betragen.
Bei PWM 3.6V/0V sind es entsprechend 0.6V.
(Das gilt für Tastgrad 0.5. Bei anderen Werten sind die
Verhältnisse besser.)
> Etwa 30-50mV laut Simulation in Simulink.
Haut nicht hin.
Das, was Du simuliert hast, stimmt offensichtlich nicht mit dem
überein, was Du uns geschildert hast.
> Bei zwei RC-TP wirds leider net schneller sondern langsamer..?!?!
Du musst natürlich zwei schnellere Tiefpässe verwenden, z.B.
fg = 160Hz. Wunder darfst Du allerdings nicht erwarten.
> Ebenfalls in Simulink ausprobiert, lasse mich gerne aber auch> von dir Überzeugen, sofern du eine Simulation hast !
Oh. Ach so. Tut mir leid. Ich konnte ja nicht wissen, dass Du
einer Simulationssoftware mehr glaubst als den Formeln, auf
denen die Software beruht.
Das kommt davon, wenn man eine PWM hat aber nur einen einmaligen Sprung
von 2,5 V simuliert. Es fehlen einfach die grundlegendsten Dinge. Such
dir ein anderes Projekt, dass zu dem Niveau deines Wissenstands passt,
oder lerne dazu. So wie du das angehst wird das nichts!
Uwe schrieb:> Analoge Filter, die möglichst schnell den Endwert erreichen, sind die> Bessel-Filter. Je höher ihre Ordnung, desto steiler der Frequenzabfall,> d.h., bei gegebener Anstiegszeit die Dämpfung einer bestimmten Frequenz> jenseits der Grenzfrequenz.
Danke UWE, wie sieht es aber mit dem Ripple bei diesen Filtern aus ?
Michael Köhler schrieb:> Was hast du da simuliert?
Stimmt, sorry, hatte natürlich zwei TP-RC Filter eingesetzt, du hattest
recht !
Willi schrieb:> Michael Köhler schrieb:>> Was hast du da simuliert?>> Stimmt, sorry, hatte natürlich zwei TP-RC Filter eingesetzt, du hattest> recht !
Das kommt dann eher hin…schau dir mal ein paar aktive Filter an.
Schneller als rund 2 ms wird dein System aber nicht reagieren können
aufgrund des Eingangssignals. Eine Periodenlänge musst du halt schon
warten bevor aus der Mittlung der PWM auch was sinnvolles raus kommen
kann.
Willi schrieb:>> Schau lieber ob die Auflösung wirklich nötig ist. Oder nimm gleich nen>> richtigen (externen) DAC.>> Wird also schwer werden meinst du, oder ?
Ja, Filter lang und aufwändig, bzw. nicht machbar.
Willi schrieb:> Danke UWE, wie sieht es aber mit dem Ripple bei diesen Filtern aus ?
Den Ripple bekommst du nur durch höhere Ordnung, bzw. niedrigere
Grenzfrequenz weg, das bringt aber immer Verzögerung mit sich:
Dein jetziger Tiefpass verschleift das Signal zu stark und dämpft den
Ripple zu wenig. (blau)
Der selbe TP 3* hintereinander wäre vom Ripple vermutlich ok,
verschleift/verzögert das Signal aber noch stärker. (grün)
Tiefpass 8-er Ordnung mit 250Hz wäre vom Ripple besser (pink)
Der Anstieg ist steiler, der "Endwert" wird früher erreicht, aber die
50%-Schwelle des Signals ist etwa zur gleichen Zeit erreicht wie bei
3*TP 80Hz.
Ripple unter 5% bekommst du ohne deutliche (einige ms) Verzögerung des
Signals mit keinem Filter hin solange du bei der 490Hz-PWM bleibst.
Mit dem Ripple macht aber auch die "Genauigkeit" einer 15Bit-PWM keinen
Sinn mehr.
Dann kannste auch 8Bit-PWM machen, die Grenzfrequenz des Filters
hochsetzen, ggf. Filter 2.-Ordnung, mehr brauchts nicht. Falls wirklich
notwendig die PWM dithern.
Das Ergebnis wird bei Verzögerung und Ripple deutlich besser sein als
alles was du bei den 490Hz rausholen kannst.
Genauigkeit ist das gleiche machbar, nur bei sehr kleinen Werten
(1/32768) klappts nicht mehr. Da geht dann wirklich nur ein heftiger TP.
Stephan
Willi schrieb:>> Analoge Filter, die möglichst schnell den Endwert erreichen, sind die>> Bessel-Filter. Je höher ihre Ordnung, desto steiler der Frequenzabfall,>> d.h., bei gegebener Anstiegszeit die Dämpfung einer bestimmten Frequenz>> jenseits der Grenzfrequenz.>> Danke UWE, wie sieht es aber mit dem Ripple bei diesen Filtern aus ?
Ganz allgemein geantwortet: Gut. Aber im Ernst: Google nach
"Bessel-Filter", und du wirst normierte Charakteristiken für die
verschiedenen Ordnungen finden. Setz dir ein max. Restripple fest. Das
maximale Ripple entsteht bei 50% PWM und ist in erster Näherung die
Eingangsamplitude des Filters (3.3V?) multipliziert mit der
Übertragungsfunktion bei der Frequenz. Willst du also 3,3 mV Restripple,
muss die Dämpfung ca. 60 dB sein. Ich hoffe, dass du mit normierten
Diagrammen umgehen kannst, das ist ja eigentlich einfach. Sonst wird mir
das "Kochrezept" hier zu aufwändig.
ich stelle mir grad die Frage, dass bei der Positionsregelung eines
Motors durch die Filter nun die bandbreite erheblich eingeschränkt
worden ist, oder ?
Willi schrieb:> ich stelle mir grad die Frage, dass bei der Positionsregelung eines> Motors durch die Filter nun die bandbreite erheblich eingeschränkt> worden ist, oder ?
Definiere "erheblich". Da deine aktuelle PWM eh nur mit 490 Hz läuft ist
deine Bandbreite eh nicht sonderlich riesig wie ich finde. Wie schon
gesagt, dein Filter kann gar nicht schneller als ~2 ms sein weil das
deine Periodendauer deiner PWM ist.
Für deine Positionsregelung kann das aber ausreichen, hier wäre schlicht
die Frage wie genau du da regeln willst. In manchen Anwendungen genügt
es auf grade mal einen Millimeter genau zu positionieren, für die
meisten Anwendungen genügt es auf den zehntel Millimeter genau zu
positionieren und IMO brauchen nur die wenigsten Anwendungen es noch
genauer.
Ich denke es wäre gar nicht so verkehrt wenn du uns mal genau sagen
würdest, was du eigentlich machen willst so getreu nach dem Motto "Ich
will den Sonnenstand um 12 Uhr Mittags erfassen." und nicht "Ich will
mit einer PWM einen Motor fahren lassen."
Michael Köhler schrieb:> Willi schrieb:>> ich stelle mir grad die Frage, dass bei der Positionsregelung eines>> Motors durch die Filter nun die bandbreite erheblich eingeschränkt>> worden ist, oder ?>> Definiere "erheblich". Da deine aktuelle PWM eh nur mit 490 Hz läuft ist> deine Bandbreite eh nicht sonderlich riesig wie ich finde. Wie schon> gesagt, dein Filter kann gar nicht schneller als ~2 ms sein weil das> deine Periodendauer deiner PWM ist.> Für deine Positionsregelung kann das aber ausreichen, hier wäre schlicht> die Frage wie genau du da regeln willst. In manchen Anwendungen genügt> es auf grade mal einen Millimeter genau zu positionieren, für die> meisten Anwendungen genügt es auf den zehntel Millimeter genau zu> positionieren und IMO brauchen nur die wenigsten Anwendungen es noch> genauer.> Ich denke es wäre gar nicht so verkehrt wenn du uns mal genau sagen> würdest, was du eigentlich machen willst so getreu nach dem Motto "Ich> will den Sonnenstand um 12 Uhr Mittags erfassen." und nicht "Ich will> mit einer PWM einen Motor fahren lassen."
Also, mittlerweile habe ich es geschafft, mit meinem UNO auch höhere
Frequenzen zu generieren.
Bis zu ca. 32 kHZ, das geht super und schnell.
Ich will einen Voice-Coil Motor (LINEARMOTOR) in eine Achse
positionsregeln. Ideal unter ein zehntel mm, da mein Sensor die
Anforderungen dbzgl. auch erfüllt. Als Verstärker nehme ich einen
LeistungsOPV, der ca. 2 Ampere kann, was auch reicht.
Willi schrieb:> ich stelle mir grad die Frage, dass bei der Positionsregelung eines> Motors durch die Filter nun die bandbreite erheblich eingeschränkt> worden ist, oder ?
Der Motor selbst stellt einen Tiefpassfilter mit sehr viel niedriger
Grenzfrequenz und höherer Zeitkonstante dar, als die hier besprochenen
analogen Filter.
Aber: Schau' dir doch bitte noch einmal die Ausgangsfrage an. Da steht
nichts von Motor. Der Willi hat diese Frage ganz bewusst auf die
Theorie der Filter beschränkt, den Motor erwähnt er in einem anderen
Thread. Deswegen habe auch ich nur auf die Frage geantwortet. Zu dem
Zusammenhang mit einem Motor haben Andere in dem zugehörigen Thread
schon das Richtige gesagt.
Uwe schrieb:> Willi schrieb:>> Ich will einen Voice-Coil Motor (LINEARMOTOR) in eine Achse>> positionsregeln.>> Willi, du fällst mir in den Rücken ;-)
Warum ? Ich bin doch nur HobbyELEKTRIKER =)
Hmm, also könnte ich direkt mit der PWM von 30kHZ auf die Spule ? Zuvor
jedoch ein LeistungsOPV oder ein Transistor davor schalten.
Oder könnte man sagen: Ich filter mit RC zunächst PWM in DC, dann mit
LeistungsOPV auf die Spule .
Uwe schrieb:> Willi, du fällst mir in den Rücken ;-)
Au weia, ich Spätmerker... Asche auf mein Haupt... Willi, du hast ja
selber den Motor hier wieder in die Diskussion gebracht... Wer nicht nur
lesen kann, sondern es auch tut, ist klar im Vorteil!
So, nun reiße ich mich aber zusammen:
Willi schrieb:> Hmm, also könnte ich direkt mit der PWM von 30kHZ auf die Spule ?
Ja, genau so macht man es in der Praxis.
> Zuvor jedoch ein LeistungsOPV oder ein Transistor davor schalten.
Nein, das wird dann mit einer schnell schaltenden H-Brücke,
üblicherweise aus MOS-FETs, gemacht. Der elektronische Aufwand ist
erheblich geringer.
> Oder könnte man sagen: Ich filter mit RC zunächst PWM in DC, dann mit> LeistungsOPV auf die Spule .
Nein. Nur der Motor filtert 1. mit seiner Induktivität das
Rechtecksignal in DC (jedenfalls fast) und dann 2. mit seiner Trägheit
in absolute Ruhe.
Uwe schrieb:> Nein. Nur der Motor filtert 1. mit seiner Induktivität das> Rechtecksignal in DC (jedenfalls fast) und dann 2. mit seiner Trägheit> in absolute Ruhe.
Jo. Und für die Zukunft: Erst mal prüfen was die wirklichen
Anforderungen sind (Genauigkeit Speed ...).
Willi schrieb:> Also, mittlerweile habe ich es geschafft, mit meinem UNO auch höhere> Frequenzen zu generieren.>> Bis zu ca. 32 kHZ, das geht super und schnell.
Glückwunsch! Und mit der Positionsregelung dahinter wird auch die
Genauigkeit kein Problem. Das ist ja dann eh mehrstufig: Spannung >
Strom = Drehmoment = Beschleunigung > Geschwindigkeit > Position.
Um das ganze System schnell zu bekommen sind dann ganz andere Fragen
wichtig als Ripple, Auflösung oder die Anstiegszeit einer dummen
DAC-Spannung.