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