2017-07-05 5 views
1

Wie servomotor erreichen den gewünschten winkel langsam mit raspberry pi mit python? Ich habe das versucht, aber es scheint nicht unter allen Bedingungen zu funktionieren.steuerung servomotor geschwindigkeit von raspberry pi

p = GPIO.PWM(7,50) 
    p.start(7.5) 
    def servo(angl) : 
     try : 
       angle_end = angl 
       for i in range (1,100) : 
        angle_step_to_end = (i *angle_end)/100 
        duty_cycle =(((12.5-2.5)/(180-0) * angle_step_to_end)+2.5 
        p.ChangeDutyCycle(duty_cycle) 
     except KeyboardInterrupt : 
          p.stop() 
          GPIO.cleanup() 

Gibt es etwas realeres?!

Antwort

0

Typische Hobby-Servos sind so konstruiert, dass sie sich so schnell wie möglich zur befohlenen Position drehen. Um eine langsame Bewegung zu erhalten, muss die befohlene Position langsam geändert werden. Ohne viel manuelle Berechnungen zu machen, scheint Ihr Code das zu tun.

Typische Werte sind 1,5 Millisekunden Impulse alle 20 ms (7,5%) oder so, um das Servo in seinem Bewegungsbogen zu "zentrieren". Um zu den Extremen zu gelangen, sind typische Werte 1,0 Millisekunden bei einem Extrem bis 2,0 bei dem anderen.

Da 7,5 der Mittelpunkt ist, schlage ich vor, dass Sie einfach p.ChangeDutyCycle() mit Werten aufrufen, die (so reibungslos wie Sie wollen) zwischen 5,0% und 10,0% variieren. Bedenken Sie natürlich, dass die Steuerung von Hobby-Servos typischerweise von einem sehr günstigen Potentiometer gesteuert wird und dass eine super-genaue Steuerung nicht wirklich erreichbar ist.