树老大 发表于 2017-5-14 22:02:01

辉盛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
}
}

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

页: [1]
查看完整版本: 辉盛SG90 9G舵机接线与驱动示例代码