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 NoneKonstruktor. 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
| Typ | Name | Beschreibung |
|---|---|---|
I2C | i2c | Initialisiertes machine.I2C-Objekt. Optional; wird bei bekannten Boards automatisch erkannt. |
int | address | I2C-Adresse der Platine. Standardwert ist PCA9685_DEFAULT_ADDRESS (0x40). |
setPWMFreq(freq)returns boolLegt 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
| Typ | Name | Beschreibung |
|---|---|---|
float | freq | Gewünschte Frequenz in Hz, begrenzt auf 24–1526 Hz. |
setPWM(channel, on, off)returns boolLegt 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
| Typ | Name | Beschreibung |
|---|---|---|
int | channel | Kanalnummer, 0 bis 15. |
int | on | Tick-Zahl (0–4095), bei der der Ausgang eingeschaltet wird. |
int | off | Tick-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.