Zum Hauptinhalt springen

Servo-Durchlauf

Was dieses Beispiel zeigt​

Ansteuerung eines Hobby-Servos anhand des Winkels statt anhand von Rohwerten und Hin- und Herbewegen über den konfigurierten Bereich. Dies ist der wichtigste Anwendungsfall, für den die Platine beworben wird.

Der Beispielcode​

from pca9685 import PCA9685
from utime import sleep_ms

pwm = PCA9685() # sets 50Hz PWM frequency by default, suitable for hobby servos

# Adjust to match your servo's datasheet if it doesn't reach full range
pwm.setServoPulseRange(500, 2500) # microseconds
pwm.setServoAngleRange(0, 180) # degrees

while True:
for angle in range(0, 181):
pwm.setServoAngle(0, angle)
sleep_ms(15)

for angle in range(180, -1, -1):
pwm.setServoAngle(0, angle)
sleep_ms(15)

Erwartetes Ergebnis:

Keine serielle Ausgabe. Ein an Kanal 0 angeschlossenes Hobby-Servo bewegt sich von 0 bis 180 Grad und zurück, wobei jede Richtung knapp unter 3 Sekunden dauert, und wiederholt diesen Vorgang anschließend.

Verwendete Funktionen​

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

Konstruktor. Legt die Standard-PWM-Frequenz von 50 Hz fest, wie sie von Hobby-Servos erwartet wird. Wenn „i2c“ nicht angegeben wird, werden die I2C-Pins auf ESP32-, ESP8266- und bestückten Dasduino CONNECTPLUS-Boards automatisch erkannt.

ReturnsKonstruktor; kein Rückgabewert.

Parameter

TypNameBeschreibung
I2Ci2cInitialisiertes machine.I2C-Objekt. Optional; wird bei bekannten Platinen automatisch erkannt.
intaddressI2C-Adresse der Platine. Standardwert ist PCA9685_DEFAULT_ADDRESS (0x40).
setServoPulseRange(minPulseUs, maxPulseUs)returns None

Konfiguriert die Impulsbreite in Mikrosekunden, die setServoAngle() dem minimalen und maximalen Winkel zuordnet. Passen Sie diesen Wert an das Datenblatt Ihres Servos an, falls dieses bei der Standardeinstellung der Bibliothek nicht seinen vollen mechanischen Bereich erreicht.

ReturnsNichts.

Parameter

TypNameBeschreibung
intminPulseUsImpulsbreite in Mikrosekunden, zugeordnet zum minimalen Winkel. Standardwert der Bibliothek: 500 us.
intmaxPulseUsImpulsbreite in Mikrosekunden, zugeordnet zum maximalen Winkel. Bibliotheksstandard: 2500 us.
setServoAngleRange(minAngle, maxAngle)returns None

Konfiguriert den Winkelbereich in Grad, der von setServoAngle() akzeptiert wird.

ReturnsNichts.

Parameter

TypNameBeschreibung
floatminAngleWinkel in Grad, der auf minPulseUs abgebildet wird. Standardwert der Bibliothek: 0.
floatmaxAngleWinkel in Grad, der auf maxPulseUs abgebildet wird. Standardwert der Bibliothek: 180.
setServoAngle(channel, angle)returns bool

Steuert ein Hobby-Servo auf dem angegebenen Kanal auf einen Winkel, der auf den konfigurierten Winkelbereich begrenzt ist. Wandelt den Winkel intern in eine Impulsbreite um und ruft für Sie setPWM() auf. Geht von der im Konstruktor festgelegten Standardfrequenz von 50 Hz aus.

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

Parameter

TypNameBeschreibung
intchannelKanalnummer, 0 bis 15.
floatangleWinkel in Grad, begrenzt auf den durch setServoAngleRange() festgelegten Bereich.

Zusammenfassung​

setServoPulseRange() und setServoAngleRange() sind einmalige Einrichtungsaufrufe: Führen Sie sie einmal aus, bevor Sie zum ersten Mal setServoAngle() aufrufen. Danach übernimmt setServoAngle() die Umrechnung von Winkel in Pulsbreite und ruft setPWM() für Sie auf, sodass Sie die Tick-Anzahl für einen Servo nie manuell berechnen müssen.

Dieses Beispiel basiert auf der vom Konstruktor voreingestellten Frequenz von 50 Hz, die von Hobby-Servos erwartet wird. Falls inzwischen eine andere Komponente auf derselben Platine setPWMFreq() auf einen anderen Wert gesetzt hat, zum Beispiel für eine LED auf einem anderen Kanal, sollten Sie die Servokanäle auf 50 Hz belassen, anstatt sich auf setServoAngle() bei einer anderen Frequenz zu verwenden.