2015년 4월 27일 월요일

[00101] 아두이노 두에 (arduino due)의 PWM

  아두이노 두에 (arduino due) 의 PWM 핀은 다음 그림의 핀맵에 나온 바와 같이 같이 D2부터 D13까지 12개를 사용할 수 있다. 따라서 우노보다 더 많은 핀을 PWM출력으로 사용할 수 있다.


단순히 핀 수만 많은 것이 아니라 우노와 달리 최대 해상도를 12비트까지 지정해 줄 수 있다. 따라서 우노는 [0, 255]범위의 출력(8비트)을 사용했었는데 두에의 숫자 범위는 최대가 [0, 4095] 이다.

  PWM의 해상도를 조절하려면 다음과 같은 함수를 사용해야 한다.

---------------------------------------------
analogWriteResolution(nBits);
---------------------------------------------

입력인수는 몇 비트를 사용할 것인가를 지정해주면 되며 기본값은 8비트이다. 만약 12비트로 해상도를 높이고 싶다면 다음과 같이 하면 된다.

---------------------------------------------
analogWriteResolution(12);
---------------------------------------------

그런 다음 analogWrite()함수를 사용하면 된다. 예를 들어서

---------------------------------------------
analogWrite(6, 4095); // 6번핀에 4095값을 내보낸다.
---------------------------------------------

  만약 어떤 아날로그 센서의 입력이 [0, 1023] 범위의 값인데 이것을 [0. 4095]범위의 값으로 변환하고 싶다면 map()이라는 함수를 사용하면 된다.

---------------------------------------------
map(sVal, sMin, sMax, cMin, cMax);
---------------------------------------------

이 함수는 sVal 값을 원래의 범위인 [sMin, sMax] 에서 변환하고자 하는 범위 [cMin, cMax]에 해당하는 값으로 바꾸는 함수이다. 만약 (0, 1023)범위의 센서값을 [0,4096]값으로 바꾸고 싶다면 다음과 같이 하면 된다.

---------------------------------------------
map(sVal, 0, 1023, 0, 4095);
---------------------------------------------

이 함수들을 사용해서 PWM을 12비트 해상도로 변경하고 [0,1023]범위의 센서값을 PWM 으로 매핑하는 예는 다음과 같다.

---------------------------------------------
analogWriteResolution(12);
analogWrite(12, map(sensorVal, 0, 1023, 0, 4095));
---------------------------------------------

여기서 sensorVal 변수에는 10비트 아날로그 센서값이 저장되었다고 가정한다.
[#00101]

댓글 없음:

댓글 쓰기