FSST - Hardwarenahe Programmierung

PWM Klasse

Inhalt

Siehe https://developer.mbed.org/users/mbed_official/code/mbed/docs/tip/classmbed_1_1PwmOut.html

Die Periodendauer (period) und die Pulsweite (puls width) 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 myled(p6);
:
myled = 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:

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

Das gleiche aber mit absoluten Werten:

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

Die PwmOut Hardware ist an bestimmte Timer gebunden, sodass eine Änderung der Periodendauer auf einem Output sich auch die anderen mit ändern. Die Pulsweite kann unabhängig für jeden Output-Pin geändert werden. Weiters ist die Reihenfolge der Befehle wichtig, damit der Duty-Cycle richtig zugeordnet wird (bei zwei Objekten pwmOne und pwmTwo würde das zweite einen invertierten bekommen):

pwmOne.period_us(100); // zuerst die Periode für beide dann die Dauer
pwmTwo.period_us(100);
 
pwmOne.write(0.20f); 
pwmTwo.write(0.20f);

LPC11U24 four general-purpose counter/timers.

/media/uploads/fpucher/pwm_timer.jpg

Die PWM Output-Pins des LPC11U24 gruppiert zu den verwendeten Timer (siehe implementation-details):

/media/uploads/fpucher/pwm_pins.jpg

Außerdem „könnte“ beim Überschreiben der Periodendauer ein Fehler auftreten (bug in the PWM lib for the LPC11U24). Das PWM-Verhalten beim LPC1768 ist etwas anders.

PWM an Led, die an Pin 6 angeschlossen ist:

/media/uploads/fpucher/pwm_p6.jpg

PwmOut myled(p6);
:
myled = 0.25f;

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 pulsewidth ist 1/4 der Periode.

PWM-RGB


All wikipages