Develop Note

[RaspberryPi3] WiringPi를 이용한 서보 모터 PWM 제어 본문

개발 (Ko)/Raspberry Pi

[RaspberryPi3] WiringPi를 이용한 서보 모터 PWM 제어

Chalsu 2017. 10. 28. 15:00

라즈베리파이3 에서 WiringPi를 사용하여

GPIO pin을 PWM으로 동작시켜 서보 모터를 제어해 본다.


WiringPi 설치 방법은 다음을 참고한다.


라즈베리파이3에 WiringPi 설치하기



1. 서보 모터 연결


사용할 서보 모터는 SG90으로 다음과 같은 3개 pin 구성을 가진다.



위 정보를 이용해 라즈베리파이3 에 연결한다.

* 서보 모터의 케이블을 각 핀에 개별 연결하기 위해 점퍼 케이블을 사용했다.



 

연결 정보는 다음과 같다.



2. 예제 소스 작성


서모 모터를 제어하기 위한 예제 소스를 작성한다. (C언어)


softPwmCreate(), softPwmWrite()는 wiringPi 라이브러리에 속한 함수이며,

이를 사용하기 위해 관련 헤더파일을 include 해 준다.


$ vi test_servo.c

// 예제 소스 작성
#include <stdio.h>
#include <wiringPi.h>
#include <softPwm.h> 

#define SERVO 1

int main()
{
    char sel;

    if(wiringPiSetup()==-1)
        return 1;

    softPwmCreate(SERVO, 0, 200);

    while(1)
    {   
        fputs("select c, r, l, q: " , stdout);
        scanf("%c" , &sel);
        getchar();
        if(sel == 'c') softPwmWrite(SERVO,15);   // 0 degree
        else if(sel == 'r') softPwmWrite(SERVO,24); // 90 degree
        else if(sel == 'l') softPwmWrite(SERVO,5); // -90 degree
        else if(sel == 'q') return 0;
    }   

    return 0;
}


3. 예제 소스 컴파일 및 실행


작성한 예제 소스를 컴파일한다.

컴파일 시 wiringPi 라이브러리를 지정해 주어야 한다.

// 소스 컴파일

$ gcc test_servo.c -o test_servo –lwiringPi


// 실행 $ ./test_servo select c, r, l, q: r


r 을 입력하면 PWM 신호가 입력되고, 이에 따라 서보 모터는 +90도로 회전하게 된다.

마찬가지로 각각 c, l을 입력하면 0도, -90도로 움직이는 것을 확인할 수 있다.



4. PWM 신호 확인


예제 소스를 통해 PWM 제어를 했을 때 실제로 신호가 잘 나오는지 오실로 스코프로 확인해본다.


서보 모터 연결을 제거한 뒤

라즈베리파이의 6번 pin(GND)에 그라운드를 연결하고 12번 pin(GPIO18)을 찍어 본다.


        


위 사진과 같이 PWM 파형이 나오는 것을 확인할 수 있다.



Comments