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

来源:互联网 发布:matlab怎么复制矩阵 编辑:程序博客网 时间:2024/05/16 00:25

在网上一直没找到比较容易看懂的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 <stdio.h>#include <errno.h>#include <string.h>#include <stdlib.h>#include <wiringPi.h>#include <softPwm.h>#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 <pin> <degree>\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编号对应引脚。

原创粉丝点击