通过香橙派输出PWM波控制舵机,首先需要了解Linux的定时器功能,通过配置定时器产生PWM波:(218条消息) Linux时间函数与定时器简介_LJX的博客-CSDN博客
1.舵机基本原理
怎么控制转角:
向黄色信号线“灌入”PWM信号。 PWM波的频率不能太高,50hz,即周期=1/频率=1/50=0.02s,20ms左右数据: 不同的PWM波形对应不同的旋转角度,以20ms为周期,50hz为频率的PWM波。所以定时器需要定时20ms,关心的单位是0.5ms, 20ms = 0.5ms * 40。
2.示例代码
功能:分别输入1,2,3,4,5,对应控制舵机转动0,45,90,135,180度。
#include <stdio.h>
#include <sys/time.h>
#include <stdlib.h>
#include <signal.h>
#include <wiringPi.h>
#define SG90Pin 5
static int i;
int jd;
void signal_handler(int signum)
{
if(i <= jd){
digitalWrite(SG90Pin, HIGH);
}else{
digitalWrite(SG90Pin, LOW);
}
if(i == 20){
i = 0;
}
i++;
}
int main()
{
struct itimerval itv;
jd = 0;
wiringPiSetup();
pinMode(SG90Pin, OUTPUT);
/*设置定时时间*/
itv.it_interval.tv_sec = 0;
itv.it_interval.tv_usec = 500;
/*设置开始生效,定时器启动时间*/
itv.it_value.tv_sec = 1;
itv.it_value.tv_usec = 0;
/*设置定时方式*/
if(-1 == setitimer(ITIMER_REAL, &itv, NULL)){
perror("error");
exit(-1);
}
/*信号处理*/
signal(SIGALRM,signal_handler);
while(1){
printf("input jd: 1-0 2-45 3-90 4-135 5-180\n");
scanf("%d",&jd);
}
return 0;
}
文章评论