舵机是什么?
伺服电机通常被称为舵机,它是一种带有输出轴的小装置。当我们向伺服器发送一个控制信号时,输出轴就可以转到特定的位置。只要控制信号持续不变,伺服机构就会保持轴的角度位置不改变。如果控制信号发生变化,输出轴的位置也会相应发生变化。日常生活中,舵机常被用于遥控飞机、遥控汽车、机器人等领域。
舵机在机器人领域非常有用。因为舵机有内置的控制电路,它们的尺寸虽然很小,但输出力够大。像Futaba S-148这样的标准舵机能提供 0.3牛/米的扭矩,相对于它的外形大小来说这已经足够强大了。同时,舵机消耗的能量与机械负荷成正比。因此,一个轻载的舵机系统不会消耗太多的能量。
舵机的内部结构
舵机的内部结构如上图所示。你可以看到控制电路,马达,一组齿轮和外壳。
当然还包括电源线(+5V,红色),地线(GND黑色)和PWM控制线(黄色或白色)。
舵机的工作原理
舵机内部的控制电路,电位计(可变电阻器)和电机均被连接到电路板上,如内部结构图的右边部分。控制电路通过电位计可监控舵机的当前角度。
如果轴的位置与控制信号相符,那么电机就会关闭。如果控制电路发现这个角度不正确,它就会控制马达转动,直到它达到指定的角度。舵机角度根据制造商的不同而有所不同。比如,一个180度的舵机,它可以在0度至180度之间运动。由于限位装置被安装在主输出装置上,超出这个范围机械结构就不能再转动了。
舵机的输出功率与它所需要转动的距离成正比。如果输出轴需要转动很长的距离,马达就会全速运转,如果它只需要短距离转动,马达就会以较慢的速度运行,这叫做速度比例控制。
如何让舵机转到指定角度?
控制线用于传输角度控制信号。这个角度是由控制信号脉冲的持续时间决定的,这叫做脉冲编码调制(PCM)。舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围,总间隔为2ms。脉冲的宽度将决定马达转动的距离。例如:1.5毫秒的脉冲,电机将转向90度的位置(通常称为中立位置,对于180°舵机来说,就是90°位置)。如果脉冲宽度小于1.5毫秒,那么电机轴向朝向0度方向。如果脉冲宽度大于1.5毫秒,轴向就朝向180度方向。以180度舵机为例,对应的控制关系是这样的:
0.5ms————-0度;
1.0ms————45度;
1.5ms————90度;
2.0ms———–135度;
2.5ms———–180度;
用Arduino UNO 控制舵机
测试的硬件条件:
• 1 × Arduino UNO.
• 1 × 舵机.
• 1 × ULN2003 驱动IC(用于防止直接通过Arduino驱动舵机造成问题.)
• 1 × 10 KΩ 电阻.
按照下图所示进行连接,如图所示:
打开Arduino IDE,新建一个文件。
/* 使用可变电位计控制舵机转动 */ #include Servo myservo; // 创建一个 servo object int potpin = 0; // analog pin 用来连接电位计 int val; // val存储analog pin的值 void setup() { myservo.attach(9); // 连接舵机控制信号(黄或白)至 pin 9 } void loop() { val = analogRead(potpin); // 读出可变电位计的值 (范围 0 - 1023) val = map(val, 0, 1023, 0, 180); // 按舵机角度进行设置 (范围 0 - 180) myservo.write(val); //根据val值设置舵机位置 delay(15); }
连线注意:舵机有三个引脚(电源、GND和信号)。电源线通常是红色的,应该连接到Arduino控制板上的5V针脚;GND地线通常是黑色或棕色的,应该连接到ULN2003 IC上10-16针的任意一个;信号线通常是黄色或白色的,应该连接到Arduino 9号引脚。
可变电位计
可变电位计是一个分压器,它可以根据可变电阻的值来调整电路的输出电压,电阻是通过旋钮来控制的。它有三个引脚:GND,信号, +5 V,如下图所示
以上工作就绪并上传代码后,正常情况下当我们旋转可变电位计,舵机将对应改变其角度位置。