본문 바로가기

Embedded/Raspberry Pi3

[Raspberry Pi3] 라즈베리파이3 PWM을 이용한 서보모터 제어

PWM이란?

- Pulse Width Modulation(펄스 폭 변조)

- 디지털 출력으로 아날로그 회로를 제어하는 기법

  (GPIO핀은 디지털이기때문에 PWM을 이용하여 아날로그 신호를 제어한다)



duty : 한 주기(T)동안 HIGH가 차지하는 비율

ex) duty cycle = 50%이면 2.5V의 효과를 낼 수 있다.


PWM으로 Servo motor(SG90) 제어


핀 연결

Servo motor        Raspberry Pi

Orange               12 pin

VCC                     2 pin

GND                    6 pin



라즈베리파이3 GPIO Pin 구조는 http://cccding.tistory.com/89 확인


servo.c

#include<stdio.h>

#include<wiringPi.h>

#include<softPwm.h>


#define SERVO 1


int main()

{

char str;


if(wiringPiSetup()==-1)

return 1;


softPwmCreate(SERVO,0,200);

while(1)

{

fputs("select c ,r , l , q : " , stdout);

scanf("%c" , &str);

getchar();

if(str=='c') softPwmWrite(SERVO,15); //0 degree

else if(str=='r') softPwmWrite(SERVO,24); //90 degree

else if(str=='l') softPwmWrite(SERVO,5); //-90 degree

else if(str=='q') return 0;

}

return 0;

}


컴파일 : gcc servo.c -o servo -lwiringPi

실행 : sudo ./servo


결과