3:3:18

3.18 9克舵机

通过调整电位器来改变舵机旋转的角度。

(因为电脑 USB 供电电流不充足,建议下载完程序拔下 USB 线,使用电源适配器供电来测试该程序。)

  • 标配 9g 舵机引脚,黄色为信号线,红色为电源,棕色为地线。
  • 舵机是一种位置伺服的驱动器,具有闭环控制系统的机电结构,由小型直流电机、变速齿轮组、可调电位器、控制板等部件组成由于可以方便地控制舵机旋转的角度(舵角,但是舵角一般不超过 180度,因此,舵机在要求角度不断变化的控制系统中得到了广泛应用。
  • 舵机在工作中,控制器发出脉冲宽度调制(PWM)信号给舵机,获得直流偏置电压。舵机内部有一个基准电路,产生周期为 20ms,宽度为 1.5ms 的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出到电机驱动芯片,驱动芯片根据电压差的正负控制电机的正反转。
  • 舵机转动的角度是通过调节 PWM 信号的占空比来实现的,标准 PWM 信号的周期固定为20ms,理论上脉宽(脉冲的高电平部分)范围在1ms~2ms之间,但实际上脉宽可以在0.5ms~2.5ms 之间,脉宽和舵机的转角 0度~180度对应。如以脉宽为 0.5ms~2.5ms 范围控制舵机的角度转动,转动范围为 0度~180度.
  • 小型舵机的工作电压一般为4.8V 或 6V,转速也不是很快,所以假如更改角度控制脉宽太快时,舵机可能反应不过来。如果需要更快速的反应,就需要更高的转速了。要精确的控制舵机,其实没有那么容易,很多舵机的位置等级有1024个,那么,如果舵机的有效角度范围为180度话,其控制的角度精度是可以达到180/1024≈0.18度.如果假定脉宽为 0.5ms~2.5ms 范围,则要求的脉宽控制精度为(2.5-0.5)ms/1024≈2μs。
  • 舵机分别用 0.5ms~2.5ms 之间的脉宽来对应 0 到 180度左右的角度,且转动的角度与脉宽呈线性关系,则舵机每转动 1度对应的脉宽为(2.5-0.5)ms/180度,该值除不尽,因此,用一个除不尽的脉冲宽度控制舵机转动,显然转动角度的精度很难控制,为此,实验中以接近 2.5ms 且能够整除180的值最为脉宽的变化范围,则取脉宽的范围为0.5ms~2.48ms,此时,舵机每转动 1度则脉宽变化(2.48-0.5ms/180=11μs。因此, 定义脉宽与转动角度之间的关系为:pulsewidth=(angle*11)+500

根据这个公式可以写出来设置转动角的函数,然后写出第一个例程。

void pulse(int angle)
{ 
pulsewidth=int ((angle*11)+500); 
digitalWrite(PWM_pin,HIGH); 
delayMicroseconds(pulsewidth); 
digitalWrite(PWM_pin,LOW); 
delay(20-pulsewidth/1000); 
} 
  • 当然还有更简单的办法:调用伺服电机控制 lib,
#include <Servo.h> //引入 lib
Servo myservo;	//  创建一个伺服电机对象
#define potpin    A5	//  设定连接可变电阻的模拟引脚
int val;	//  创建变量,储存从模拟端口读取的值(0 到 1023)
void setup()
{
myservo.attach(9);	// 9 号引脚输出电机控制信号//仅能使用 9、10 号引脚
}
void loop() 
{ 
 = analogRead(potpin); 
//  读取来自可变电阻的模拟值(0 到 1023 之间) 
val = map(val, 0, 1023, 0, 179);	//  利用“map”函数缩放该值,得到伺服电机需要的角度(0到 180 之间)
myservo.write(val);	//  设定伺服电机的位置
delay(15);	//  等待电机旋转到目标角度
}



  • 3/3/18.txt
  • 最后更改: 2016/05/18 14:13
  • (外部编辑)