Bereitstellung einer linear einstellbaren Gleichspannung von PWM (1,5 V bis 3,3 V)

Ich bin kein Elektroingenieur, also hat mich eine einfache Aufgabe in der letzten Woche oder so verwirrt.

Ich arbeite an einem Projekt, bei dem ich ein Blackbox-Gerät mit einer stabilen einstellbaren Spannung versorgen muss. Die Box tastet die Spannung ab, die durch analoges Lesen bereitgestellt wird.

Die von mir bereitgestellten Messwerte liegen bei etwa 1,8 und 3,1 V (2 Betriebsmodi) und verschieben sich für Werte von 0,01 V auf Grenzen von +-0,2 (also benötige ich in Modus 1 Messwerte zwischen 1,6 und 2,0 und in Modus 2 I Messwerte zwischen 2.9 und 3.3 erforderlich) Diese Messwerte werden sich ändern, daher muss Vout die Änderungen zeitnah widerspiegeln.

Ich verwende ein Arduino, um die Daten zu erhalten, sie auf Spannung zu berechnen und eine PWM auszugeben.

Ich verwende einen Pro-Mini, der mit 5 V an seinem Rohstift betrieben wird, wodurch das Gerät in den 3,3-V-Modus versetzt wird. Somit entsprechen mein Aref- und 100% PWM-Zyklus beide 3,3 V

Die Frequenz von PWM liegt bei etwa 20 kHz (ich kann dies bei Bedarf leicht ändern).

Ich habe einen anderen Arduino als Signalanalysator zusammengestellt (da mir ein Oszilloskop fehlt), mit dem ich die Vout-Leitung untersuche (es implementiert ein LCD und drückt analogRead-Daten auf den Bildschirm, mit einigen zusätzlichen Qualifizierern, die ich mir anzeigen lassen kann die Extremwerte von Vout).

Jetzt, wo ich sehe, was ausgespuckt wird, kann ich anfangen, daran zu arbeiten. Ich lese also viel Filterliteratur, aber die Hälfte davon ergibt für mich keinen wirklichen Sinn. Ich habe festgestellt, dass ich einen Tiefpassfilter implementieren muss, um Vout zu glätten.

Also habe ich versucht, einen RC-Filter zu bauen, C- und R-Werte "durch Glück" auszuwählen und verschiedene Kombinationen und Reihenfolgen von RC-Filtern auszuprobieren. Ich kann es schaffen, den Vout-Swing (anfänglich 3,3-0) auf 3,3-2,7 zu ​​senken, wenn ich auf 3 V abziele. Obwohl besser, ist es immer noch nicht annähernd die Genauigkeit, die ich benötige. (Die Teile, die ich gerade zur Hand habe, sind etwas begrenzt, also gab es in meinen Tests einen 0,1uC, 1/8uC, 1uC, einen 100uC, einen 1500uC und Widerstände von 10K bis 0,25K) IIRC die Kombination, die ich eingestellt habe Up ist derzeit 100uC/1K 1. Ordnung (das Hinzufügen von Bestellungen brachte mir vernachlässigbare Verbesserungen, daher verstehe ich dieses Konzept möglicherweise falsch)

Weitere Lektüre hat angedeutet, dass ich möglicherweise etwas mehr als nur einen Filter brauche, um damit fertig zu werden. Bisher scheint der beste Vorschlag des Internets eine Kombination aus LM317 als einstellbarem Regler und einem MOSFET zu sein, um die PWM in einen variablen Widerstand umzuwandeln.

Abbildung 37 im technischen Datenblatt des LM317 scheint der Reglerteil zu sein, den ich dafür verwenden könnte, aber ich kann den variablen Widerstandsteil dessen, was ich brauche, nicht herausfinden.

Meine Frage ist also zweigeteilt, da ich annehme, dass ich damit möglicherweise in die falsche Richtung gegangen bin:

  1. Ist dies der beste Weg, dies zu tun? Ich versuche, die Teile- und Kostenzahlen niedrig zu halten, also möchte ich nicht den ganzen Weg des MOSFET-Reglers gehen, wenn sich herausstellt, dass ich nur einen falschen Filter verwende.

  2. Wie löse ich diese Herausforderung?

Wie schnell muss sich das endgültige Signal ändern? Welche Eingangsimpedanz hat das angeschlossene Gerät?
Wenn ich das richtig lese, nehmen Sie eine analoge Spannung, wandeln sie über ein Arduino in digital um, nehmen dann den digitalen Ausgang des Arduino, wandeln sie in eine analoge Spannung um und speisen diese analoge Spannung dann in eine 'Black Box' ein, die wird konvertieren Sie es. Es scheint mir, dass Sie das Design total verkomplizieren. Eine stabile, einstellbare Spannung bedeutet nicht unbedingt einen variablen Regler. Auflösung (0,01 V) bedeutet nicht unbedingt „Schritte von“.
@DwayneReid: Der Signalwechsel sollte in Sekundenbruchteilen erfolgen, ein 1/10 fühlt sich noch marginal akzeptabel an, vielleicht 1/2 als maximale Grenze, aber idealerweise unter 1/10. Kann die Impedanzfrage nicht beantworten, mangelndes Wissen.
@JImDearden: Ich denke, du hast ein Missverständnis, wahrscheinlich aufgrund meines Schreibens; Das Produkt ist ein Arduino-Messwert eines separaten Sensors. Dieses Arduino führt eine Sensoreingangsverarbeitung durch und gibt dieses Signal dann an den Empfänger (Blackbox) aus. Das zweitgenannte Arduino wird nur für das Prototyping verwendet, um das Vout-Signal zu analysieren. Sobald ich mit Vout zufrieden bin, werde ich es aus dem Build entfernen
@DwayneReid: Nachbereitung der Impedanzfrage; Der Lesestift des Empfängers wäre in einem Zustand hoher Impedanz, eine gründliche Suche in den Datenblättern bringt die Zahl 100 MOhm hervor, obwohl eine Ausgangsimpedanz von 10 K oder weniger für die beste Genauigkeit empfohlen wird.

Antworten (4)

Es gibt viele Möglichkeiten, das zu tun, was Sie wollen. Es gibt sogar ICs, die das für Sie erledigen (programmierbare Spannungsregler).

Aber wenn Sie Ihrem Weg folgen möchten, benötigen Sie zuerst eine PWM mit mehr als 8 Bit Auflösung (10 mV ist der Schritt, 3,3 V ist die maximale Spannung, die Sie erreichen möchten - das sind 330 Schritte oder 9 Bit), stellen Sie sicher, dass dies der Fall ist Dein PWM hat die richtige Auflösung.

Dann müssen Sie den PWM-Ausgang filtern. Die "einfachste" Lösung ist in der Tat RC. Dies ist nicht die effizienteste, aber es ist in Ordnung, wenn Sie eine gewisse Welligkeit akzeptieren können. Wählen Sie eine Manschettenfrequenz, die mindestens 10-mal kleiner als die PWM-Frequenz ist, um eine angemessene Welligkeitsdämpfung zu erzielen (in Ihrem Fall 2 kHz). Für einen RC-Filter erster Ordnung wählen Sie R folgendermaßen aus:

R = 1/(2 x pi x C xf)

Dann müssen Sie den Ausgang des Filters puffern. Dies kann mit einem als Follower verwendeten Operationsverstärker erfolgen. Stellen Sie sicher, dass die Versorgungsspannung des Operationsverstärkers ausreichend ist, um eine Sättigung zu vermeiden, und dass der Verstärker ausreichend Strom für Ihre Anwendung liefern kann.

Sie können so etwas haben:

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Wählen Sie R1/R2, um die Verstärkung (oder Dämpfung) einzustellen, wählen Sie R4/(R3+R4), um den Offset einzustellen, wählen Sie C*R2, um die Filterfrequenz einzustellen. Die Ausgabe ist entgegengesetzt zu Ihrer PWM-Einstellung (0 = max, 255 = min).

Ich versuche, die Welligkeit so weit wie möglich zu reduzieren, um ein konsistentes Vout zu erhalten, da ich nicht weiß, wie das Signal auf der anderen Seite verarbeitet wird. Andernfalls würde ich es nur auf dem Empfänger mitteln und mich nicht um die Glättung kümmern , aber das ist keine Option
Also, was ist Ihr Ripple-Ziel? 10 mV ? 1 mV ?
Übrigens ist die Standard-PWM von Arduino 5 V Spitze-Spitze und hat eine Auflösung von 8 Bit oder 20 mV. Es gibt eine Schaltung, die es auf 1,0 V - 3,5 V mit einer Auflösung von 10 mV ändern kann. Dies kann als Front-End "R" für Ihren RC-Filter dienen oder Teil Ihres Puffers sein.
Ich habe gerade bemerkt, dass ich zuvor ein Detail ausgelassen habe. Ich betreibe das Arduino im 3,3-V-Modus, sodass meine PWM-Spitze 3,3 beträgt. (korrigiertes OP, um dies widerzuspiegeln) Würde das bedeuten, dass ich in Ihrem Schaltplan (über R3) 3,3 anstelle von 5 V anlegen müsste? Sowohl 5 als auch 3.3 sind verfügbar, also ist es nur eine Frage, welche angeschlossen werden soll
3,3 V oder 5 V sind ok. Es ändert die Einstellungen für R1-R2 und R3-R4, das ist alles.

Wenn Sie ein 5-V-PWM-Signal bei 20 kHz haben, sollte die Tiefpassfilterung eines Tastverhältnisses von 10 % bei etwa 2 kHz etwa 0,5 V ergeben, 50 % wären etwa 2,5 V und 100 % wären 5 V. Es ist nur der Mittelwert über einen PWM-Zyklus.

Sobald Sie dies in der Hand haben, sollten Sie wissen, wie Sie Ihr Signal skalieren und versetzen. Wenn Sie um eine Verstärkung von weniger als eins skalieren müssen, benötigen Sie einen Spannungsteiler (dh Vorwiderstände) oder einen invertierenden Verstärker (Operationsverstärker), den Sie später erneut invertieren müssen. Offset würde mit einem Operationsverstärker behandelt werden.

Die andere Alternative besteht darin, die PWM-Impulsbreiten zu drehen, um das zu bekommen, was Sie brauchen.

Ja, ich bekomme die PWM-zu-Spannungs-Gleichung, das ist ziemlich einfach, aber ich brauche das endgültige Signal, um eine flache Linie zu sein
Ein 2-kHz-RC-Filter tut dies
Müsste es genau 10-mal kleiner als die PWM-Frequenz sein, oder besteht der Trick darin, es mehr als 10-mal kleiner zu machen?
Wir gehen normalerweise für einen Faktor von zehn für einen einpoligen Filter.

Es scheint mir, dass eine Komponente namens Digital-Analog-Wandler (DAC) das tun würde, was Sie wollen. Sie können wahrscheinlich mit PWM und einem Tiefpassfilter höherer Ordnung machen, was Sie wollen, aber der DAC könnte für Sie einfacher sein.

DACs sind sowohl mit seriellen als auch mit parallelen Digitaleingängen erhältlich. Sie erwähnen Arduino, daher schlage ich vor, dass Sie einen seriellen DAC verwenden möchten, da die serielle Schnittstelle weniger E / A-Pins vom Arduino verwendet. Serielle Übertragungen sind jedoch langsamer als parallele.

Es gibt viele verschiedene Geräte zur Auswahl. Wenn Sie die Zeichenfolge "serial dac" in Google eingeben, erhalten Sie eine Fülle von Auswahlmöglichkeiten. Zwei der ersten Wahlmöglichkeiten: Linear Technology und Maxim bieten kostenlose Muster an. Ich vermute, dass die meisten Hersteller von DACs dasselbe tun.

Ok, ich werde mehr über DACs recherchieren. Wenn ich bedenke, was Sie geschrieben haben, muss ich mich vielleicht für einen parallelen entscheiden, da die Geschwindigkeit der Updates wichtig ist und ich noch viele Pins übrig habe

Ein Tiefpassfilter ist der Weg zu gehen. Ich mache genau dasselbe in einer Schaltung, an der ich gerade arbeite, also habe ich etwas, das funktioniert:

Geben Sie hier die Bildbeschreibung ein

Dies ist im Grunde nur ein Tiefpassfilter dritter Ordnung mit einer Grenzfrequenz von etwa 350 Hz. Bei einem 20-kHz-PWM-Signal liegt die Welligkeit unter 1 mV.

Wenn Sie Ihre Impulsbreite ändern, dauert es etwa 2,5 ms, bis sich das Signal einpendelt.