Zum Hauptinhalt springen

Servo-Durchlauf

Was dieses Beispiel zeigt​

Ansteuerung eines Hobby-Servos anhand des Winkels statt anhand von Roh-Ticks und Hin- und Herbewegen des Servos über seinen konfigurierten Bereich. Dies ist der wichtigste von der Platine beworbene Anwendungsfall.

Der Beispielcode​

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

PCA9685 pwm;

void setup()
{
pwm.begin(); // 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
}

void loop()
{
for (int angle = 0; angle <= 180; angle += 1)
{
pwm.setServoAngle(0, angle);
delay(15);
}

for (int angle = 180; angle >= 0; angle -= 1)
{
pwm.setServoAngle(0, angle);
delay(15);
}
}

Erwartetes Ergebnis:

Keine serielle Ausgabe. Ein an Kanal 0 angeschlossener Hobby-Servomotor 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(uint8_t _address = PCA9685_DEFAULT_ADDRESS)returns None

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

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 und legt die Standard-PWM-Frequenz von 50 Hz fest, wie sie von Hobby-Servos erwartet wird. Rufe diese Funktion einmal in der Funktion setup() auf.

ReturnsNichts.

Parameter

Diese Funktion benötigt keine Parameter.

setServoPulseRange(uint16_t minPulseUs, uint16_t maxPulseUs)returns void

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
uint16_tminPulseUsImpulsbreite in Mikrosekunden, zugeordnet zum Mindestwinkel. Standardwert der Bibliothek: 500 us.
uint16_tmaxPulseUsImpulsbreite in Mikrosekunden, die dem maximalen Winkel zugeordnet ist. Bibliotheksstandard: 2500 us.
setServoAngleRange(float minAngle, float maxAngle)returns void

Konfiguriert den von setServoAngle() akzeptierten Winkelbereich in Grad.

ReturnsNichts.

Parameter

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

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 setPWM() auf, wobei standardmäßig die von begin() festgelegte Frequenz von 50 Hz zugrunde gelegt wird.

ReturnsNichts.

Parameter

TypNameBeschreibung
uint8_tchannelKanalnummer, 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 niemals die Tick-Anzahl für ein Servo manuell berechnen müssen.

In der Dokumentation zu setServoAngle() wird davon ausgegangen, dass setPWMFreq(50) gilt – der Standardwert, den begin() festlegt. Falls inzwischen eine andere Komponente auf demselben Board setPWMFreq() auf einen anderen Wert gesetzt hat, beispielsweise für eine LED auf einem anderen Kanal, sollten Sie die Servokanäle bei 50 Hz belassen, anstatt sich auf setServoAngle() bei einer anderen Frequenz zu verlassen.