Frage:
Warum sollte ich PWM nicht brutal erzwingen?
TSL
2014-04-28 08:36:57 UTC
view on stackexchange narkive permalink

Ich habe also mit einem ATtiny45 gespielt, und mir fällt ein, dass ich PWM wahrscheinlich brutal erzwingen könnte, indem ich einen Timer auf sysclock / 64 vorskaliere und dann ISR-Code ausführe, der die Ausgänge abhängig von globalen Variablen manuell ein- oder ausschaltet an anderer Stelle im Code oder über IO einstellen. Bei einer maximalen Sysclock-Geschwindigkeit von 20 MHz sollte ich eine anständige Auflösung erhalten und alle meine IO-Pins als PWMs anstelle der beiden vom Chip bereitgestellten verwenden. Die große Frage ist also ... warum nicht? Abgesehen davon, dass ich viele Sysclock-Zyklen verbrauche, sehe ich keine wirklichen Nachteile ... könnte mir jemand welche geben?

Siehe auch: http://electronics.stackexchange.com/questions/101451/how-many-servos-can-i-run-on-an-attiny85
Ich habe es einmal versucht (aber mit einem anderen Controller).In der Praxis erhalten Sie keinen sauberen Puls.Stattdessen hängt es von Ihrer Taktzykluszeit ab und verlangsamt sich, wenn Ihr Controller mit etwas anderem beschäftigt ist.
es fühlt sich auch hässlich an - es braucht * sehr wenig * Hardware für einen einzelnen PWM-Kanal - es kann buchstäblich ein rücksetzbarer Binärzähler sein, der in ein Register xored und nored ist, plus eine Taktteilungslogik und möglicherweise auch ein ähnliches Setup für den Ausschaltimpuls.Bit Banging leidet unter einem inkonsistenten und schwer genau vorherzusagenden Timing sowie einer (relativ) intensiven Ressourcennutzung - Codeausführung, Interrupt-Kanäle, Systemuhren (die möglicherweise mehr Funktionen als PWM-Uhren haben) - alles für eine so einfache Funktion.Warum brauchst du mehr Kanäle?Es kann einen günstigeren Weg geben.
Bietet der ATtinyX5 nicht 3 Ausgangskomparatoren, OC0A, OC0B / OC1A (gemeinsam auf PB1), OC1B?
Sechs antworten:
Passerby
2014-04-28 09:19:02 UTC
view on stackexchange narkive permalink

Die drei Nachteile sind der Stromverbrauch, das Binden eines Timers und das Unterbrechen anderer Codes. Wenn Sie sich nicht für Energiesparmodi interessieren, den Timer nicht benötigen und keinen kritischen Code haben, der einigen Taktzyklen zur Wartung des Interrupts nicht standhält, gibt es keinen Nachteil. Einige Projekte sind recht einfach und beanspruchen nicht ein Zehntel der Leistung des Mikrocontrollers. Lassen Sie sich also von niemandem sagen, dass Sie etwas falsch machen, indem Sie die Timer wie diese nutzen. Software PWM ist in Ordnung, wenn es Ihren Anforderungen entspricht.

Mit Stromverbrauch meinen Sie, dass ein Timer mit ISR mehr Energie verbraucht als eine reine Softwarelösung, oder?Ein Timer mit ISR sollte ungefähr den gleichen Stromverbrauch haben wie die dedizierte PWM-Hardware.
@MathEE Wenn die CPU keine Anweisungen ausführt, können Sie sie anweisen, in einen Energiesparmodus zu wechseln.Dies bedeutet, dass das Gerät für eine bestimmte Zeit viel weniger Strom verbraucht.Für einige Schlafmodi läuft die zeitgesteuerte PWM weiter, die bitgesteuerte PWM jedoch nicht.Interrupts sind eine übliche Methode, um den Schlafmodus zu verlassen.
@jippie Ja, ich verstehe, dass man Interrupts verwenden kann, um den Schlafmodus zu verlassen und Strom zu sparen - ein Vorteil.Ich habe versucht, Passerbys Kommentar zu verstehen, dass der Stromverbrauch ein Nachteil ist.Ich bin mir sicher, dass Passerby etwas im Sinn hatte, aber mir ist nicht klar, dass PWM-Hardware weniger Strom verbrauchen würde als ein Zähler in Kombination mit ISR.Immerhin ist das PWM-Modul nur ein Zähler mit zusätzlicher Hardware.
@MathEE Wenn Sie Hardware- / Timer-PWM verwenden, benötigen Sie die CPU nicht und können sie in den Energiesparmodus versetzen.Das würde eine Menge Strom sparen.Er geht davon aus, dass die CPU bei Verwendung einer zeitgesteuerten PWM im Leerlauf ist (und daher in den Ruhezustand versetzt werden kann), anstatt die Befehlszyklen zu zählen, wenn eine bitgeschlagene PWM ausgeführt wird.
Ein Interrupt bringt den Mikrocontroller aus dem Energiesparmodus, um den Code zu warten.Ein Hardware-PWM-Modul kann alles viel effizienter handhaben, ohne den Chip aus LPM herauszuholen.Wenn das gesamte MCU hauptsächlich für PWM mit gelegentlicher Benutzerinteraktion verwendet wird, wirkt sich dies erheblich auf den Stromverbrauch aus.
PWM bindet auf vielen Plattformen einen Timer
Die Verwendung einer Software-PWM kann auch den Stromverbrauch erhöhen, indem die CPU mit einer schnelleren Taktrate betrieben werden muss, als dies sonst erforderlich wäre.
Denken Sie daran, dass all dieses Gerede über "Energieeinsparung" irrelevant ist, wenn Sie eine einzelne LED nur schwach beleuchten.
@nickt hingegen profitieren Anwendungen mit geringem Strom wie das Dimmen einer einzelnen LED am meisten von der Energieeinsparung.Wenn Ihr Ziel 3mAh ist, ist der Durchschnitt von 2 mAh durch ständiges Aufwecken des mcu ein großer Erfolg.Auf der anderen Seite ist ein 2-mAh-Treffer bei einer 500-mA-Motor-PWM-Anwendung winzig.
@Passerby Sie klingen konträr.In diesem Sinne kann die MCU nicht schlafen, wenn die Timer noch laufen.Das Beste, was es tun kann, ist in den Leerlaufmodus zu schalten, der beim ATtiny etwa 3,8 mA spart (aber wenn Sie sich wirklich um die Stromversorgung kümmern, werden Sie mit 1,8 V betrieben, in diesem Fall werden nur 0,2 mA eingespart).Ich würde argumentieren, dass Ihre Einsparungen zwar "statistisch signifikant" sind, aber aus technischer Sicht irrelevant sind.
@nickt, der Ihrer falschen Annahme nicht zustimmt, ist kein Widerspruch.
Sean Boddy
2014-04-28 09:54:22 UTC
view on stackexchange narkive permalink

Ich habe erst kürzlich mit vielen PWM-Schaltnetzteilen gespielt, und Sie haben Recht, es gibt durchaus triftige Gründe, pulsbreitenmodulierte Signale zu "bit bang". Einer der Hauptfehler dieser Methode ist jedoch, wenn Sie eine sofortige Rückkopplungssteuerung des erzeugten Arbeitszyklus benötigen.

Selbst bei einem integrierten Takt von 20 MHz beträgt die Zykluszeit 50 Nanosekunden. Rechnerisch müssten Sie das zu überwachende Signal erfassen, vom Referenzpegel subtrahieren und dann die Erzeugung des Arbeitszyklus fortsetzen. Dies erzeugt "Jitter", wenn der Arbeitszyklus inkonsistent ist. Die Verwendung eines integrierten DAC kommt nicht in Frage, verschlingt jedoch Zyklen. Um dies zu reduzieren, können Sie einen externen DAC hinzufügen, aber dann haben Sie möglicherweise 8 oder 12 Pins vom Mikrocontroller an den externen DAC übergeben, um schnell lesen zu können (je nachdem, wie viel Auflösung Sie möchten). Dann müssen Sie sich über zusätzliche Signalausbreitungsverzögerungen durch Schaltkomponenten Gedanken machen.

Wenn Sie eine schnelle Rückkopplungssteuerung wünschen, ist es schwer, einen unabhängigen Arbeitszyklus-IC zu schlagen. Die Verzögerung des integrierten Fehlerverstärkers ist so gering, dass Sie sich mehr Sorgen über die Änderung der Verstärkung bei hohen Frequenzen machen. Die Signalausbreitung durch Umschalten ist natürlich immer noch das gleiche Risiko und muss umgestaltet werden.

Es ist auch erwähnenswert, dass viele PWM-IC-Pakete über Abschaltfunktionen und Totzeitsteuereingänge verfügen, die in Verbindung mit einem Mikrocontroller auf einem 8- oder 16-poligen Gehäuse wirklich nützliche Dinge bewirken können.

Es liegt ganz bei Ihnen zu entscheiden, ob die Bit-Bang-Methode Ihre Anforderungen unterstützen kann. Sie können die Frequenz tatsächlich ziemlich hoch einstellen, wenn Sie einen niedrigeren Vorteiler verwenden. Der Arbeitszyklus, den Sie erhalten, zeigt einen Quantisierungsfehler an, aber das ist möglicherweise nicht einmal eine große Sache, je nachdem, was Sie tun und wie hoch Sie die Auflösung nehmen. Andererseits geht eine höhere Auflösung zu Lasten einer niedrigeren Frequenz. Wenn Sie keine sofortige Rückkopplungskontrolle benötigen und Ihre Anwendung mit Jitter umgehen kann, ist Bit-Banging möglicherweise der richtige Weg.

SomeEE
2014-04-28 09:02:11 UTC
view on stackexchange narkive permalink

Der Zweck von Hardwaregeräten auf dem Chip besteht darin, den Prozessor für andere Aufgaben freizugeben. Wenn Sie PWM-Hardware verwenden, können Sie gleichzeitig andere Mikrocontroller-Aufgaben ausführen.

Nun, ich denke, Sie haben dieses Bit aufgegriffen, weil Sie nach der Verwendung eines ISR fragen, anstatt einen Brute-Force-Zähler für die for / while-Schleife auszuführen, aber es ist wieder dieselbe Antwort. Wenn wir die Breite des Impulses nicht ändern, warum sollten wir dann unsere anderen Aufgaben unnötig unterbrechen wollen?

Weil wir mehr als 3 PWM-Kanäle wollen, ohne die Stückliste zu erweitern.
@Ignacio Vielleicht verstehe ich die Frage falsch, aber ich habe sie gelesen, als das OP PWM brutal erzwingen wollte und dann als Bonus mehr PWM-Kanäle erhält.Sie haben Recht, wenn das OP dies tun möchte, weil es mehr Kanäle benötigt.
Eric Gunnerson
2014-04-28 09:51:10 UTC
view on stackexchange narkive permalink

Sie können leicht tun, was Sie sagen - ich habe es ein paar Mal getan. Dies ist nützlicher, wenn Sie Ihre PWM zu vorhersehbaren Zeiten ändern möchten. Sie können dies tun, indem Sie die Anzahl der PWM-Zyklen zählen. Dazu benötigen Sie ohnehin einen Timer.

Es gibt jedoch einen Kompromiss zwischen der Auflösung der PWM / Anzahl der Ausgänge und der Menge der freien Prozessorzeit. Sie werden einen Punkt erreichen, an dem Sie nicht genügend freie CPU haben, damit es funktioniert.

Ich empfehle, ein Oszilloskop an einen freien Pin anzuschließen und diesen Pin dann zu Beginn des ISR und hoch zu setzen niedrig am Ende. Auf diese Weise können Sie sehen, wie viel Zeit Ihre Routine benötigt.

avra
2014-04-28 12:57:03 UTC
view on stackexchange narkive permalink

Software-PWM muss nicht sehr CPU-intensiv sein, wenn es richtig ausgeführt wird, wie z. B. die Verwendung von Binärcode-Modulation . Mit dieser schönen und einfachen Technik können Sie viele SoftPWM-Kanäle ohne großen CPU-Overhead haben.

Minor nit: PWM bezieht sich auf einige bestimmte Modulationsschemata, bei denen ein konstanter Ausgangspegel durch eine Impulswelle mit einem bestimmten Tastverhältnis dargestellt wird und die Frequenz der Welle unabhängig von dem dargestellten Pegel ist;Die Schemata unterscheiden sich nur darin, wie * Änderungen * des Ausgangspegels dargestellt werden.Die binäre Codemodulation gehört zu einer allgemeineren Klasse von * Arbeitszyklusmodulationsschemata *.
Die verknüpfte Implementierung der Binärcodemodulation hat den Nachteil, dass ein Ausgang, dessen Wert sich von 127 auf 128 ändert, für 255 aufeinanderfolgende Impulse niedrig ist, und einer, dessen Wert sich für 255 aufeinanderfolgende Zyklen von 128 auf 127 ändert, hoch ist.Wenn das zu steuernde Gerät ein ungleichmäßiges Ein- / Ausschaltverhalten aufweist, verhält sich PWM für den größten Teil seines Bereichs linear, BCM dagegen nicht.Einige Variationen von BCM können nützlich sein, aber seine Einschränkungen müssen oft erkannt und behandelt werden.
Obwohl Sie gut bemerkt haben, dass BCM nicht für alles eine Lösung ist, funktioniert es mit den meisten Appliances recht gut und mit sehr geringer CPU-Auslastung.Am häufigsten werden wahrscheinlich LEDs gedimmt.Wenn in diesem Fall eine Helligkeitslinearität benötigt wird, benötigen sowohl PWM als auch BCM eine Korrekturtabelle.
Ich habe BCM-Variationen für LEDs verwendet, und sie sind für feste Pegel in Ordnung, aber der angegebene Ansatz flackert stark, wenn der Helligkeitsgrad zwischen 127 und 128 wechselt. Ein alternativer Ansatz für PWM mit 256 Ebenen besteht darin, einen Interrupt-Lauf durchzuführenz.Beinmal alle 256 Zyklen und lassen Sie jeden Interrupt die LEDs zweimal im Abstand von 16 Zyklen schreiben.Schreiben Sie in der Hälfte der Zyklen (abwechselnd) Bit 3 und dann Bit 7. In der Hälfte des Restes schreiben Sie Bit 2 und dann 6 usw. In 1/16 schreiben Sie einfach Null und führen Sie eine andere Verarbeitung durch.
EkriirkE
2014-05-22 08:45:49 UTC
view on stackexchange narkive permalink

Ich persönlich habe festgestellt, dass die Timer-PWMs schneller und konsistenter sind (im vollen Bereich von 256 kann Software ["Brute-Force"] schneller sein, wenn Sie keine solche Auflösung benötigen), und wenn ich mehr benötige Als 2 habe ich versucht, weiches PWM neben den harten PWMs zu verwenden, und es wird nicht sehr reibungslos, also habe ich mich dafür entschieden, alle PWM in Software zu machen, und es hat sich als großartig herausgestellt Nach einiger Zeit bleibt die weiche PWM stehen und kann sehr auffällig sein.



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...