2018. 7. 20. 23:21ㆍHARDWARE/Arduino
Arduino Uno에서 PWM 을 사용할 수 있는 핀은 3,5,6,9,10,11 번 핀입니다. PWM의 default 주파수는 5,6번 핀의 경우 약 1kHz, 나머지 핀은 대략 500Hz 입니다. 하지만 모터의 속도를 제어하기 위해 1kHz 혹은 500Hz의 주파수를 사용한다면 소음이 굉장히 심합니다. 따라서 더 높은 주파수를 설정해야하는 경우가 많은데 그 방법에 대해 알아보겠습니다.
5,6번 핀은 TCCR0 레지스터, 9,10 번핀은 TCCR1 레지스터, 3,11 번핀은 TCCR2 레지스터로 설정하게 되어있습니다.
여기서 TCCRXA로는 FAST PWM 모드, Phase-correct PWM 모드를 선택할 수 있고 TCCRXB로는 prescale factor를 선택할 수 있습니다.
TCCR0A = _BV(COM0A1) | _BV(COM0B1) | _BV(WGM01) | _BV(WGM00);
Fast_PWM_frequency = (16 000 000)/(Prescale_factor*256);
TCCR0A = _BV(COM0A1) | _BV(COM0B1) | _BV(WGM00);
Phase_correct_PWM_frequency = (16 000 000)/(Prescale_factor*510);
Setting Prescale_factor
TCCR0B = _BV(CS00); 1
TCCR0B = _BV(CS01); 8
TCCR0B = _BV(CS00) | _BV(CS01); 64
TCCR0B = _BV(CS02); 256
TCCR0B = _BV(CS00) | _BV(CS02); 1024
예를 들어 다음과 같이 선언을 하면 5번 6번핀의 PWM 주파수는 980Hz가 됩니다.
TCCR0A = _BV(COM0A1) | _BV(COM0B1) | _BV(WGM01) | _BV(WGM00);
TCCR0B = _BV(CS00) | _BV(CS01);
또 다른 예로 다음과 같이 선언한다면 5,6번핀의 PWM 주파수는 31kHz가 됩니다.
TCCR0A = _BV(COM0A1) | _BV(COM0B1) | _BV(WGM00);
TCCR0B = _BV(CS00);
[출처] PWM 주파수 변경|작성자 엠에스리
'HARDWARE > Arduino' 카테고리의 다른 글
[아두이노] constrain 함수 - 변수 범위 제한 (0) | 2018.08.14 |
---|---|
아두이노 real-time structure (0) | 2018.07.20 |
arduino port manipulation (0) | 2018.07.20 |
HC-06 블루투스 설정 / 문자열 전송 (0) | 2018.07.20 |
l298n 모터 드라이버 가이드 참고 사이트 (0) | 2018.07.20 |