아두이노의 디지털핀은 오직 HIGH(5V) 아니면 LOW(0V) 두 가지 신호 외에는 출력할 수 없으며 전압의 관점에서 보면 5V와 0V만 가질 수 있다. 하지만 PWM (pulse width modulation, 펄스 폭 변조) 기능을 이용하면 마치 아날로그 전압처럼 0V와 5V 사이의 전압으로 (예를 들면 2V, 3.5V 등) 출력을 낼 수 있다. 따라서 LED의 밝기를 제어한다든가 모터의 회전 속도를 제어하는데 사용할 수 있다.

 PWM은 진정한 의미의 아날로그 출력은 아니고 흉내를 내는 것인데 그 원리는 다음 그림과 같다. (출처 : arduino.cc)


[그림 1] PWM의 원리


이 그림에서 보면 주기적인 구형파를 발생하고 이 구형파의 폭을 조절하여 그 듀티비 (HIGH 구간 대비 LOW 구간의 비율)로 아날로그 전압값을 가지도록 한다. 이 구형파의 주기를 매우 빠르게 (아두이노 우노의 경우 490Hz 혹은 980Hz이다.) 하면 상대적으로 반응 속도가 느린 기계 장치(모터 등)는 이것을 아날로그 전압으로 인식하게 된다.


 예를 들어서 그림 1(b)의 경우 주기의 1/4동안만 on 이 되므로 평균 출력 전압도 5V * ¼ 인 1.25V 정도가 된다. 만약 LED가 연결되었다면 LED는 정확하게 on구간에서만 켜지고 off구간에서는 꺼진다. 하지만 눈으로 보기에는 이것이 인식하지 못 할만큼 고속으로 동작하므로 밝기가 다르게 보이는 것이다.


 아두이노의 모든 핀이 PWM 출력을 낼 수 있는 것은 아니고 아두이노 우노의 경우 3, 5, 6, 9, 10, 11번 핀이 PWM출력을 낼 수 있으며 이것은 정품 보드의 경우 다음 그림과 같이 ~로 표시되어 있다.


[그림 2] 아두이노 우노의 PWM 핀들

PWM의 동작 주파수는 다음과 같다.

  • 3, 9, 10, 11번 핀 - 490Hz

  • 5, 6번 핀 – 980Hz (5,6번 핀이 좀 더 고속으로 동작)


PWM기능을 사용하기 위해서는 다음과 같은 analogWrite()함수를 이용한다.


analogWrite(pin, value)

  • pin : 3, 5, 6, 9, 10, 11 중 하나 (아두이노 우노의 경우)

  • value : 0에서 255 사이의 정수.


그리고 PWM 기능을 사용하기 위해서는 해당 핀을 출력으로 설정하여야 한다.



Posted by 살레시오
,