树莓派外设开发——舵机控制
1.综述
普通舵机的角度控制需要用到PWM实现,这里用到Linux定时器产生PWM波形,关于Linux定时器,这篇文章有一个简单的介绍
Linux定时器
舵机控制原理大致如下:
2.代码
#include #include #include #include #include #include #define sg90 7int 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;}