Zum Hauptinhalt springen

PWM-Steuerung ohne Zwischenstufen

Was dieses Beispiel zeigt​

Festlegen der Anzahl der Ein-/Aus-Ticks eines Kanals und deren zeitliche Ansteigerung. Dies ist der grundlegende Baustein der Platine: Jeder übergeordnete Aufruf, einschließlich des Servowinkel-Helpers auf der nächsten Seite, ruft letztendlich setPWM() auf.

Der Beispielcode​

Select Board
Basic_PWM.ino
#include "PCA9685-SOLDERED.h"

PCA9685 pwm;

void setup()
{
pwm.begin();
pwm.setPWMFreq(1000); // fast PWM for LEDs/general outputs, not servos
}

void loop()
{
for (uint16_t duty = 0; duty <= 4095; duty += 32)
{
pwm.setPWM(0, 0, duty);
delay(20);
}
}

Erwartetes Ergebnis:

Keine serielle Ausgabe. Der Tastgrad von Kanal 0 steigt in Schritten von 32 von 0 auf 4064 an, wobei jede Rampe etwas mehr als 2,5 Sekunden dauert; anschließend wiederholt sich der Vorgang.

Verwendete Funktionen​

PCA9685(uint8_t _address = PCA9685_DEFAULT_ADDRESS)returns None

Nativer Konstruktor. Die I2C-Adresse der Platine wird über die Lötbrücken JP1–JP6 festgelegt. Übergeben Sie daher die Adresse, die der Konfiguration Ihrer Platine entspricht, oder belassen Sie die Standardeinstellung.

ReturnsKonstruktor; kein Rückgabewert.

Parameter

TypNameBeschreibung
uint8_t_addressI2C-Adresse der Platine. Standardwert ist PCA9685_DEFAULT_ADDRESS (0x40).
begin()returns void

Initialisiert den PCA9685 über I2C an der im Konstruktor festgelegten Adresse: Aktiviert den Oszillator, schaltet die ALLCALL-Adresse frei und stellt die Standard-PWM-Frequenz von 50 Hz ein. Rufen Sie diese Funktion einmal in der Funktion setup() auf.

ReturnsNichts.

Parameter

Diese Funktion benötigt keine Parameter.

setPWMFreq(float freq)returns void

Legt die PWM-Frequenz fest, die von allen 16 Kanälen gemeinsam genutzt wird. Die Frequenz wird auf den vom Chip unterstützten Bereich von 24 bis 1526 Hz begrenzt.

ReturnsNichts.

Parameter

TypNameBeschreibung
floatfreqGewünschte Frequenz in Hz, begrenzt auf 24–1526 Hz.
setPWM(uint8_t channel, uint16_t on, uint16_t off)returns void

Legt die Roh-Tick-Zahlen fest, bei denen die Ausgabe eines Kanals innerhalb einer PWM-Periode (4096 Ticks) ein- und ausgeschaltet wird. Wird direkt für LEDs und allgemeine PWM-Anwendungen verwendet; die Funktion `setServoAngle()` auf der nächsten Seite ist eine praktische Hülle für denselben Aufruf.

ReturnsNichts.

Parameter

TypNameBeschreibung
uint8_tchannelKanalnummer, 0 bis 15.
uint16_tonTick-Zählwert (0–4095), bei dem der Ausgang eingeschaltet wird.
uint16_toffTick-Zählwert (0–4095), bei dem der Ausgang ausgeschaltet wird.

Alles zusammenfügen​

begin() legt eine Standardfrequenz von 50 Hz fest, doch in diesem Beispiel wird diese mit setPWMFreq() sofort auf 1000 Hz erhöht, was für eine LED oder allgemeine PWM-Last besser geeignet ist als die von Hobby-Servos erwarteten 50 Hz. setPWM() legt dann beide Flanken des Impulses fest: Da on fest auf 0 gesetzt ist, steuert allein off den Tastgrad, sodass eine Ansteigerung von off von 0 auf 4064 den Ausgang von vollständig aus auf fast vollständig ein ansteigen lässt.

Um einen Kanal konstant zu halten, anstatt ihn anzusteigen, rufen Sie setPWM() einmal mit den gewünschten Tick-Werten auf und unterlassen Sie weitere Aufrufe; der PCA9685 erzeugt dieses Signal dann selbstständig weiter, bis Sie es ändern.