SG90
红 - 正
棕 - 负
橙 - 信号
舵机的相关原理与控制原理
利用单片机PWM信号进行舵机控制
型号:SG90
厂家给出的技术数据:
尺寸:21.5mmX11.8mmX22.7mm
重量:9克
无负载速度:0.12秒/60度(4.8V)
堵转扭矩:1.2-1.4公斤/厘米(4.8V)
使用温度:-30~~+60摄氏度
死区设定:7微秒
工作电压:4.8V-6V
包含:舵机,摇臂,螺丝等所有原厂附件
http://img04.taobaocdn.com/imgextra/i4/44390641/T2CaKSXepXXXXXXXXX_!!44390641.jpg9G舵机接线与驱动" TITLE="辉盛SG90 9G舵机接线与驱动" />
以下是Arduino驱动程序,在Leonardo板上调试通过。注意上传程序给Arduino板子时不要连接舵机,以免过大的电流烧毁PC的USB接口。
驱动方法之一:直接编程产生需要的脉冲。
int servopin =
7;
//定义舵机接口数字接口7 也就是舵机的橙色信号线。
void servopulse(int angle)//定义一个脉冲函数
{
int
pulsewidth=(angle*11)+500;
//将角度转化为500-2480的脉宽值
digitalWrite(servopin,HIGH);
//将舵机接口电平至高
delayMicroseconds(pulsewidth); //延时脉宽值的微秒数
digitalWrite(servopin,LOW);
//将舵机接口电平至低
delayMicroseconds(20000-pulsewidth);
}
void setup()
{
pinMode(servopin,OUTPUT);//设定舵机接口为输出接口
}
void loop()
{
//把值的范围映射到0到165左右
for( int angle =
0;angle<165;angle+=10){
for(int
i=0;i<50;i++) //发送50个脉冲
{
servopulse(angle); //引用脉冲函数
}
delay(1000);
}
}
驱动方法之二:调用Servo库函数,用中断方式驱动舵机。
// Sweep
// by BARRAGAN <http://barraganstudio.com>
// This example code is in the public domain.
#include <Servo.h>
Servo myservo; // create servo object to control
a servo
// a maximum of eight servo objects can be created
int pos = 0;
// variable to store the servo position
void setup()
{
myservo.attach(9); // attaches
the servo on pin 9 to the servo object
}
void loop()
{
for(pos = 0; pos < 180; pos +=
1) // goes from 0 degrees to 180 degrees
{
// in steps of 1 degree
myservo.write(pos);
// tell servo to go to position in variable 'pos'
delay(15);
// waits 15ms for the servo to reach the position
}
for(pos = 180; pos>=1;
pos-=1)
// goes from 180 degrees to 0 degrees
{
myservo.write(pos);
// tell servo to go to position in variable 'pos'
delay(15);
// waits 15ms for the servo to reach the position
}
}
中断方式产生高频舵机信号
http://www.geek-workshop.com/forum.php?mod=viewthread&tid=2458
注意:这里面有改变电调刷新频率(PWM频率)的方法:
自带的servo库默认的频率是50Hz,但是可以在它的头文件Servo.h中修改。修改下面这行可以把PWM频率升到400Hz:
#define REFRESH_INTERVAL 2500
刷新间隔改为2.5ms,但是这时就只能容纳一个舵机的信号了。servo库也是通过上面这种中断方式实现的
加载中,请稍候......