Arduino PWM zu Analog: RC-Filter vs. DAC?

Ich möchte ein Arduino verwenden, um das Gassignal zu steuern, das zu einem Hochleistungsmotor-ESC geht. Das Problem, das ich habe, ist, dass der ESC reagiert, indem er die Leistung an den Motor pulsiert, wenn der Arduino eine PWM ausgibt. Also habe ich ein bisschen gesucht und verstehe, dass ich einen RC-Filter verwenden kann, um den PWM-Ausgang des Arduino in ein analoges Signal umzuwandeln. Ich habe mich auch gefragt, ob DAC-ICs PWMs tatsächlich in Analog umwandeln. Da Sie wissen, dass der Arduino eine PWM-Frequenz von 490 Hz hat, welche der beiden Methoden würden Sie empfehlen? Vielen Dank für Ihre Hilfe!

Welche dynamischen Qualitäten benötigen Sie in Ihrem analogen Signal?
Sehr geringe Spannungswelligkeit und relativ schnelle Einschwingzeit. Letzteres ist die Variable, bei der ich am meisten Kompromisse eingehen kann.
... und in Zahlen fassen?
Ich bin mir nicht sicher, was vernünftigerweise zu erwarten ist. Da ich den Gashebel eines Fahrrads steuern möchte, muss der Gashebel so genau und konstant wie möglich sein, damit die Spannungswelligkeit so nahe wie möglich bei 0 liegt. Gleichzeitig ist für Leistung, Komfort und Erfahrung der PID-Regelung auch die schnellstmögliche Reaktionszeit ideal. Ich würde sagen, dass mehr als 100 ms unpraktisch werden würden, aber ich weiß auch hier nicht, ob dies vernünftig ist.

Antworten (2)

Wenn Ihr Motortreiber (AKA Electronic Speed ​​Control) von dem Typ ist, der in ferngesteuerten Modellen verwendet wird, ist das erwartete Geschwindigkeitssteuersignal nicht nur ein Spannungspegel . Es lauscht auf das RC-Servo-"Protokoll" : Eine Rechteckwelle mit konstanter Frequenz (normalerweise 50 Hz) mit einer hohen Zeit zwischen 1 ms (Motor an einem Flugzeug gestoppt, voller Rückwärtsgang bei Auto-/Boots-Reglern) und 2 ms (voller Vorwärtsgang). Obwohl dies oft als PWM bezeichnet wird, können Sie nicht einfach ein beliebiges PWM-Signal einspeisen und erwarten, dass es funktioniert.

Ein Servosteuersignal mit dem richtigen Timing wird einfach von einem Arduino mit der mitgelieferten Servobibliothek erzeugt.


Wenn der Motortreiber tatsächlich ein Signal in Form eines Spannungspegels erwartet (wie zum Beispiel einige E-Bike-Motortreiber), benötigen Sie einen echten Digital-Analog-Wandler (DAC), um die Geschwindigkeit einzustellen.

  • Wie Sie bereits vorgeschlagen haben, ist es wahrscheinlich am einfachsten, die PWM-Ausgangsbibliotheksfunktion zu verwenden analogWrite()und die Wellenform mit einem Tiefpass zu filtern. Dies ist eine tatsächliche, rudimentäre Form eines Digital-Analog-Wandlers und sollte für Ihre Anwendung mehr als gut genug sein.

  • Sie können einen dedizierten DAC-Chip verwenden. Während ich noch nie einen DAC-Chip gesehen habe, der einen PWM-Eingang verwendet (ein PWM-Signal ist eigentlich nicht digital , obwohl es nur zwei Spannungspegel hat, da die Impulsbreite eine kontinuierliche analoge Eigenschaft ist), können Sie DACs entweder mit einem seriellen (z I2C oder SPI) oder eine parallele Schnittstelle (ein Eingangspin für jedes Bit).

PWM ist eine Möglichkeit, eine Digital-Analog-Umwandlung (DAC) zu implementieren. Aber nicht der einzige Weg. Es ist NICHT richtig zu sagen "DAC-ICs wandeln PWMs tatsächlich in analog um."

Ihre Frage ist zu komplex, um sie als einfache allgemeine Frage zu beantworten. Es gibt viele Variablen im Gesamtdesign, die bei der Entscheidung, ob PWM oder eine traditionellere Konvertierungsmethode verwendet werden soll, berücksichtigt werden müssen.

Es gab Hunderte oder Tausende von Schaltungsentwürfen, die genau dieselbe Funktion implementierten, nach der Sie fragen. Typischerweise verwenden Motorsteuerungen die spezielle UN-gefilterte Form von PWM, die für herkömmliche ferngesteuerte Modellflugzeuge usw. definiert ist.

Ihre Frage scheint darauf hinzudeuten, dass Sie das Problem noch nicht ausreichend verstanden haben. Deine Frage ergibt keinen Sinn, so wie du sie gestellt hast. Herkömmliche Motordrehzahlregler und R/C-Empfänger usw. verwenden überhaupt keine herkömmlichen DACs. Sie führen letztendlich eine DAC-Funktion aus, verwenden dafür jedoch keine DAC-Chips.

In meinem speziellen Fall habe ich keine andere Wahl, als eine PWM zu durchlaufen, da ich ein Arduino verwende. Als ich dies an meinen Controller anschloss, pulsierte es tatsächlich für jede Welle, sodass die Motorreaktion überhaupt nicht kontinuierlich war. Deshalb suche ich nach Methoden, um es zu glätten. Ich möchte nur wissen, ob es sich lohnt, einen DAC zwischen den Arduino-PWM-Pin und den Drosseleingang des Controllers zu schalten, oder ob ein RC-Filter mit den entsprechenden Eigenschaften ausreicht.
@EliottW Ich will nicht unhöflich sein, aber es werden nur Komponenten im Wert von 10 Cent benötigt, um einen RC-Filter herzustellen und zu sehen, welchen Unterschied es machen kann - haben Sie das versucht? Wenn Sie Ihre Spezifikationen nicht in Zahlen quantifizieren können (P2P-Ripple usw.), können Sie vielleicht einige andere RC-Konstanten ausprobieren und sehen, wie es für Sie funktioniert?