Home PWM 舵机控制
Post
Cancel

PWM 舵机控制

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)
This post is licensed under CC BY 4.0 by the author.