1.综述
普通舵机的角度控制需要用到PWM实现,这里用到Linux定时器产生PWM波形,关于Linux定时器,这篇文章有一个简单的介绍
Linux定时器
舵机控制原理大致如下:
2.代码
#include <stdio.h>
#include <time.h>
#include <sys/time.h>
#include <stdlib.h>
#include <signal.h>
#include <wiringPi.h>
#define sg90 7
int angle = 0;
void signal_handler()
{
static int i;
if(i<=angle){
digitalWrite(sg90,HIGH);
}else{
digitalWrite(sg90,LOW);
}
//当计满40个0.5ms ,即20ms为一个周期
if(i == 40){
i = 0;
}
i++;
}
void sg90_init()
{
wiringPiSetup();
pinMode(sg90,OUTPUT);
}
int main(int argc, char const *argv[])
{
sg90_init();
angle = 1;
struct itimerval itv;
//设值定时时间
itv.it_interval.tv_sec = 0;
itv.it_interval.tv_usec = 500; //0.5ms
//设置定时开始前,启动定时器的时间
itv.it_value.tv_sec = 1;
itv.it_value.tv_usec = 0;
//设定定时方式
setitimer(ITIMER_REAL,&itv,NULL);
//信号处理
signal(SIGALRM,signal_handler);
while(1){
printf("输入角度:1-0°,2-45°,3-90°,4-135°,5-180°\n");
scanf("%d",&angle);
}
return 0;
}