Hallo liebe Roboterfreunde,

ich habe in meinem aktuellen Projekt vor mit Hilfe eines Servos eine Tür zu öffnen und zu schliessen und während dessen die dabei auftretenden Kräfte zu messen. Die Kraftmessung bereitet keine Probleme. Um genug Kraft für die Türöffnung aufbringen zu können, dachte ich gönne ich mir die kräftigen Hitec D845. So weit so gut.

Ich habe schnell rausgefunden, dass die Tutorialskripte nur für gängie meist analoge Servos taugen. Ich habe kein Datenblatt zur Ansteuerung des Servos gefunden, lediglich die Anleitung des dazugehörigen Controllers zum programmieren verschiedener Funktionen (Arbeitsbereich, Geschwindigkeit...). Darin ist zu sehen, dass der Standardbereich zwischen 900 und 2100 (Mittelstellung 1500) liegt. Eine Einheit ist nicht zu sehen aber es wird sich wohl um us handeln. Bei 50Hz ist das Signal 20ms = 20.000us lang und mit dem dutycycle zwischen 4,5-10,5% sollten sich daraus 900-2100us ergeben.

Damit habe ich dann diesen Code getestet:

Code:
import RPi.GPIO as GPIO
import time

servoPIN = 18
GPIO.setmode(GPIO.BCM)
GPIO.setup(servoPIN, GPIO.OUT)

p = GPIO.PWM(servoPIN, 50) # GPIO 17 als PWM mit 50Hz
p.start(7.5)
try:
  while True:
    p.ChangeDutyCycle(6.5) # Bereich Rechnerisch 4.5-7.5-10.5
    print("Min1")
    time.sleep(1)
    p.ChangeDutyCycle(9) #wie weit rechts rum
    print("Max1")
    time.sleep(1)
    p.ChangeDutyCycle(6.5) # wie weit links rum
    print("Min2")
    time.sleep(1)
    p.ChangeDutyCycle(9)
    print("Max2")
    time.sleep(1)

except KeyboardInterrupt:
  p.stop()
  GPIO.cleanup()
Das ganze funktioniert so halbwegs. Der Bereich lässt sich von 2.9 bis 11.3% erweitern ist also größer als erwartet.

Nun zu meinen Fragen:

Während der pausen zittert der Servo teils sehr stark. Wie ließe sich das unterbinden? Ich habe bereits gegoogled und die pigpio Bibliothek verwendet. Damit ruckelt es nicht mehr aber der Bereich den man verstellen kann ist zwischen 500 und 2500us festgelegt. Ich kann aber mit meinem Servo nur von 450 bis 1050us variieren und das ist sehr wenig.

Habe ich irgendwelche Fehler bei der Ansteuerung gemacht? Gibt es Besonderheiten die man bei digitalen Servos wie diesem beachten muss?

Vielen Dank schonmal.

Gruß