Arduino - 伺服电机
伺服电机是一种带有输出轴的小型设备。通过向伺服电机发送编码信号,可以将此轴定位到特定的角度位置。只要输入线上存在编码信号,伺服电机就会保持轴的角度位置。如果编码信号发生变化,轴的角度位置也会发生变化。实际上,伺服电机用于无线电遥控飞机,以定位升降舵和方向舵等控制面。它们还用于无线电遥控汽车、木偶,当然还有机器人。
伺服电机在机器人技术中非常有用。电机体积小,具有内置控制电路,并且相对于其尺寸而言非常强大。标准伺服电机(例如 Futaba S-148)具有 42 盎司/英寸的扭矩,相对于其尺寸而言非常强大。它还会根据机械负载来消耗功率。因此,轻负载伺服器不会消耗太多能量。
下图显示了伺服电机的内部结构。您可以看到控制电路、电机、一组齿轮和外壳。您还可以看到连接到外界的 3 根电线。一根用于电源(+5 伏),一根用于接地,白线是控制线。
伺服电机的工作原理
伺服电机有一些控制电路和一个连接到输出轴的电位器(可变电阻器,又名电位器)。在上图中,可以在电路板的右侧看到电位器。该电位器允许控制电路监控伺服电机的当前角度。
如果轴的角度正确,则电机关闭。如果电路发现角度不正确,它将转动电机,直到达到所需角度。伺服的输出轴能够转动大约 180 度。通常,它在 210 度范围内,但是,这取决于制造商。普通伺服用于控制 0 到 180 度的角运动。由于主输出齿轮上装有机械挡块,因此它在机械上无法转动得更远。
施加到电机的功率与其需要移动的距离成正比。因此,如果轴需要转动较大的距离,电机将全速运转。如果只需要转动少量,电机将以较慢的速度运转。这称为比例控制。
如何传达伺服器应转动的角度?
控制线用于传达角度。角度由施加到控制线上的脉冲持续时间决定。这称为脉冲编码调制。伺服器预计每 20 毫秒(0.02 秒)会看到一个脉冲。脉冲的长度将决定电机转动的距离。例如,1.5 毫秒的脉冲将使电机转到 90 度位置(通常称为中性位置)。如果脉冲短于 1.5 毫秒,则电机将使轴更接近 0 度。如果脉冲时间超过 1.5 毫秒,轴的转动角度接近 180 度。
所需组件
您将需要以下组件 −
- 1 × Arduino UNO 板
- 1 × 伺服电机
- 1 × ULN2003 驱动 IC
- 1 × 10 KΩ 电阻器
步骤
按照电路图进行连接,如下图所示。
草图
在您的计算机上打开 Arduino IDE 软件。使用 Arduino 语言编码将控制您的电路。单击新建打开一个新的草图文件。
Arduino 代码
/* 使用电位器(可变电阻)控制伺服位置 */ #include <Servo.h> Servo myservo; // 创建伺服对象来控制伺服 int potpin = 0; // 用于连接电位计的模拟引脚 int val; // 用于从模拟引脚读取值的变量 void setup() { myservo.attach(9); // 将引脚 9 上的伺服连接到伺服对象 } void loop() { val = analogRead(potpin); // 读取电位计的值(值介于 0 和 1023 之间) val = map(val, 0, 1023, 0, 180); // 缩放以与伺服一起使用(值介于 0 和 180 之间) myservo.write(val); // 根据缩放值设置伺服位置 delay(15); }
需要注意的代码
伺服电机有三个端子 - 电源、接地和信号。电源线通常为红色,应连接到 Arduino 上的 5V 引脚。接地线通常为黑色或棕色,应连接到 ULN2003 IC (10 -16) 的一个端子。为了保护您的 Arduino 板免受损坏,您需要一些驱动器 IC 来实现这一点。这里我们使用 ULN2003 IC 来驱动伺服电机。信号引脚通常为黄色或橙色,应连接到 Arduino 引脚编号 9。
连接电位器
分压器/分压器是串联电路中的电阻器,可将输出电压缩放为所施加输入电压的特定比率。以下是电路图 −
$$V_{out} = (V_{in} imes R_{2})/ (R_{1} + R_{2})$$
Vout 是输出电位,取决于施加的输入电压 (Vin) 和串联电阻 (R1 和 R2)。这意味着流过 R1 的电流也将流过 R2,而无需分流。在上面的等式中,随着 R2 值的变化,Vout 会根据输入电压 Vin 相应地缩放。
通常,电位器是一种分压器,它可以根据可变电阻的值缩放电路的输出电压,该值使用旋钮缩放。它有三个引脚:GND、信号和 +5V,如下图所示 −
结果
通过改变电位器的 NOP 位置,伺服电机将改变其角度。