PWM控制舵机简介
通常情况下,伺服电机(舵机)是由一个标准的直流系统和一个内部反馈控制装置(一个减速齿轮和电位计)来组成的。伺服电机(舵机)的主要作用是将齿轮轴旋转到一个预定义的方向上。伺服电机(舵机)有3个输入引脚,GND、VCC和Signal。脉冲宽度调制技术(PWM)被应用于舵机的控制,轴的方向由脉冲的持续时间决定(参见树莓派3 B+Servoblaster 舵机控制,了解更多关于PWM的信息)。需要记住的是,舵机转动的方向不是由占空比决定的,而是由脉冲长度 t 决定的。有的舵机使用的PWM频率为 fPWM=50HZ,其对应于的PWM周期 T=20 ms。脉冲长度 t 和转动方向之间的关系是线性的,但也取决于电机和齿轮的配合。
对于常见的SG90舵机,其角度与脉冲对应长度关系如上图。常见的三根信号线如下:
树莓派引脚
树莓派控制舵机
0度:0.5 / 20 = 2.5% 180度:2.5 / 20 = 12.5% 任意角度:2.5 + i / 180 * 20
特殊电平与电压对应关系
1
2
3
4
5
6
# 0 v
p.ChangeDutyCycle(0)
# 0.67 v
p.ChangeDutyCycle(20)
# 3.3 v
p.ChangeDutyCycle(100)
控制舵机180度来回
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import RPi.GPIO as GPIO
import time
import atexit
atexit.register(GPIO.cleanup)
servopin = 21
GPIO.setmode(GPIO.BCM)
GPIO.setup(servopin, GPIO.OUT, initial=False)
p = GPIO.PWM(servopin, 50)
p.start(0)
time.sleep(2)
while True:
for i in range(0, 181, 10):
p.ChangeDutyCycle(2.5 + 20 * i / 180)
time.sleep(0.02)
for i in range(181, 0, -10):
p.ChangeDutyCycle(2.5 + 20 * i / 180)
time.sleep(0.02)