用户工具

站点工具


侧边栏

索引

抱歉,您没有权限增加页面
电机和电机驱动板:舵机

1、 产品图片

2、产品购买地址

3、产品概述

  • 舵机使你可以准确的控制物理运动,因为它们通常移动到一个位置,而不是连续旋转。它们很适合物体在0-180°的范围内旋转。舵机很容易连接和控制,因为电机驱动器已经内置于舵机。
  • 舵机包含一个小型电动机通过齿轮连接到输出轴上。输出轴驱动舵机臂,同时还连接着一个电位器,以提供位置反馈到内部电路。

舵机会响应脉冲持续时间的变化,1ms或者更短的脉冲会使舵机旋转到一个极端;2ms左右的脉冲持续时间将舵机转到另一个极端。介于这些值范围内的脉冲将使舵机旋转到与脉冲宽度成比例的位置。没有标准的脉冲和位置之间的确切关系,你可能需要调整你的程序的命令来调整舵机的范围。

  • 虽然脉冲的持续时间是受调制(控制)的,舵机于鏊求的脉冲和从analogWrite输出的脉冲宽度调制(PWM)不同。如果你把舵机连接到analogWrite的输出端,你可能会损坏它,请使用Servo库。

4、产品参数

  1. 重量:9g(克)/14g
  2. 尺寸:2312.229mm
  3. 无负载操作速度:0.12秒/60度(4.8V);0.10秒/60度(6.0V)
  4. 扭矩:1.6KG·cm(4.8V)
  5. 使用温度:零下30℃-60℃
  6. 死区设定:5微秒
  7. 工作电压:3.5V-6.0V

5、工作原理

控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。当然我们可以不用去了解它的具体工作原理,知道它的控制原理就够了。就像我们使用晶体管一样,知道可以拿它来做开关管或放大管就行了,至于管内的电子具体怎么流动是可以完全不用去考虑的

6、控制原理

舵机的控制一般需要一个20MS左右的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度伺服为例,那么对应的控制关系是这样的:

  • 0.5ms————0度
  • 1.0ms————45度
  • 1.5ms————90度
  • 2.0ms————-135度
  • 2.5ms————-180度

7、接线方式

  • 内含物品:三种功能舵角、固定螺丝、9g舵机+连接线
  • 连接线:红色:正极;橙色:信号线;棕色:地线

舵机红线5V接UNO的5V、舵机棕线GND接UNO的GND、舵机橙线PWM接UNO的PIN9

8、示例程序

//中贝斯特UltiRobot舵机示例教程
//程序效果:舵机正转180度后反转180度。
//淘宝店地址:zhongbest.taobao.com
//专业Arduino资料网站:www.arduino365.com

#include <Servo.h>
Servo myservo;  // 创建舵机对象来控制舵机
int pos = 0;    // 用来存储舵机位置的变量
void setup()
{
myservo.attach(9);  // 把连接在引脚9上的舵机赋予舵机对象
}
void loop()
{
for(pos = 0; pos <= 180; pos += 1) // 从0度到180度
{                                  // 步长为1度
myservo.write(pos);              // 告诉舵机到达位置变量‘pos’
delay(15);                       // 舵机命令之间等待15ms
}
for(pos = 180; pos>=0; pos-=1)     // 从180度到0度
{
myservo.write(pos);              // 在相反的方向上移动舵机
delay(15);                       // 舵机命令之间等待15ms
}
}

9、函数解释

attach()

描述

  • 将Servo变量附加到引脚,注意:在Arduino 0016及之前的版本上,Servo库仅支持将舵机连接至第9和第10脚上。

语法

  • servo.attach(pin)
  • servo.attach(pin, min, max)

参数说明

  • servo,一个类型为servo的变量
  • pin,连接至舵机的引脚编号
  • min(可选),舵机为最小角度(0度)时的脉冲宽度,单位为微秒,默认为544
  • max(可选),舵机为最大角度(180度时)的脉冲宽度,单位为微秒,默认为2400
write()

描述

  • 向舵机写入一个数值,来直接控制舵机的轴。在一个标准的舵机中,这将设定齿轮的角度,将齿轮转到对应的位置。在一个连续旋转的舵机中,这将设置一个舵机的角度(0作为全速向一边,180为全速向另一边,在90附近的值为停止)。

语法

  • servo.write(angle)

参数说明

  • servo,一个类型为servo的变量
  • angle,写向舵机的角度,从0到180之间
writeMicroseconds()

描述

  • 向舵机写入一个微秒的值来控制舵机的轴。在一个标准舵机中,这将设置舵机齿轮的角度。在标准舵机中,参数设置为1000为完全逆时针方向,2000完全顺时针方向,1500为在中间。
  • 注意:一些生产厂商没有按照这个标准,以至于,舵机通常响应在700到2300之间的值。自由地增加终点值直到舵机不再增加它的范围。注意,让舵机旋转超过它的终点(通常会发出异常声响)是一个高电流状态,应该被避免。
  • 连续旋转舵机对该函数的响应类似于write()函数

语法

  • servo.writeMicroseconds(uS)

参数说明

  • servo,一个类型为servo的变量
  • uS,一个代表微秒值的整数参数
writeMicroseconds()

描述

  • 向舵机写入一个微秒的值来控制舵机的轴。在一个标准舵机中,这将设置舵机齿轮的角度。在标准舵机中,参数设置为1000为完全逆时针方向,2000完全顺时针方向,1500为在中间。
  • 注意:一些生产厂商没有按照这个标准,以至于,舵机通常响应在700到2300之间的值。自由地增加终点值直到舵机不再增加它的范围。注意,让舵机旋转超过它的终点(通常会发出异常声响)是一个高电流状态,应该被避免。
  • 连续旋转舵机对该函数的响应类似于write()函数

语法

  • servo.writeMicroseconds(uS)

参数说明

  • servo,一个类型为servo的变量
  • uS,一个代表微秒值的整数参数
read()

描述

  • 读取舵机当前的角度(最后一次用write()函数写入的值)

语法

  • servo.read()

参数说明

  • servo,一个类型为servo的变量
  • 返回值,舵机的角度,从0至180度
attached

描述

  • 检查一个servo变量是否被附加到一个引脚

语法

  • servo.attached()

参数说明

  • servo,一个类型为servo的变量
  • 返回值:返回true,如果被附加到一个引脚,反之返回false
detach

描述

  • 将servo变量与引脚脱离,如果所有servo变量均被脱离,第9和第10教将可以用analogWrite()函数进行PWM输出。

语法

  • servo.detach()

参数说明

  • servo,一个类型为servo的变量

10、注意事项

  1. Servo库在大多数的Arduino板上最多可支持12个舵机,在Arduino Mega板子可支持48个。如Uno这样的标准版上,使用该库将禁用在引脚9和10上的analogWrite()(PWM)功能,无论是否这些引脚上链接有舵机。
  2. 连接多个舵机时,你可能需要5V或6V的外部电源,如果你想用电池电源,4节AA电池就可以胜任。电池盒本店(zhongbest.taobao.com)有售。请记住,你必须把外部电源的接地连接到Arduino的地线。
  3. 库文件为官方编译器(IDE)自带库文件,无需手动下载和添加。

11、使用官方库舵机无法到达180度的问题

官方库文件做了限制,所以不匹配实际的舵机脉动。简单办法就是把示例中的:

myservo.attach(9); 
改成
myservo.attach(9,500,2500);
即可。原本库文件里面是522-2000。调整成你所购买的舵机的最小和最大的脉冲区间。

电机和电机驱动板/舵机.txt · 最后更改: 2019/08/23 14:40 由 ultirobot