Anzeige

PWM – Pulse Width Modulation

PWM bedeutet Pulse Width Modulation und beschreibt ein Verfahren, bei dem der Strom in schneller Abfolge ein- und abgeschalten wird. Ein Zeitintervall ist dabei 20 Millisekunden lang. Träge Bauelemente kann man durch ein PWM Signal dimmen. Ist der Strom z.B. 10 Millisekunden ein- und danach 10 Millisekunden abgeschalten, ist der resultierende Strom nur halb so groß. Eine LED würde also nur halb so kräftig leuchten.

Befehl

analogWrite(pwmPin, value);

value: 0 – 255
pin: Muss ein PWM-Pin sein. Auf dem Arduino-UNO-Board gibt es sechs Kanäle, die PWM-Signale erzeugen können: 3,5,6,9,10,11.

Hintergrund

Pulsweitenmodulation oder PWM ist eine Technik, die digitale Methoden verwendet, um analoge Ergebnisse zu erhalten. Dabei wird der digitale Controller verwendet, um Rechteckwellen zu erzeugen, d. h. Signale zum Öffnen und Schließen. Dieser Ein-Aus-Modus kann die Spannung zwischen dem vollständig eingeschalteten Zustand (5 Volt) und dem ausgeschalteten Zustand (0 Volt) basierend auf dem Verhältnis des Einschaltzeit zum Ausschaltzeit simulieren.

Die Dauer der Einschaltzeit wird als Impulsbreite bezeichnet. Um unterschiedliche Analogwerte zu erhalten, kann man diese Impulsbreite ändern oder modulieren. Verwendet man diese Modulation beispielsweise mit einer LED, entspricht das Ergebnis dem, als ob die durch LED eine konstante Spannung zwischen 0 und 5 V versorgt würde. Sie beeinflusst die die Helligkeit der LED.

Arduino PWM Animation

In der Abbildung stellet der Abstand der blauen Linien eine feste Zeitspanne dar. Die Dauer oder Periode ist der Kehrwert der PWM-Frequenz. Mit anderen Worten, in dem Fall, in dem die Arduino-PWM-Frequenz ungefähr 500 Hz beträgt, entsprechen die grünen Linien 2 ms. Der Wertebereich von AnalogWrite() liegt zwischen 0 und 255. Daher erfordert analogWrite(255) beispielsweise ein Verhältnis zwischen An und Aus von 100% (immer eingeschaltet), während analogWrite (127) ein Verhältnis zwischen An und Aus von 50% (die Hälfte der Zeit) erfordert.

PWM-Pins verschiedener Boards

  • Arduino UNO: 3, 5, 6, 9 – 11
  • Arduino MEGA: 2 – 13, 44 – 46
  • Arduino Leonardo, Micro Yún: 3, 5, 6, 9, 10, 11, 13
  • NodeMCU: D1 – D8, D12
  • Teensy3: 3 – 6, 9, 10, A6 – A9

Beispiele

Stefan Hermann

Ich bin Stefan und arbeite seit 2007 mit Arduino. Als Designer und Produktmanager setze ich das Board in erster Linie zum Bau von Prototypen ein. Hier teile ich meine Faszination und Erfahrung mit dir!

9 thoughts on “PWM – Pulse Width Modulation

  1. 是不是無法同時發射2組以上的脈波? 底下的程式只有第1組可以正常動作:/* * irObjectDetection.pde: 紅外線物體偵測 */ const int irRec1 = 2; // 紅外線接收器 const int irLed1 = 3; // 紅外線發射器 const int ledPin1 = 12; // 紅外線指示燈 const int irRec2 = 4; // 紅外線接收器 const int irLed2 = 5; // 紅外線發射器 const int ledPin2 = 13; // 紅外線指示燈 const unsigned int frqeneucy = 38000; // 發射頻率(單位: Hz) void setup() { pinMode(irRec1, INPUT); // 把 irReceiver 接腳設置為 INPUT pinMode(irLed1, OUTPUT); // 把 irLed 接腳設置為 INPUT pinMode(ledPin1, OUTPUT); // 把 ledPin 設置為 OUTPUT pinMode(irRec2, INPUT); // 把 irReceiver 接腳設置為 INPUT pinMode(irLed2, OUTPUT); // 把 irLed 接腳設置為 INPUT pinMode(ledPin2, OUTPUT); // 把 ledPin 設置為 OUTPUT tone(irLed1, frqeneucy); // 產生指定頻率的脈波 (Pulses) tone(irLed2, frqeneucy); // 產生指定頻率的脈波 (Pulses) } // 讓指示燈閃爍幾下 void blinkLED(int ledPin) { for (int i=1; i<= 3; i++) { digitalWrite(ledPin, HIGH); // 打開指示燈 delay(100); digitalWrite(ledPin, LOW); // 關掉指示燈 delay(100); } } void loop() { int ir1 = digitalRead(irRec1); // 讀取 irReceiver 的狀態 if (ir1 == 0) blinkLED(ledPin1); // 讓指示燈閃爍幾下 int ir2 = digitalRead(irRec2); // 讀取 irReceiver 的狀態 if (ir2 == 0) blinkLED(ledPin2); // 讓指示燈閃爍幾下 }

  2. Es heißt ausgeschaltet und nicht ausgeschalten!
    Du kannst etwas ausschalten, aber wenn du das getan hast, ist es ausgeschaltet und nicht ausgeschalten. grrrrr
    Wie mich das auch immer in den Videos nervt.
    Entschuldige bitte, dass ich so direkt bin, ist nicht böse gemeint.
    Musste ich jetzt mal loswerden ;-)

  3. Was das Dimmen von LEDs betrifft stimmt die Erklärung leider nicht. Im Gegensatz zu Glühlampen sind LEDs sehr schnelle Bauelemente. Aus diesem Grund kann man LEDs für Signalübertragungen bis in den zweistelligen MHz-Bereich verwenden. Das träge Element ist in diesem Fall das menschliche Auge.
    Für Systeme wie z.B. Glühlampen, die ja mit einem Glühdraht eine thermische Trägheit aufweisen oder für E-Motoren mit ihrer mechanischen Trägheit stimmt die Erklärung.

Comments are closed.