코카 코딩

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

Embedded/Raspberry Pi3

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

[coca] Ccomment 2017.01.04 18:38

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


결과


6 Comments
  • 프로필사진 박종인 2017.05.04 11:37 신고 좋은 정보 감사합니다! 많은 도움이 되었어요.
    그런데 질문이 있습니다.
    소스 코드에서 PWM값 입력란에 (SERVO, 15) 여기서 15값이나 그 밑줄에 24,5 값이 무엇을 나타내는 것 인가요?
    방향인건 알겠는데 저희가 정확하게 컨트롤을 잘 못해서.
    저희가 이 소스코드를 이용해서 서보모터를 제어해서 RC카 앞바퀴의 방향조절을 할 예정이라서
    어떤 입력을 넣어야 저희가 원하는 방향으로 가는지 알고 싶습니다.
  • 프로필사진 [coca] Ccomment 2017.05.04 14:52 신고 데이터시트를 보시면 아시겠지만 15가 0도라 생각하시면 됩니다 25와 5는 90도와 -90도로 회전 각도구요 가장 중요한건 시스템 환경이 개인마다 다르기 때문에 값을 바꿔보면서 테스트 해보시는게 가장 빠를꺼에요
  • 프로필사진 박종인 2017.05.09 18:39 신고 coca
    감사합니다. 답변 바로 주셨었네요 이제 봤습니다. 한번 코카님이 알려주신대로 값 잘 조정해서 해보겠습니다
  • 프로필사진 사바나 2017.07.18 10:15 신고 안녕하세요 좋은 정보 감사드립니다.
    혹시 바로 연결 안하고 빵판을 사용한 이유가 따로 있는지요?
  • 프로필사진 [coca] Ccomment 2017.07.18 11:35 신고 아니요 ㅋㅋ 바로 연결해도 됩니다
  • 프로필사진 홍이 2017.08.17 15:56 신고 언제보실지모르지만 여쭙습니다... SG90 모델 의 서보 모터가 있는데 핀 3개 (ORANGE / RED / BROWN) 이 있는데 이 3개가 붙어있습니다.. 이는 어떻게 연결해야하나요 ..?
댓글쓰기 폼