树莓派 --- 控制舵机
目录
1.舵机简介
避坑提示:360度舵机无法像180度舵机一样控制角度,它只能控制旋转方向和速度,所以别买360度的舵机o(╥﹏╥)o
我买的舵机参数如下:
工作电压:3.5V-6V
接线:红线(接高电平)、棕线(接地)、橙线(信号线)
工作原理:舵机的控制信号为周期是20ms(频率就是50HZ)的脉宽调制(PWM)信号,其中脉冲宽度从0.5ms-2.5ms,相对应舵盘的位置为0-180度,呈线性变化。也就是说,给它提供一定的脉宽,它的输出轴就会保持在一个相对应的角度上,直到给它提供一个另外宽度的脉冲信号,输出轴才会改变角度。
初始位置(0°) =>脉冲宽度 => 0.5ms => 占空比= 0.5ms / 20ms = 2.5%
中间位置(90°)=> 1.5 ms的脉冲宽度 => 占空比= 1.5ms / 20ms = 7.5%
最终位置(180°)=> 2.5 ms的脉冲宽度 => 占空比= 2.5ms / 20ms => 12.5%
所以占空比范围:2.5%~12.5%
角度angle和占空比dutyCycle的转换:dutyCycle = 2.5 + angle/180*10
2.功能测试
需求:输入一个度数,舵机转轴上的塑料指针就转到对应的位置
servoControl.py
import RPi.GPIO as GPIO
from time import sleepservo_pin = 17 # 舵机信号线接树莓派GPIO17GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(servo_pin, GPIO.OUT, initial=False)# 旋转角度转换到PWM占空比
def angleToDutyCycle(angle):return 2.5 + angle / 180.0 * 10p = GPIO.PWM(servo_pin, 50) # 初始频率为50HZ
p.start(angleToDutyCycle(90)) # 舵机初始化角度为90
sleep(0.5)
p.ChangeDutyCycle(0) # 清空当前占空比,使舵机停止抖动if __name__ == '__main__':print('当前为90度')while True:angle = int(input('旋转度数:'))if angle >= 0 and angle <= 180:p.ChangeDutyCycle(angleToDutyCycle(angle))sleep(0.1)p.ChangeDutyCycle(0) # 清空当前占空比,使舵机停止抖动else:print('旋转度数在0-180之间!')
舵机初始角度为90度,你可以把转轴上面的指针调到垂直方向,表示90度
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
