树莓派(raspberryPi)通过wiringpi C库控制sg90舵机

在网上一直没找到比较容易看懂的wiringpi C语言的pwm控制代码,于是便查了资料与大家共享一下。

SG90一共三根线,红线接5V电源,棕线GND。黄线为数据控制线,该线接到GPIO上,这里我们是wiringpi模式的pin 1~8。 SG90 脉冲周期为20毫秒(millisecond) 不是20微秒(Microsecond),两者差1000倍呢!也就是说最多1秒钟内可以转动50次,但是考虑到每次转动还要耗时,所以实际达不到50次。PWM控制信号周期20ms,脉宽0.5ms-2.5ms对应的角度-90到+90度,范围180度(3度左右偏差),当脉宽1.5ms时舵机在中立点(0度),我们直接用python的GPIO提供的PWM控制。脉宽0.5ms-2.5ms 对应的占空比为2.5% - 12.5% . 理论上,10%的空间可以提供180度的线性分割。我个人喜欢把sg90舵机的角度定义为从0度到180度。

代码如下,小白编程,格式混乱勿怪。

//file name=sg90.c
#include 
#include 
#include 
#include 

#include 
#include 

#define RANGE	   	200 //1 means 100 us , 200 means 20 ms 1等于100微妙,200等于20毫秒 


int main (int argc, char** argv)
{
  if( argc != 3){     //该程序带有两个参数
    printf("usage: ./command  \n");  
    exit(0);  
    }
  
  int pin;     
  pin=atoi(argv[1]);  //第一个参数为所要控制的引脚wiringpi编号
  int i;
  int degree;
  if( !(pin>=0&&pin<=8)){     //第二个参数为需要控制舵机转动的角度
    printf("only setup pin 1 to 8\n");  
    exit(0);  
    }
  if( !(atoi(argv[2])>=0&&atoi(argv[2])<=180)){  
    printf("degree is between 0 and 180\n");  
    exit(0);  
    }
  degree=5+atof(argv[2])/180.0*20.0;
  wiringPiSetup ()  ;  //wiringpi初始化
  softPwmCreate (pin, 15, RANGE) ;  //创建一个使舵机转到90的pwm输出信号
  delay(1000);
  for (i = 0 ; i < 2 ; i++)
  {
    softPwmWrite(pin,5);   //将pwm输出复写为使舵机转到0
	 	   delay(1000);
		   softPwmWrite(pin,degree);//再次复写pwm输出
		   delay(1000);
  }
  softPwmWrite (pin, 15) ;
  exit(0);

}
  


 编译代码:gcc sg90.c -o sg90 -lwiringPi -lwiringPiDev

 运行编译出的程序: sudo ./sg90 1 180 第一个参数是wiringpi引脚编号 ,第二个参数是想要控制舵机偏转的角度。

此时舵机的控制线应连接前方所写wiringpi编号对应引脚。

你可能感兴趣的:(树莓派)