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