加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

辉盛SG90 9G舵机接线与驱动

(2013-03-03 01:03:07)
分类: 编程
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库也是通过上面这种中断方式实现的

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有