Die PWM-Kanäle
Neben der direkten Ansteuerung der GPIO-Kanäle über die Klasse GPIO ist es mit Hilfe der Klasse PWM möglich, für einige interne oder externe Pins der JControl-Module eine Puls-Weiten-Modulation zu programmieren. Diese Funktionalität wird beispielsweise von der Klasse Buzzer benutzt, um Töne zu generieren. Die Klasse Backlight setzt PWM ein, um die Helligkeit der Hintergrundbeleuchtung (z.B. des JControl/SmartDisplay-Moduls) zu regulieren. Welche Pins über PWM-Kanäle angesteuert werden können, hängt vom eingesetzten JControl-Modul ab und kann der API Dokumentation von GPIO oder den Produkt-Datenblättern entnommen werden.
Hinweis: Da die Prozessoren der JControl-Module lediglich einen Frequenzgenerator aufweisen, sind die folgenden zwei Punkte zu beachten:
- Alle PWM-Kanäle arbeiten mit derselben Frequenz.
- Jeder PWM-Kanal arbeitet mit seinem eigenen "Duty Cycle".
Erzeugung eines Signals: Auf dem PWM-Ausgang 0 soll ein Rechtecksignal mit einer Frequenz von 2000Hz und gleichlangen High- und Low-Zyklen generiert werden. Der folgende Quelltext erledigt das unter Verwendung der Klasse PWM:
| 1 | import jcontrol.io.PWM; |
| 2 | |
| 3 | /** |
| 4 | * This example demonstrates the usage of class <code>PWM</code>. |
| 5 | */ |
| 6 | public class PWMExample { |
| 7 | /** PWM frequency */ |
| 8 | int frequency = 2000; |
| 9 | /** PWM channel */ |
| 10 | int channel = 0; |
| 11 | /** PWM duty cycle */ |
| 12 | int duty = 127; |
| 13 | |
| 14 | /** |
| 15 | * Set PWM frequency, duty cycle and turns the signal on. |
| 16 | */ |
| 17 | public PWMExample() { |
| 18 | PWM.setFrequency(frequency); |
| 19 | PWM.setDuty(channel, duty); |
| 20 | PWM.setActive(channel, true); |
| 21 | } |
| 22 | |
| 23 | /** |
| 24 | * Main method. Program execution starts here. |
| 25 | */ |
| 26 | public static void main(String args[]) { |
| 27 | new PWMExample(); |
| 28 | |
| 29 | for (;;) {} // sleep |
| 30 | } |
| 31 | } |
Listing 1: PWMExample.java
Durch einen Aufruf der PWM-Funktion setFrequency wird zunächst die gewünschte Frequenz (in Hertz) eingestellt. Die Methode setDuty bestimmt dann das Tastverhältnis mit einer Auflösung von 8 Bit und wird somit in einem Wertebereich von 0 bis 256 angegeben. 0 steht für das minimale Tastverhältnis (0%), und 256 für das maximale Tastverhältnis (100%). Der Wert 128 entspricht demnach einem Tastverhältnis von 50%. Anschließend wird im obenstehenden Listing der Puls-Weiten-Generator mit dem Aufruf der Methode setActive aktiviert.
Hinweis: Ein PWM-Ausgang liefert ein Rechtecksignal, dessen LOW-Potenzial eine Spannung von 0V aufweist und dessen HIGH-Potenzial gleich der Versorgungsspannung des JControl-Moduls ist.
Bild 1 zeigt das vom JControl-Modul ausgegebene Signal auf dem PWM-Kanal 0 nach Hochladen und Ausführen obigen Programms. Die Messwerte unseres Oszilloskopes zeigen, dass die generierte Frequenz exakt 2000Hz entspricht.

Bild 1: Oszilloskop-Aufnahme eines 2kHz PWM-Signals