Was ist der einfachste Weg, um PWM ohne Mikrocontroller zu generieren?

15

Was ist der schnelle und elegante Weg, um PWM ohne Mikrocontroller zur Steuerung eines Servomotors zu erzeugen? Mit Potentiometer oder anderen Möglichkeiten, um das Tastverhältnis mit fester Zeitspanne zu steuern.

  • Entschuldigung für das Durcheinander, ich möchte ein Hobby-Servo steuern.
pstan
quelle
Meinen Sie wirklich die Steuerung eines Motors als Teil eines Servosteuerungssystems oder fragen Sie nach der Steuerung eines "Hobby-Servos"? Siehe auch meine Antwort.
Olin Lathrop
1
Warum willst du PWM? PWM ist oft nur eine Möglichkeit für ein Mikro, sich einer analogen Steuerfunktion anzunähern. Wenn Sie wirklich eine analoge Spannung oder einen analogen Strom wünschen, gibt es wahrscheinlich viel bessere Möglichkeiten.
Das Photon
2
@ThePhoton Wenn er ein Hobby-Servo steuert, wird PWM als Steuersignal benötigt.
Nick Johnson
Wenn Sie die feste Periodendauer nicht einhalten, ist ein Delta-Sigma-Oszillator eine sehr einfache Lösung. Ich habe Implementierungen mit einem einzelnen Operationsverstärker und einer Handvoll Widerständen / Kondensatoren gesehen. Dies setzt voraus, dass Sie nicht über RC-Servos sprechen.
jippie
1
@jippie - Was ist ein Delta-Sigma-Oszillator? Ich weiß, dass ein Delta-Sigma-ADC einen Oszillator benötigt, aber ich habe immer angenommen, dass dies eine häufige Sache ist, da er nicht wirklich Teil des Wandlers selbst ist.
stevenvh

Antworten:

25

Ich empfehle die (GASP!) 555 Timer im "astabilen" Modus . Sie finden alles, was Sie brauchen, im Link, aber ich habe sie hier nur für Sie kopiert!

Der Astable-Modus gibt Ihnen eine variable PWM-Frequenz und ermöglicht auch ein einstellbares Tastverhältnis (Gleichungen für hohe und niedrige Zeiten in der Verbindung).

Die Rennbahn:

555 Timer, astabiler Modus

Hinweis: Ich würde eine elektrolytische Kappe zwischen Vcc (positive Leitung) und GND (negative Leitung) anbringen, um den Effekt von Einbrüchen der Versorgungsspannung zu verringern.

Die PWM-Frequenz:

Ausgangsfrequenz von 555 Timer in einem stabilen Modus

Einige Verteidigung für meine Antwort im Vergleich zu anderen in diesem Beitrag. Die meisten anderen Antworten erfordern eine Zwischenwellenform, um ein variables PWM-Signal zu erzeugen, z. B. das gemeinsame Dreieckwellen- / Komparatorverfahren. Ich sehe nicht viel Sinn darin, einen Dreieckwellengenerator (eine bedeutende Schaltung an sich) nur als Zwischenschritt zur Lösung Ihres Problems zu konstruieren.

Der 555 ist ein großartiger Analogchip und bietet genau das, was Sie brauchen. Ich wünschte, die Leute hassen sie nicht so sehr.

kevlar1818
quelle
2
Ich mag 555s, aber ich denke, dass @supercat darin richtig ist, dass ein einzelner 555 nicht in der Lage ist, Ihnen ein Signal mit fester Frequenz und variablem Tastverhältnis zu geben. C wird durch R1 + R2 geladen und durch R2 entladen. Wenn Sie R2 erhöhen, erhöhen Sie sowohl die Ein- als auch die Ausschaltzeiten und damit die Periode. Wenn Sie R1 erhöhen, erhöhen Sie nur die Einschaltdauer, aber auch die Periode. Wenn Sie C erhöhen, erhöhen Sie alle Zeiten, einschließlich des Zeitraums. Sie benötigen zwei 555er. Einer, in einem stabilen Modus, der die Periode bestimmt, und ein zweiter, in einem monostabilen Modus, der das Tastverhältnis bestimmt.
Telaclavo
5
Msgstr "Sie finden alles, was Sie brauchen, im Link". Nein, das ist nicht der richtige Weg zu antworten. Geben Sie hier die Details an.
stevenvh
1
Ich hasse den 555 nicht, ich wünschte nur, die Leute würden ihn nicht als die beste Lösung für alles bezeichnen . Ein einzelner 555 ist nicht die beste Möglichkeit, ein Hobby-Servo zu steuern.
stevenvh
1
@ Telaclavo - Sie sind richtig; Sie können das Tastverhältnis nicht variieren und die Frequenz konstant halten. Wie WoutervanOoijen erwähnt, benötigen Sie jedoch keine festgelegte Frequenz, um ein Servo zu betreiben. Durch Variieren des Arbeitszyklus wird wahrscheinlich ein Wackeln der Pulsfrequenz um ungefähr 10-20% (grobe Schätzung) erzeugt, was für die meisten Servos genau genug sein sollte. Andererseits müssen Sie den Arbeitszyklus nicht wirklich anpassen, um ein Servo zu steuern.
Kevlar1818
2
@stevenvh Sie lassen mich wissen, wenn Wikipedia stirbt. Auch wenn es so ist, wie Dean in seinem Kommentar oben gezeigt hat, ist (war) der 555 so allgegenwärtig, dass es schwierig wäre, kein altes Buch, einen kleinen Blog oder eine Hobby-Website mit Informationen darüber zu finden.
Kevlar1818
8

Die altmodische Methode, PWM mit analog gesteuertem Tastverhältnis zu erstellen, besteht darin, das analoge Steuersignal mit einer Dreieckswelle zu vergleichen. Sie erstellen einen Dreieckwellengenerator, der mit der gewünschten PWM-Frequenz läuft. Dieses wird dem negativen Eingang eines Komparators und das analoge Steuersignal dem positiven Eingang zugeführt. Das Ergebnis ist entweder voll hoch oder voll niedrig, aber das Tastverhältnis ist linear proportional zum Steuersignal. Frühe Klasse-D-Audioverstärker arbeiteten beispielsweise nach diesem Prinzip.

In vielen Fällen musste die PWM nicht superlinear sein, sodass die Dreieckswelle keine perfekt geraden Kanten haben muss. Wenn sie ein wenig exponentiell sein dürfen, kann dies die Schaltung vereinfachen.

Hinzugefügt:

Mark Rages wies darauf hin, dass Sie sich, wenn Sie "Servomotor" sagen, möglicherweise auf die kleinen positionsgeregelten Hobbymotoren beziehen, die in Modellflugzeugen und dergleichen verwendet werden. Meine Antwort bezieht sich auf die Steuerung eines Motors unter der Annahme, dass Sie eine analoge Spannung haben, die proportional dazu ist, wie stark Sie den Motor antreiben möchten. Dies gilt nicht für diese "Hobby-Servos". Diese werden nicht durch PWM im üblichen Sinne gesteuert, sondern durch die Impulsbreite, die normalerweise etwa alle 20 bis 50 ms zwischen 1 und 2 ms wiederholt werden muss. Wenn es sich bei dieser Frage wirklich um Hobby-Servos handelt, sollte dies klargestellt werden.

Olin Lathrop
quelle
Während dies die Aufgabe erledigt, ist es wichtig zu beachten, dass @pstan ein Servo ansteuern möchte und daher ein Funktionsgenerator in seiner Implementierung wahrscheinlich nicht sehr portabel sein wird.
Kevlar1818
1
Die Arbeitszyklen von Servomotoren sind im Allgemeinen recht niedrig und betragen 10% oder weniger. Und der Servo verwendet direkt die Impulsbreite und nicht den Durchschnittswert. Daher ist es besser, eine Schaltung zu verwenden, die die Impulsbreite von der Wiederholungsrate entkoppelt.
Markrages
1
@ kevlar: Ich habe meine Antwort noch einmal überprüft und sehe immer noch keinen Hinweis auf einen Funktionsgenerator. Ich sagte nur, du brauchst eine Dreieckswelle oder etwas Nahes. Sie brauchen sicherlich keinen Funktionsgenerator, um einen davon zu erstellen.
Olin Lathrop
@ Markrages: Huh? Motoren sehen den Durchschnitt einer Impulsfolge, wenn sie schnell genug ist. Einige 100 Hz sind in dieser Hinsicht für die meisten Motoren ausreichend. Der Servoteil wird durch das Steuerungsschema ausgeführt, nach dem das OP nicht gefragt hat. Es scheint, dass er bereits einen analogen Pegel hat, der proportional dazu ist, wie stark der Motor angetrieben werden soll.
Olin Lathrop
@Markrages: Mir ist gerade aufgefallen, dass es sich um Hobby-Servos handelt, die etwa alle 20 ms einen Impuls von 1-2 ms wünschen? Ihr Kommentar macht in diesem Licht Sinn, aber das OP erwähnte Hobby-Servos überhaupt nicht.
Olin Lathrop
7

Dreieckwelle. Komparator. Kontrollschwelle. Das ist die grundlegende Vorgehensweise.

PP

Bildbeschreibung hier eingeben

Erzeugen Sie zuerst eine 50Hz Rechteckwelle. Einfachster Weg:

Bildbeschreibung hier eingeben

Ω Widerstand und einen 100 nF Kondensator gibt Ihnen eine 20ms Zeit.

REXTCEXT :

T=REXT×CEXT

μΩ

ΩΩ

Ich hätte dies mit zwei LM555 tun können, aber ich würde mehr externe Komponenten benötigen.

bearbeiten (über Mikrocontroller)
Ich stimme Olin zu (siehe Kommentare), dass das Ausschließen eines Mikrocontrollers kurzsichtig ist (Olin sagte "albern"). Es gab eine Zeit, in der die Entwicklung für einen Mikrocontroller kompliziert war, aber heute stimmt das nicht mehr. Sie können auch eine Programmierschnittstelle für ein paar Euro haben. Die Lösung würde dann so einfach aussehen, dass keine Nicht-Controller-Lösung mithalten kann: Sie nehmen einen ATTiny5 (Olin nimmt einen PIC10F220) in einem SOT23-6. Schließen Sie einen Entkopplungskondensator an die Stromanschlüsse und das Potentiometer an den ADC-Eingang an. Das ist es! 3 (drei) Komponenten. Das Konvertieren des ADC-Messwerts in einen Impulsbreitenausgang ist so einfach, dass es selbst für einen beginnenden Programmierer fast lächerlich ist.

Sobald Sie mit ihnen beginnen, werden Sie feststellen, dass Mikrocontroller häufig eine einfachere und flexiblere Lösung bieten als andere ICs oder diskrete Komponenten.

eine Notiz
von Ihrer anderen Frage sehe ich , dass Sie tun Verwendung Mikrocontroller. Warum willst du sie hier vermeiden?

stevenvh
quelle
Wie bekommt man eine Dreieckswelle?
m.Alin
1
@ m.Alin - Wenn Sie ein sehr sauberes Dreieck wollen, ist dies der richtige Weg. Aber der Inverter-Eingang in meinem Oszillator nähert sich auch einem Dreieck an, obwohl die Steigungen wirklich exponentiell sind.
stevenvh
1
lokal gesehen ist 555 hier billiger als 74HCT1G14. +1 BTW. \
Standard Sandun
3
@ stevenvh "Wenn Sie ein sehr sauberes Dreieck wollen, ist dies der richtige Weg." Nach Ihrer Logik ist dies völlig inakzeptabel. Bitte geben Sie dies in Ihrer sehr informativen und vollständigen Antwort an.
Kevlar1818
2
@pstan - Wenn Ihre Spezifikationen nicht zu hoch sind, würden Sie wahrscheinlich die 555-Schaltung verwenden. Es ist alles andere als perfekt: Die Frequenz variiert mit dem Arbeitszyklus und die Steuerung ist nicht linear. Der Dreiecksgenerator + Komparator löst diese Nachteile.
stevenvh
4

Der einfachste Weg, ein PWM-Signal zu erzeugen, besteht darin, eine Sägezahnwelle oder eine Dreieckwelle in einen Eingang eines analogen Komparators und eine Steuerspannung in den anderen Eingang einzuspeisen. Wenn eine reine Dreieckswelle nicht erhalten werden kann, kann eine vernünftigerweise angenähert werden, indem eine Rechteckwelle durch ein RC-Filter geleitet wird, so dass der Ausgang des Filters zwischen ungefähr 1 / 4VDD und 3 / 4VDD schwankt, und dann die Steuerspannung skaliert wird in den Komparator, so dass die Steuerspannung, die ein Tastverhältnis von 0,01% ergeben sollte, in die niedrigste Spannung der gefilterten Rechteckwelle umgesetzt wird, und die Steuerspannung, die ein Tastverhältnis von 99,99% ergeben sollte, in die höchste Spannung der gefilterten Rechteckwelle umgesetzt wird Rechteckschwingung. Dies ergibt eine Impulsbreite, die nicht ganz linear proportional zur Amplitude ist, aber für viele Zwecke nahe genug ist.

Superkatze
quelle
1
Und genau das macht die NE555-Schaltung, wie von kevlar1818 vorgeschlagen ...
Cees Meijer
2
@CeesMeijer: Auf dem Poster wurde nach einem variablen Arbeitszyklus und einer festen Zeitspanne gefragt. Ich kenne keine Möglichkeit, mit einem einzelnen 555 eine Steuerspannung in eine Welle mit fester Frequenz und variablem Tastverhältnis umzuwandeln. Es könnte jedoch sehr gut dazu dienen, eine dreieckige Welle zu erzeugen, die in einen Komparator eingespeist wird.
Supercat
Es ist 20 Jahre her, dass ich diese Rennstrecke gebaut habe, also musste ich nachschlagen. Und in der Tat hast du recht. Ich habe einen externen Trigger verwendet, um eine konstante Frequenz zu erhalten. Sie könnten jedoch eine zweite 555 dafür verwenden.
Cees Meijer
2

Ich empfehle die Verwendung eines Niederspannungs-Netzteilsteuerungs-ICs (BiCMOS) wie dem UCC3803 . Die Betriebsfrequenz kann leicht mit einem einfachen R und C eingestellt werden, und die Tastgradsteuerung kann leicht mit einem Potentiometer durchgeführt werden. Es wird auf einer 5V-Schiene betrieben.

Auszug aus dem Datenblatt TI UC3842

Der UCC3803 ist pin-kompatibel mit der PWM-Controller-Serie UCx84x. Wenn Sie ein einfaches PWM durchführen möchten, können Sie den obigen Schaltplan verwenden und dabei R1, den 2N2222 und den 5k ISENSE-Einstelltopf weglassen (binden Sie einfach Pin 3 an Masse). Sie können wahrscheinlich auch die beiden 4,7k-Widerstände in Reihe mit dem Poti zur Einstellung des Fehlerverstärkers weglassen und direkt zu Vref und Gnd wechseln oder einen expliziten Spannungsteiler verwenden, wenn keine Einstellung erforderlich ist. (Sie haben nicht angegeben, ob Sie den Arbeitszyklus einfach ändern müssen).

Der IC ist in der Lage, etwa 1 A Strom zu treiben. (Wenn Ihr Servomotor einen PWM-Eingang hat, ist dies ein strittiger Punkt.)

Adam Lawrence
quelle
msgstr "benötigt möglicherweise einen externen Treiber, um den Motor tatsächlich anzutreiben". Bist du sicher? Ich dachte immer, der PWM-Eingang ist nur ein Schwachstromsignalpegel. Für die Stromversorgung hat ein Servo einen dritten Anschluss.
stevenvh
Außerdem erinnere ich mich nur, dass der Arbeitszyklus nur 5 bis 10% beträgt. Das kann der richtige Weg sein, um Strom zu liefern.
stevenvh
Das ist nett. Aber es gibt immer noch viele externe Komponenten.
Standard Sandun
Sieht eher aus wie ein UEMIG: Unnötiger EMI-Generator. :-(
stevenvh
Es scheint auch einen minimalen 10V-Eingang zu benötigen. Vielleicht nicht die beste Wahl ...
stevenvh