본문 바로가기

Project/Gimbal

[액션캠 짐벌 제작] 04. PWM, analogWrite()

BLDC 모터로 각도 제어를 하기 위해서는 출력하는 전압을 제어할 수 있어야 한다.

 

하지만 아두이노에서는 고정적으로 3.3V 또는 5V의 출력밖에 표현을 할 수 없다.

 

아두이노에서는 이런 단점을 보완하기 위해 PWM(Pulse Width Modulation : 펄스폭 변조)라는 기술을 사용한다.

 

아두이노에서 기본적으로 High(ON) 와 Low(OFF) 두 가지의 신호밖에 출력을 못하니 두 신호를 매우 빠르게 번갈아 출력하면서 On/Off의 비율을 조정하면 아날로그 출력의 값과 근사한 값을 만들어 낼 수 있는 것이다. 

 

 

[사진 : PWM]

 

아두이노에는 디지털 핀 중에 ~로 표시된 PWM 핀들을 사용해서 PWM을 출력 할 수 있다.

 

아두이노 IDE 에서는 analogWrite(); 명령어를 사용해 0~5V사이의 값을 0~255까지의 256단계로 나눠서 출력을 할 수 있다.

 

다음은 아두이노를 사용해 PWM을 출력하는 코드이다.

 

void setup() {  // 시작할 때 한번 실행되는 코드
  
  pinMode(3,OUTPUT);  //3번 핀을 OUTPUT으로 설정
  
}


void loop() { // setup() 후 반복되는 코드
  
    for (int i = 0; i < 256; i++){    // 0 ~ 255 까지 i증가
      analogWrite(3, i);  // i값만큼 PWM출력
      delay(10);  // 10ms 정지 (1000ms = 1초)
    }
    
    for (int i = 255; i >= 0; i--){   // 255 ~ 0 까지 i감소
      analogWrite(3, i);
      delay(10);
    }
    
}

[코드 : analogWrite]

 

아두이노 중 많이 사용하는 보드인 우노(UNO) 보드 기준으로 PWM 지원 핀이 3, 5, 6, 9, 10, 11번 이므로 3번 핀을 출력 핀으로 설정해서 0~5V까지 증감을 반복하는 코드이다.