2017-06-01 74 views
1

所以我试图用pi相机使用伺服(杜曼s0306d),试图运行这个脚本,我发现测试电机,它开始运行,但不会停止,除非我手动从面包板上拔下它。树莓派伺服不停止

import RPi.GPIO as IO  # calling for header file for GPIO’s of PI 
import time       # calling for time to provide delays in program 
IO.setwarnings(False)   # do not show any warnings 
IO.setmode (IO.BCM)   # programming the GPIO by BCM pin numbers. (like PIN29 as‘GPIO5’) 
IO.setup(19,IO.OUT)    # initialize GPIO19 as an output 
p = IO.PWM(19,50)    # GPIO19 as PWM output, with 50Hz frequency 
p.start(7.5)        # generate PWM signal with 7.5% duty cycle 
time.sleep(4) 
for x in range(0,5):              # execute loop forever          
     p.ChangeDutyCycle(7.5)     # change duty cycle for getting the servo position to 90º 
     time.sleep(1)          # sleep for 1 second 
     p.ChangeDutyCycle(12.5)     # change duty cycle for getting the servo position to 180º 
     time.sleep(1)          # sleep for 1 second 
     p.ChangeDutyCycle(2.5)     # change duty cycle for getting the servo position to 0º 
     time.sleep(1)         # sleep for 1 second 
p.ChangeDutyCycle(0) 
p.stop() 
IO.cleanup() 

任何想法?谢谢。

回答

1

[编辑]您所使用的伺服是一个“连续的”伺服 - 所以你需要给它的零速或“STOP”设定的1500us脉冲宽度(根据网站http://www.domanrchobby.com/content/?150.html)。我没有在pi上使用PWM,但是如果百分比是50Hz脉率(20ms间隔),那么这应该是你的7.5%中心值。您需要确保伺服器在您的代码退出前获取该脉冲。

[原创]您在退出时将占空比设置为0,这可能意味着伺服器不会获得任何脉冲。一些舵机在没有达到脉冲之后会停止,但有些舵机(尤其是数字舵机,但不是全部)将继续尝试从他们收到的最后一个脉冲中获得设置。建议您将设置保留在中等范围7.5,您知道伺服可以达到并延迟一段时间,然后再进行清理。

+0

好的谢谢,会试试看! – Dawzer

+0

查看编辑,查看制造商数据表http://www.domanrchobby.com/content/?150.html – barny