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 NoneKonstruktor. 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
| Typ | Name | Beschreibung |
|---|---|---|
I2C | i2c | Initialisiertes machine.I2C-Objekt. Optional; wird bei bekannten Platinen automatisch erkannt. |
int | address | I2C-Adresse der Platine. Standardwert ist PCA9685_DEFAULT_ADDRESS (0x40). |
setServoPulseRange(minPulseUs, maxPulseUs)returns NoneKonfiguriert 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
| Typ | Name | Beschreibung |
|---|---|---|
int | minPulseUs | Impulsbreite in Mikrosekunden, zugeordnet zum minimalen Winkel. Standardwert der Bibliothek: 500 us. |
int | maxPulseUs | Impulsbreite in Mikrosekunden, zugeordnet zum maximalen Winkel. Bibliotheksstandard: 2500 us. |
setServoAngleRange(minAngle, maxAngle)returns NoneKonfiguriert den Winkelbereich in Grad, der von setServoAngle() akzeptiert wird.
ReturnsNichts.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
float | minAngle | Winkel in Grad, der auf minPulseUs abgebildet wird. Standardwert der Bibliothek: 0. |
float | maxAngle | Winkel in Grad, der auf maxPulseUs abgebildet wird. Standardwert der Bibliothek: 180. |
setServoAngle(channel, angle)returns boolSteuert 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
| Typ | Name | Beschreibung |
|---|---|---|
int | channel | Kanalnummer, 0 bis 15. |
float | angle | Winkel 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.