Was ist der Unterschied zwischen analogem Pin und PWM-Pin in Arduino?


Antwort 1:

Danke für die A2A. Ich werde versuchen, kurz und direkt zu sein.

Hier ist das Layout eines Arduino Uno:

Beachten Sie, wie Pin A0-A5 mit Analog IN gekennzeichnet sind. Dies liegt hauptsächlich daran, dass diese Pins als Eingangsstifte verwendet werden. Sie nehmen Eingaben in Form von Analogsignalen entgegen und geben Werte zwischen 0 und 1023 zurück (das liegt daran, dass das Arduino Uno über einen 10-Bit-Analog-Digital-Wandler verfügt, oder

2102^{10}

Auflösung).

Ein A / D-Wandler arbeitet ungefähr in drei Stufen: Abtastung, Quantisierung und Digitalisierung. Da das Arduino in einem Bereich von 0 bis 5 Volt arbeitet, beträgt die Schrittgröße des Geräts:

5/1023=0.00488volts,5/1023 = 0.00488 volts,

oder

4.88mV. 4.88 mV.

Somit können Sie einen 4,88-mV-Eingang als 1, 9,77 mV als 2 usw. bis 5 V = 1023 interpretieren. Alles unter 4,88 mV wird als 0 betrachtet.

Was lernen wir nun aus dieser Information?

  1. Dass die A / D-Pins nur für Eingangszwecke nützlich sind. Sie können verwendet werden, um Sensoren zu verbinden, die einen analogen Ausgang erzeugen. Sie können relativ kleine Werte in Bezug auf Temperatur, Druck oder einfache Spannung erfassen.

Wenden wir uns nun den PWM-Pins zu.

Was zum Teufel ist PWM?

Nun, PWM steht für "Pulse Width Modulation". Dies bedeutet wörtlich, dass ein analoger Wert auf einem digitalen Signal MODULIERT wird. Dies ist im Wesentlichen das Gegenteil von Modulationsschemata wie AM. Angenommen, Sie haben ein analoges Signal, das Sie an einen Aktuator senden möchten. Die von Ihnen verwendete Mikrocontroller-Plattform ist jedoch eine digitale MOSFET-basierte Plattform. Um Ihren gewünschten Ausgang zu erreichen, müssen Sie daher ein analoges Signal simulieren, indem Sie Ihren Ausgang sehr schnell ein- und ausschalten. Denken Sie daran: PWM kann nur die Auswirkungen eines reinen analogen Signals nachahmen und simulieren. Es kann niemals eine reine Digital-Analog-Wandlung durchführen (was im Allgemeinen einige aktive Komponenten wie Kondensatoren und Induktivitäten erfordert). Für die meisten Anwendungen ist ein PWM-Signal jedoch gut genug.

Wie führt das Arduino nun PWM durch?

Dazu müssen Sie die interne Architektur des ATmega328P studieren, um sich mit den internen Registern für PWM vertraut zu machen. Ich kann das allgemeine Prinzip dahinter jedoch so kurz wie möglich erläutern.

Das Arduino uno verfügt über einen 16-MHz-Quarzoszillator. Dies bedeutet, dass sein interner Taktzeitpunkt wie folgt lautet:

1/161/16

x

10610^6

= 62,5 nSec. Dies bedeutet, dass theoretisch die Uhr eines Arduino alle 62,5 nSec einmal ein- und ausgeschaltet wird. Groß. Auf dem Uno können Pin 5 und 6 ein PWM-Signal mit 980 Hertz erzeugen, was einen vollständigen Signalzyklus in 1020,4 Mikrosekunden bedeutet. Dies bedeutet, dass die Register so eingestellt sind, dass sie die Gesamttaktrate durch ungefähr 16326 teilen (dies ist natürlich ein Vielfaches von vielen Registern anstelle einer einzelnen Zahl). Somit können Sie eine minimale Pünktlichkeit von haben

1020.4uSec/2=510.2uSec.1020.4 uSec/2 = 510.2 uSec.

und eine minimale Ausschaltzeit von 510,2 uSec. Jetzt können Sie Signale erzeugen, die schnell genug ein- und ausgeschaltet werden, um den Anschein von analogen Signalen zu erwecken. Mit anderen Worten, wenn Sie eine LED mit einer Geschwindigkeit von 50% betreiben möchten, geben Sie ihr ein Signal mit einem Arbeitszyklus von 50%. Wenn Ihr Signal jedoch eine Frequenz von beispielsweise 1 Hertz hat, können Sie die LED mit bloßem Auge sichtbar ein- und ausschalten sehen. Was ist die Lösung, die Sie fragen? Nun, Sie hacken natürlich die menschliche Anatomie. Während es immer noch Debatten über die Abtastrate des menschlichen Auges und des Gehirns gibt, ist bekannt, dass die Menschen ein Flackern über 300 Hz wahrnehmen (auf der sicheren Seite. Dies kann bis zu 60 Hz betragen, daher haben Sie nie gedacht, dass diese alt sind Glühbirnen flackerten die ganze Zeit oder diese Retro-CRT erfrischte sich ständig) als lediglich gedimmte, konstante Lichtquelle. Und die PWM auf dem Arduino kann Signale mit 980 Hertz erzeugen. Wenn Sie also die Frequenz hochdrehen, erzeugen Sie eine Fata Morgana einer kontinuierlich gedämpften LED, die mit einer Kapazität von 50% arbeitet. In der Realität wird diese LED sehr schnell ein- und ausgeschaltet. Dies, mein Freund, ist ein Crashkurs über PWM (was sicherlich nicht ausreicht).

Hier sind einige Beispiele:

PWM bei 50% Einschaltdauer

PWM-Signale bei verschiedenen Arbeitszyklen.

Bonus: Flackernde CRT

Was können wir also aus den oben gegebenen Informationen lernen:

  1. Dass die PWM-Pins eines Arduino die Ergebnisse eines analogen Signals nachahmen können. Dass sie im Gegensatz zu den A / D-Pins hauptsächlich als Ausgangspins nützlich sind.

Hoffe das hilft!


Antwort 2:

Analoge Pins verwenden tatsächlich PWM, um einen beliebigen Wert der Ausgangsspannung zwischen 0 und 5 Volt bereitzustellen.

Die Zahl 0-255 gibt das Tastverhältnis des von uns benötigten PWM-Ausgangs an.

Wenn der Wert 0 angegeben wird, wird niemals eine positive Spitze erzeugt, und durch Erhöhen dieses Werts wird die Dauer des positiven Peaks weiter erhöht. Der Wert 255 hält die positive Spitze für die gesamte Dauer des Zyklus konstant und ergibt 5 V. Durch Verringern des Arbeitszyklus wird die Spannung entsprechend verringert.


Antwort 3:

Analoge Pins sind allgemeine analoge Eingangsstifte, über die dem Arduino ein analoges Signal (maximaler Bereich von 24 V) zur weiteren Analyse oder zum Ablesen von Werten zugeführt werden kann. PWM-Stifte verwenden das Konzept der Pulsweitenmodulation. Dies ist eine Art digitaler Modulation, bei der die EIN-Zeit und die AUS-Zeit eines digitalen Signals über jede zweite Dauer stark variiert werden, so dass die 5 V des digitalen Signals, wenn sie einem Gerät zugeführt werden, vorgeben, einen niedrigeren Spannungspegel zu haben. Der Maximalwert des PWM-Ports beträgt 255


Antwort 4:

Bei den PWM-Pins handelt es sich um einige ausgewählte digitale Pins, die mit dem Symbol ~ gekennzeichnet sind und allgemeine E / A-Arbeiten ausführen oder bei jedem von Ihnen angegebenen Arbeitszyklus einen dedizierten PWM-Strom erzeugen können. Es kann PWM im Hintergrund ausführen, während Ihr Programm andere Aufgaben ausführt. Die PWM-Frequenz variiert je nach gewähltem PWM-Pin. Das Tastverhältnis ist das gleiche, aber die Frequenz ist unterschiedlich, da diese Pins von verschiedenen Timern des Atmega 328-Mikrocontrollers gesteuert werden. Ein PWM-Strom kann bei Bedarf gefiltert werden, um einen analogen Ausgang zu erzeugen, oder verwendet werden, um beispielsweise die Motordrehzahl so zu steuern, wie er ist. analogWrite (Pin, Wert); bedeutet, wenn Sie PWM auf einem PWM-Pin (wie Arduino Pin 3) mit einem Tastverhältnis von 50% (perfekter Rechteckwellenausgang) wünschen, wird es analogWrite (3.127); bei einer Frequenz von 490 Hz (die Arduino-Standardeinstellung). Sie können verschiedene Frequenzen erhalten; siehe Arduino - SecretsOfArduinoPWM

Die analogen Eingänge (A0, A1, A2 usw.) können auch programmgesteuert als digitale E / A verwendet werden, wenn sie nicht als analoge Eingänge verwendet werden. Wenn sie als analoge Eingänge (und nur als analoge Eingänge) verwendet werden, erzeugt ein analoges Signal von 0 bis 5 Volt eine digitale Darstellung der Spannung, mit der der Mikrocontroller arbeiten kann, sodass Vergleiche durchgeführt oder Spannungen angezeigt werden können.