PWM: Emulieren von analogen Pins mit Ihrer Arduino-Karte

PWM-Signale

Mit den digitalen und analogen Pins, die Sie auf Ihrer Arduino-Karte verwenden können, können Sie elektrische Signale empfangen oder senden, um Daten aus Ihren elektronischen Projekten zu steuern oder abzurufen. Darüber hinaus gibt es andere sehr interessante Signale in diesem Plattentyp, und das sind die PWM das kann ein analoges Signal emulieren, ohne tatsächlich analog zu sein. Das heißt, es handelt sich um digitale Pins, die auf ähnliche Weise (nicht gleich) wie ein analoges Signal wirken können.

Diese Arten von Signalen sind sehr praktisch, wenn Sie nicht nur digitale HIGH- und LOW-Signale verwenden möchten, dh 1 oder 0, EIN und AUS, sondern auch weiter gehen und beschreiben möchten etwas komplexere Signale. Zum Beispiel ist es möglich, die Geschwindigkeit von a zu modulieren Motor DCoder die Lichtintensität eines Lichts für einen Magneten usw.

Analoges vs digitales System

Analoges gegen digitales Signal

Elektronische Schaltungen können in zwei große Familien oder Kategorien unterteilt werden: digital und analog. Wenn wir über digitale Elektronik sprechen, verwenden wir Größen mit diskreten Werten, dh ein Binärsystem, das durch elektrische Signale einer niedrigen oder hohen Spannung dargestellt wird, um den Zustand der behandelten Bits zu interpretieren. Andererseits werden bei einer analogen Schaltung Größen mit kontinuierlichen Werten verwendet.

Innerhalb digitaler Systeme finden sich wiederum diejenigen vom kombinatorischen Typ und diejenigen vom sequentiellen Typ. Das heißt, erstere sind solche, bei denen die Ausgabe des Systems nur vom Zustand der Eingaben abhängt. Andererseits sind in den sequentiellen Speicherelementen enthalten, und die Ausgabe hängt vom aktuellen Zustand der Eingänge und dem zuvor gespeicherten Zustand ab.

Bei Analoga gibt es diese beiden großen Gruppen oder Varianten nicht, da es sich hier um kontinuierliche Signale handelt, die immer davon abhängen das Signal aktuelles System. In einem Lautsprecher hängt das an ihn gelieferte Signal beispielsweise von dem Ton ab, den Sie wiedergeben möchten. Das gleiche gilt für ein Mikrofon, das je nach empfangenem Ton ein analoges Signal erzeugt. Sicherlich haben Sie es auch bei vielen anderen Sensoren gesehen, die wir in diesem Blog beschrieben haben und die mit analogen Signalen arbeiten (und daher musste eine Formel erstellt werden, damit die Werte später in den Arduino IDE-Skizzen berechnet oder konditioniert werden können ) ...

Diese Eigenschaften des einen und des anderen lassen einige ihre haben vor und nachteile, wie es in fast allem üblich ist. Zum Beispiel sind digitale normalerweise billiger, schneller, einfacher zu entwickeln, Informationen können einfacher gespeichert werden, sie haben eine größere Genauigkeit, sie können programmiert werden, sie sind nicht so anfällig für die Auswirkungen von Rauschen usw. Es stimmt aber auch, dass Sie mit Analoga mit komplexeren Signalen arbeiten können.

von ejemploEin digitaler Hall-Effekt-Sensor kann nur das Vorhandensein oder Fehlen eines nahe gelegenen Magnetfelds erfassen. Stattdessen kann ein analoger Hall-Effekt-Sensor dies tun und dank eines analogen Signals, das er an seinem Ausgang erzeugt, auch die Dichte des Magnetfelds bestimmen. Wenn Sie wissen, wie Sie das Signal mit mehr oder weniger Spannung gut interpretieren können, können Sie diese Größe leicht erkennen. Sie haben andere Beispiele in einer Vielzahl von Größen der Natur, die Sie mit einem analogen System quantitativ messen können, wie z. B. Temperatur, Zeit, Druck, Entfernung, Schall usw.

Analoges gegen digitales Signal

Davon abgesehen, a Analogsignal Es wird eine Spannung oder ein elektrischer Strom sein, der sich mit der Zeit und kontinuierlich ändert. Bei einer grafischen Darstellung wäre das analoge Signal eine Sinuswelle mit einer Frequenz.

Da der Digitalsignalist eine Spannung, die sich zeitlich schrittweise ändert. Das heißt, wenn es in einem Diagramm dargestellt wird, handelt es sich um ein Schrittsignal, das sich nicht kontinuierlich ändert, sondern sich in Schritten oder diskreten Inkrementen ändert.

Sie sollten wissen, dass es Schaltkreise gibt, die von einem analogen zu einem digitalen Signal oder umgekehrt wechseln können. Diese Konverter Sie werden als DAC (Digital-Analog-Wandler) und ADC (Analog-Digital-Wandler) bezeichnet. Und sie sind in vielen Geräten, die wir heute verwenden, wie Fernseher, Computer usw., sehr verbreitet. Mit ihnen können Sie die von diesen Geräten verwendeten digitalen Signale in eine elektronische Ebene umwandeln, um mit anderen Peripheriegeräten oder Teilen zu arbeiten, die analog arbeiten.

von ejemplo, ein Lautsprecher oder ein Mikrofon mit analogen Signalen, die mit einer Soundkarte funktionieren, oder digitale Grafikkarten, die den berühmten RAMDAC-Chip für die analogen Monitoranschlüsse hatten ... In Arduino werden diese Konvertertypen, wie wir sehen werden, auch für mehrere Projekte verwendet ...

Was ist PWM?

grafischer Arbeitszyklus

Obwohl PWM (Pulsweitenmodulation) oder Pulsweitenmodulation, hat eine digitale Basis, die Form seines Signals ähnelt einem etwas "quadratischen" analogen Signal. Es ermöglicht mittels digitaler Impulse, das Signal zu variieren, um ein analoges System zu emulieren, wie ich bereits zuvor kommentiert habe. Wenn Sie sich den Namen ansehen, erhalten Sie durch die Breite der digitalen Impulse bereits Hinweise darauf, was er tut.

Dies ist vorteilhaft für Arduino da es viele automatismen oder elektronische komponenten gibt, die sie zu ihren projekten hinzufügen können und das sind nicht in der Lage, ein echtes analoges Signal zu liefern, aber sie verwenden diese PWM, um zu arbeiten. Sie können auch kein diskretisiertes analoges Signal verwenden, das heißt, das zu Spannungssprüngen geht, um einem digitalen zu ähneln. Was sie tun können, ist einen digitalen Ausgang -Vcc oder Vcc eines digitalen Typs zu verwenden, um dieses besondere Signal zu erzeugen ...

Daher ist PWM eine Art "Trick", mit dem Arduino und andere Systeme mit dieser Art von Signalen zusammenarbeiten können Sie sind weder ganz analog noch konventionell digital. Um dies zu ermöglichen, halten sie einen digitalen Ausgang je nach Interesse jederzeit für eine bestimmte Zeit oder für eine bestimmte Zeit aktiv. Dies ist weit entfernt von einem digitalen Takt oder einem Binärcodesignal, dessen Impulse die gleiche Breite haben.

In Ihren Projekten mit Arduino können Sie diese Art von PWM-Signalen überprüfen, bei denen eine konstante Frequenz von Impulsauslösern über die Zeit beibehalten wird, aber Die Breite dieser Impulse wird variiert. Tatsächlich wird es als Arbeitszyklus bezeichnet, wenn ein Signal in Bezug auf die Gesamtheit des Zyklus hoch gehalten wird. Daher wird der Arbeitszyklus in% angegeben.

Denken Sie daran, dass Sie in einer PWM nicht wie in einem analogen Signal zwischen verschiedenen Spannungswerten arbeiten und zwischen diesen schwanken. Bei PWM handelt es sich um ein quadratisches Signal im digitalen Stil und dessen Maximalwert Vcc ist. Wenn Sie beispielsweise mit einem 3-V-Netzteil arbeiten, können Sie 3-V- oder 0-V-Impulse geben, jedoch nicht 1 V oder einen anderen Zwischenwert, wie er bei einem echten Analog auftreten würde. Was in diesem Fall variieren würde, ist die Impulsbreite, die wir 30% bei diesem hohen Vcc-Wert oder 60% halten können, um ihm mehr Leistung zu geben usw.

Aber seien Sie vorsichtig, denn wenn ein Gerät eine Vcc-Grenze unterstützt und mit PWM überschritten wird, kann es beschädigt werden. Es wäre also immer notwendig, die Werte der von den Herstellern bereitgestellten Datenblätter zu beachten. Auch in einigen Geräten wie Gleichstrommotoren, RelaisBei Elektromagneten usw. kann eine Spannungsentnahme nach einem Arbeitszyklus dazu führen, dass induktive Lasten Schäden verursachen können. Deshalb die Schutzmaßnahmen rechtzeitig.

PWM auf Arduino

Arduino I2C Bus

Nachdem Sie nun wissen, wie es funktioniert, wollen wir uns den speziellen Fall von PWM in der Arduino-Welt ansehen ...

PWM: Pinbelegung auf Arduino

Auf Arduino-Boards finden Sie mehrere Pins, die Hardware-PWM implementieren. Sie können sie auf der Leiterplatte selbst identifizieren, da sie eine haben Symbol ~ (kleiner Kopf) zusammen mit der Pin-Nummerierung. Es könnte auch durch Software im Arduino-Code gemacht werden, aber das würde den Mikrocontroller mit Arbeit überlasten, etwas Absurdes, wenn es nativ und durch Hardware gemacht werden kann ...

  • Arduino UNO, Mini und Nano- Sie haben 6 8-Bit-PWM-Ausgänge an den Pins 3, 5, 6, 9, 10 und 11, die das ~ direkt vor der Nummer haben.
  • Arduino Mega- Auf dieser leistungsstärksten Arduino-Karte befinden sich 15 8-Bit-PWM-Ausgänge. Sie befinden sich an den Stiften 2 bis 13 und 44 bis 46.
  • Arduino Due: In diesem Fall gibt es 13 8-Bit-PWM-Ausgänge. Sie befinden sich an den Pins 2 bis 13 sowie an zwei weiteren vom DAC diskretisierten Analogausgängen mit 12-Bit-Auflösung.

Wenn Sie bei dieser Art von PWM-Ausgängen von einer 8-Bit- oder 12-Bit-Auflösung usw. sprechen, beziehen Sie sich auf den Handlungsspielraum, den Sie haben. Mit 8 Bits haben 256 Ebenen zwischen denen Sie variieren können, und die 12 Bits gehen bis zu 4096 Ebenen.

Steuerung mit Timern

Für die Hardware-PWM-Steuerung Arduino wird die Timer verwenden dafür. Jeder vorhandene Timer kann 2 oder 3 PWM-Ausgänge bedienen. Ein Vergleichsregister für jeden Ausgang ergänzt dieses System, so dass, wenn die Zeit den Wert des Registers erreicht, der Zustand oder Wert des Ausgangs geändert wird, um diese Arbeitszyklen zu stoppen. Obwohl zwei Ausgänge von demselben Timer gesteuert werden, können beide unterschiedliche Arbeitszyklen haben, obwohl sie dieselbe Frequenz haben.

Bei den Timern, die jedem PWM-Pin zugeordnet sind, variiert dies abhängig von der Art des Arduino-Boards das du hast:

  • Arduino UNO, Mini und Nano:
    • Timer0 - 5 und 6
    • Timer1 - 9 und 10
    • Timer2 - 3 und 11
  • Arduino Mega:
    • Timer0 - 4 und 13
    • Timer1 - 11 und 12
    • Timer2 - 9 und 10
    • Timer3 - 2, 3 und 5
    • Timer4 - 6, 7 und 8
    • Timer5 - 44, 45 und 46

Das vorskalierte Register teilt die Zeit durch eine Ganzzahl und der Timer erledigt den Rest, um jeden der zugeordneten PWM-Ausgänge zu steuern. Durch Ändern des Registrierungswerts kann die Häufigkeit geändert werden. Das Frequenz Sie unterscheiden sich auch je nach Timer und Platte:

  • Arduino UNO, Mini und Nano:
    • Timer0: Ermöglicht die Vorskalierung von 1, 8, 64, 256 und 1024. Die Frequenz beträgt 62.5 kHz.
    • Timer1: mit Voreinstellungen von 1, 8, 64, 256 und 1024. Mit einer Frequenz von 31.25 kHz.
    • Timer2: Entspricht Timer1, fügt jedoch zusätzlich zu den vorherigen eine Vorskalierung von 32 und 128 hinzu.
  • Arduino Mega:
    • Timer0, 1, 2: wie oben.
    • Timer3, 4 und 5: mit einer Frequenz von 31.25 kHz und einer Vorskalierung von 1, 8, 64, 256 und 1024.

Inkompatibilitäten und Konflikte

Der Timer mit den Ausgängen verbunden ist nicht nur für diese Funktionwird auch von anderen verwendet. Wenn sie von einer anderen Funktion verwendet werden, müssen Sie zwischen der einen oder der anderen wählen. Sie können daher nicht beide gleichzeitig verwenden. Dies sind beispielsweise einige der Inkompatibilitäten, die Sie in Ihren Projekten finden können:

  • Servobibliothek: Wenn Sie Servomotoren verwenden, werden Timer intensiv genutzt, sodass Konflikte auftreten können. Verwenden Sie Timer1 speziell für UNO, Nano und Mini, dh Sie können die Pins 9 und 10 nicht verwenden, während Sie eine Skizze mit dieser Bibliothek verwenden. In Mega hängt es von der Anzahl der Servos ab ...
  • SPI: Wenn die SPI-Kommunikation auf der Arduino-Karte verwendet wird, wird Pin 11 für die MOSI-Funktion verwendet. Aus diesem Grund kann dieser PWM-Pin nicht verwendet werden.
  • Ton: Diese Funktion verwendet Timer2 zum Betrieb. Wenn es also verwendet wird, machen Sie die Pins 3 und 11 (oder 9 und 10 für Mega) unbrauchbar.

Praktischer Test mit Arduino

Arduino PWM Schema mit LED

Wenn Sie vor Ort sehen möchten, wie PWM auf Arduino funktioniert, können Sie am besten die Messleitungen von a anschließen Voltmeter oder Multimeter (in Funktion zum Messen der Spannung) zwischen dem von Ihnen ausgewählten PWM-Pin und dem Erdungsstift oder GND der Arduino-Platine. Auf diese Weise können Sie auf dem Bildschirm des Messgeräts sehen, wie sich die Spannung bei einem digitalen Ausgang dank dieses PWM-Tricks ändert.

Sie können das Voltmeter / Multimeter durch eine LED ersetzen, um zu sehen, wie sich die Intensität des Lichts ändert, mit einem Gleichstrommotor oder mit einem anderen gewünschten Element. Ich habe es im Diagramm mit Fritzing mit einer LED ohne mehr vereinfacht, weiß aber, dass es auch die Spitzen eines Multimeters darstellen kann ...

Wenn Sie eine LED verwenden, denken Sie an den Widerstand an der Kathode und am GND.

zu der Quellcode Um den Arduino-Board-Mikrocontroller so zu steuern, dass alles funktioniert, sollten Sie diesen in die Arduino-IDE einfügen (in diesem Fall habe ich PWM-Pin 6 von verwendet Arduino UNO):

const int analogOutPin = 6;
byte outputValue = 0;  
 
void setup()
{  
   Serial.begin(9600);        
   pinMode(ledPIN , OUTPUT); 
 
   bitSet(DDRB, 5);       // LED o voltímetro
   bitSet(PCICR, PCIE0);       
   bitSet(PCMSK0, PCINT3);     
}
 
void loop() 
{
   if (Serial.available()>0)  
   {
      if(outputValue >= '0' && outputValue <= '9')
      {
         outputValue = Serial.read();   // Leemos la opción
         outputValue -= '0';      // Restamos '0' para convertir a un número
         outputValue *= 25;      // Multiplicamos x25 para pasar a una escala 0 a 250
         analogWrite(ledPIN , outputValue);
      }
   }
}  
 
ISR(PCINT0_vect)
{
   if(bitRead(PINB, 3))
   { 
      bitSet(PORTB, 5);   // LED on 
   }
   else
   { 
      bitClear(PORTB, 5); // LED off  
   } 
} 
Ich rate Ihnen, mit den Werten zu spielen und zu sehen die Ergebnisse auf dem Licht oder Voltmeter. Das Programm kann Werte von 0 bis 9 empfangen, sodass Sie sehen können, wie sich alles ändert. Für weitere Informationen rate ich Ihnen der Arduino-Kurs das haben wir im kostenlosen Download ...

Einen Kommentar, hinterlasse deinen

Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert mit *

*

*

  1. Verantwortlich für die Daten: Miguel Ángel Gatón
  2. Zweck der Daten: Kontrolle von SPAM, Kommentarverwaltung.
  3. Legitimation: Ihre Zustimmung
  4. Übermittlung der Daten: Die Daten werden nur durch gesetzliche Verpflichtung an Dritte weitergegeben.
  5. Datenspeicherung: Von Occentus Networks (EU) gehostete Datenbank
  6. Rechte: Sie können Ihre Informationen jederzeit einschränken, wiederherstellen und löschen.

  1.   Jose sagte

    Hallo guten Tag. Zunächst möchte ich mich bei Ihnen für die Zeit bedanken, die dieser Erklärung für das Neueste gewidmet ist.
    Ich möchte Ihnen eine Anfrage stellen. Ich versuche, den Code auf einem Proteus 8-Emulator für Arguino Mega auszuführen. Ich schließe ein Voltmeter an Pin 6 an, Proteus ist an eine serielle Schnittstelle angeschlossen, aber ich weiß nicht, wie oder was ich variieren soll, damit unterschiedliche Spannungen ausgegeben werden. Ich musste kleinere Anpassungen am Code vornehmen, damit er kompiliert werden konnte. Vielen Dank für Ihre Hilfe