Arduino - 伺服电机



伺服电机是一种小型设备,带有一个输出轴。通过发送编码信号给伺服电机,可以将此轴定位到特定的角度位置。只要编码信号存在于输入线上,伺服电机就会保持轴的角度位置。如果编码信号改变,轴的角度位置也会改变。实际上,伺服电机用于遥控飞机来定位控制面,例如升降舵和方向舵。它们也用于遥控汽车、木偶和机器人。

Servo Motor

伺服电机在机器人技术中非常有用。这些电机体积小巧,具有内置控制电路,并且功率强大。标准伺服电机,例如 Futaba S-148,具有 42 oz/英寸的扭矩,对于其尺寸而言非常强大。它还按机械负载的比例消耗功率。因此,轻载伺服电机不会消耗太多能量。

下图显示了伺服电机的内部结构。您可以看到控制电路、电机、一组齿轮和外壳。您还可以看到连接到外部世界的 3 根线。一根用于电源(+5 伏),一根用于接地,白色线是控制线。

Servo Motor control circuitry

伺服电机的运行原理

伺服电机有一些控制电路和一个电位器(一个可变电阻器,又称电位器)连接到输出轴。在上图中,电位器位于电路板的右侧。此电位器允许控制电路监控伺服电机的当前角度。

如果轴处于正确的角度,则电机将关闭。如果电路发现角度不正确,它将转动电机,直到达到所需的角度。伺服电机的输出轴能够旋转大约 180 度。通常在 210 度左右,但是这取决于制造商。普通伺服电机用于控制 0 到 180 度的角度运动。由于主输出齿轮上安装的机械止动器,它在机械上无法进一步旋转。

施加到电机的功率与其需要移动的距离成正比。因此,如果轴需要旋转很大的距离,电机将以全速运行。如果它只需要旋转少量,电机将以较慢的速度运行。这称为**比例控制**。

如何告知伺服电机旋转的角度?

控制线用于通信角度。角度由施加到控制线的脉冲持续时间决定。这称为**脉冲编码调制**。伺服电机期望每 20 毫秒(0.02 秒)看到一个脉冲。脉冲的长度将决定电机旋转的距离。例如,1.5 毫秒的脉冲将使电机旋转到 90 度位置(通常称为中性位置)。如果脉冲短于 1.5 毫秒,则电机将使轴更接近 0 度。如果脉冲长于 1.5 毫秒,则轴将更接近 180 度。

Angle Turn

所需组件

您将需要以下组件:

  • 1 个 Arduino UNO 开发板
  • 1 个伺服电机
  • 1 个 ULN2003 驱动 IC
  • 1 个 10 KΩ 电阻

步骤

按照电路图,按照下图所示进行连接。

Servo Motor Connections

草图

在您的计算机上打开 Arduino IDE 软件。使用 Arduino 语言进行编码将控制您的电路。通过单击“新建”打开一个新的草图文件。

Sketch

Arduino 代码

/* Controlling a servo position using a potentiometer (variable resistor) */

#include <Servo.h>
   Servo myservo; // create servo object to control a servo
   int potpin = 0; // analog pin used to connect the potentiometer
   int val; // variable to read the value from the analog pin

void setup() {
   myservo.attach(9); // attaches the servo on pin 9 to the servo object
}

void loop() {
   val = analogRead(potpin);
   // reads the value of the potentiometer (value between 0 and 1023)
   val = map(val, 0, 1023, 0, 180);
   // scale it to use it with the servo (value between 0 and 180)
   myservo.write(val); // sets the servo position according to the scaled value
   delay(15);
}

代码说明

伺服电机有三个端子 - 电源、接地和信号。电源线通常为红色,应连接到 Arduino 的 5V 引脚。接地线通常为黑色或棕色,应连接到 ULN2003 IC 的一个端子 (10-16)。为了保护您的 Arduino 开发板免受损坏,您需要一些驱动 IC 来完成此操作。这里我们使用 ULN2003 IC 来驱动伺服电机。信号线通常为黄色或橙色,应连接到 Arduino 的 9 号引脚。

连接电位器

分压器是串联电路中的电阻,它将输出电压按比例缩放为施加的输入电压的特定比例。以下是电路图:

Connecting Potentiometer

$$V_{out} = (V_{in} \times R_{2})/ (R_{1} + R_{2})$$

Vout 是输出电压,它取决于施加的输入电压 (Vin) 和串联电阻 (R1 和 R2)。这意味着流过 R1 的电流也会流过 R2,不会被分割。在上式中,随着 R2 值的变化,Vout 将根据输入电压 Vin 缩放。

通常,电位器是一个分压器,它可以根据可变电阻的值缩放电路的输出电压,该可变电阻使用旋钮进行缩放。它有三个引脚:GND、信号和 +5V,如下图所示:

Potentiometer with Description

结果

通过改变电位器的旋钮位置,伺服电机将改变其角度。

广告