Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
You are viewing an older revision! See the latest version
PWM Grundlegend
Blaue_Leds
PwmOut funktioniert im Simulator nicht für die vier blauen Leds. 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 Zykluszeit (cycle time) 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 (pulse 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.
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);
Die PWM Output-Pins siehe implementation-details.
PWM-Programmierung der RGB-Leds¶
Die RGB-Leds sind auf PWM-fähigen Ports angeschlossen und haben folgende Zuordnung:
| Rot | P2_3 | p23 |
| Grün | P2_2 | p24 |
| Blau | P2_1 | p25 |
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.