树莓派论坛

 找回密码
 立即注册

辉盛SG90 9G舵机接线与驱动示例代码

树老大 发表于 2017-5-14 22:02:01 | 显示全部楼层 |阅读模式
以下是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
  }
}

注意:这里面有改变电调刷新频率(PWM频率)的方法:
自带的servo库默认的频率是50Hz,但是可以在它的头文件Servo.h中修改。修改下面这行可以把PWM频率升到400Hz:
#define REFRESH_INTERVAL 2500
刷新间隔改为2.5ms,但是这时就只能容纳一个舵机的信号了。servo库也是通过上面这种中断方式实现的

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版 | Archiver | 树莓派论坛 ( 粤ICP备15075382号-1 )