Technische Informatik; Hardwarenahe Programmierung

PWM Grundlegend

Inhalt

Info zum Simulator

PwmOut funktioniert im Simulator nicht für die vier blauen Leds (es müssen mit "Add component" Leds an den entsprechenden Pins hinzugefügt werden). Die Funktionen period() und pulsewidth() funktionieren derzeit auch nicht. Weiters ist im Simulator immer ein wait-Befehl notwendig.

Verwende das PwmOut-Interface bzw. Klasse, um die Frequenz und das Tastverhältnis eines PWM-Signals zu steuern.

Tipps

Stelle zuerst die Periode oder Zykluszeit (cycle time) mit der Funktion period () und dann das Tastverhältnis (duty cycle) ein, indem entweder eine relative Zeitspanne über die Funktion write() oder eine absolute Zeitspanne über die Funktion pulsewidth() festgelegt wird. Die Standardperiode ist 0.020s und die Standardimpulsbreite ist 0.

Die Periodendauer (period) und die Pulsweite (pulsewidth) kann sowohl in Sekunden, Milli-/Mikrosekunden als auch in Prozente der Periodendauer angegeben werden (siehe Tabelle). Die Default Periodendauer ist 20ms, und die Default-Pulsweite ist 0.

/media/uploads/fpucher/pwm_func.jpg

PwmOut led(p5);
:
led = 0.25f;

PwmOut & operator= (float value) A operator shorthand for write()

verwendet den PwmOut operator= als Abkürzung für led.write(0.25), was den duty cycle in Prozent als float angibt. D.h. der duty cycle ist 25%, die high-time pulse width ist 1/4 der Periode. Das gleiche bewirkt:

Die folgenden Code-Teile funktionieren nur mit dem mbed-Application-Board :

// specify period first, then everything else
led.period_ms(20.0f);  // 20 milli second period
led.write(0.25f);      // 25% duty cycle

Das gleiche aber mit absoluten Werten:

led.period_ms(20.0f);  // 20 mili second period
led.pulsewidth_ms(5);  //  5 mili second pulse (on)

PWM-Programmierung der RGB-Leds


Die RGB-Leds sind auf PWM-fähigen Ports angeschlossen und haben folgende Zuordnung:

MbedNUCLEO
RotP2_3p23D1
GrünP2_2p24D0
BlauP2_1p25D10

Definition im Programm:

PwmOut red(p23);
PwmOut green(p24); 
PwmOut blue(p25);

:
green.period(0.001); 	// Periodendauer für Grün ist 1ms
blue = red = 1;		// Leds ausschalten

Die Übergabe an die PWM-Einheit erfolgt über eine float-Variable (0.0 bis 1.0), wobei die Zuordnung über 1=LED off und 0 =LED 100% hell definiert ist.

NUCLEO-AnalogIn-Code Beispiel und PWM Ausgabe auf RGB Led. (siehe auch Analog IO)

Fragen

  1. Wo kann die PWM eingestzt werden?
  2. Lassen sich LEDs über die Spannung dimmen? (Begründung)
  3. Mit welcher Frequenz sollte eine LED gedimmt werden? (100Hz .. 1kHz; max 9kHz)
  4. Welcher Duty Cycle muss eingestellt werden, sodass eine LED nur mit ca. 1/4 der Leuchtstärke leuchtet?(Codezeilen)
  5. Sie haben eine Periode von 4s und einen DC von 50%. Stellen Sie diese Werte mit den Funktionen period() und write() bzw. mit period() und pulswidth() ein.

All wikipages