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.
:
Bearbeitet durch User
Einfach mal googlen, dann findet auch herauf, wie man dem Arduino eine höhere PWM-Frequenz entlockt: http://playground.arduino.cc/Code/PwmFrequency
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.
:
Bearbeitet durch User
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!
Vielleicht will er ja was bei diesem Projekt lernen, Karl ;) Du hast aber Recht, bei Antworten wie der deinen auf seine Fragen wird das nix :(
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.
Erst mal vielen Dank für eure Antworten. Ich bin froh, dass ihr mir hilfreiche Tipps gegeben habt. Danke ! meld mich noch mal, sofern ich mehr weiß =)
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.
Willi schrieb: > Ich will einen Voice-Coil Motor (LINEARMOTOR) in eine Achse > positionsregeln. Willi, du fällst mir in den Rücken ;-)
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.