PWM

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.

Auf dem Arduino-Board gibt es sechs Kanäle, die PWM-Signale erzeugen können – Siehe Analog Out.

8 Comments

  1. Hi,

    das original PWM ist ja recht langsam, wie du selber schreibst.

    Wie kann man hohe PWM Frequenzen ausgeben, z.B. im Bereich von 25 kHz?

    Danke.
    Jürgen

  2. Ralf Wolters

    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.

  3. Sebastian

    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 ;-)

  4. 是不是無法同時發射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); // 讓指示燈閃爍幾下 }

Schreibe einen Kommentar

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