找回密码
 立即注册
查看: 228|回复: 0

[电子模块] 辉盛SG90 9G舵机接线与驱动示例代码

[复制链接]
  • TA的每日心情
    难过
    2017-8-31 13:54
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    发表于 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库也是通过上面这种中断方式实现的

    回复

    使用道具 举报

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

    本版积分规则