Hallo zusammen
Ich bin gerade dabei mir einen Raspberry Pi 6 DOF Robot Arm zusammenzubauen.
Ich habe mir 6 MG996R Servomotoren gekauft welche über ein PCA9685 Treiber Board gemeinsam angesteuert werden.
Angeschlossen habe ich das ganze wie im angehängten Bild.
Ich habe nun versucht die Motoren über folgenden Code anzusteuern:
import Adafruit_PCA9685
pwm = Adafruit_PCA9685.PCA9685()
pwm.set_pwm_freq(60)
max = 600
min = 150
pwm.set_pwm(7, 0, max)
time.sleep(2)
pwm.set_pwm(6, 0, max)
time.sleep(2)
pwm.set_pwm(5, 0, max)
time.sleep(2)
pwm.set_pwm(4, 0, max)
time.sleep(2)
pwm.set_pwm(7, 0, min)
time.sleep(2)
pwm.set_pwm(6, 0, min)
time.sleep(2)
pwm.set_pwm(5, 0, min)
time.sleep(2)
pwm.set_pwm(4, 0, min)
time.sleep(2)
Alles anzeigen
Ich habe folgendes Problem. Starte ich das Skript läuft es manchmal genau so durch wie ich es möchte, d.h. die Servomotoren drehen nacheinander an ihre max. Position und danach an ihre min.Position. Das Problem ist aber das manchmal (warum auch immer) ein Servomotor nach starten des Skripts nicht an der gewünschten Position stoppt sondern einfach immer weiter dreht, auch nach Beendigung des Skripts. Das einzige was hilft, ist die Stromzufuhr zu unterbrechen. Oft passiert das auch sobald das Skript fertig ist.
Ich habe wirklich keine Ahnung woran das liegt, da es eben manchmal auch normal funktioniert.
Kann das irgendwie an den time.sleep() liegen, dass ich hier größere Wert nutzen muss, damit ich mit dem nächsten Kommando erst weiter mache, wenn der Servo an der richtigen Position ist?
Des Weiteren ist mir aufgefallen, dass nach Beendigung des Skripts manchmal die Servomotoren "fest" sind, also dass sie versuchen ihre Position quasi zu halten und manchmal nicht. Kann es irgendwie sein, dass da im Hintergrund ein Thread gestartet wird, denn ich extra noch beenden muss?
Danke für eure Hilfe!!
LG