香橙派Orangepi Zero2控制舵机转动

通过香橙派输出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;
}

猜你喜欢

转载自blog.csdn.net/aaaaaaaa123345/article/details/128904224