Zum Hauptinhalt springen

PWM-Steuerung ohne Filterung

Was dieses Beispiel zeigt​

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

Der Beispielcode​

from pca9685 import PCA9685
from utime import sleep_ms

pwm = PCA9685()
pwm.setPWMFreq(1000) # fast PWM for LEDs/general outputs, not servos

while True:
for duty in range(0, 4096, 32):
pwm.setPWM(0, 0, duty)
sleep_ms(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, und wiederholt sich anschließend.

Verwendete Funktionen​

PCA9685(i2c=None, address=PCA9685_DEFAULT_ADDRESS)returns None

Konstruktor. Wenn „i2c“ nicht angegeben wird, erkennt das Programm automatisch die I2C-Pins (SCL 22, SDA 21) auf ESP32-, ESP8266- und bestückten Dasduino CONNECTPLUS-Boards und löst bei allen anderen Boards eine Ausnahme aus. Übergeben Sie Ihr eigenes initialisiertes `machine.I2C`-Objekt, um ein anderes Pin-Paar oder eine andere Platine zu verwenden.

ReturnsKonstruktor; kein Rückgabewert.

Parameter

TypNameBeschreibung
I2Ci2cInitialisiertes machine.I2C-Objekt. Optional; wird bei bekannten Boards automatisch erkannt.
intaddressI2C-Adresse der Platine. Standardwert ist PCA9685_DEFAULT_ADDRESS (0x40).
setPWMFreq(freq)returns bool

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.

ReturnsWahr bei Erfolg.

Parameter

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

Legt die Roh-Tick-Zahlen fest, bei denen der Ausgang 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.

ReturnsWahr bei Erfolg, Falsch, wenn der Kanal außerhalb des Bereichs liegt.

Parameter

TypNameBeschreibung
intchannelKanalnummer, 0 bis 15.
intonTick-Zahl (0–4095), bei der der Ausgang eingeschaltet wird.
intoffTick-Zahl (0–4095), bei der der Ausgang ausgeschaltet wird.

Alles zusammenfügen​

Der Konstruktor legt standardmäßig 50 Hz fest, aber dieses Beispiel erhöht die Frequenz sofort mit setPWMFreq() auf 1000 Hz, was für eine LED oder eine 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 ein Ansteigen 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.