본문 바로가기

아두이노우노 R4

Arduino Mega의 PWM 주파수를 변경하는 방법

반응형

 

 

Arduino Mega의 PWM 주파수를 변경하는 방법

 

Arduino Mega는 멀티태스킹 자동화 프로젝트에 있어 괴물입니다. 상당히 많은 수의 디지털 및 아날로그 핀으로 인해 Mega는 다중 출력 제어를 포함한 많은 복잡한 프로젝트에서 최우선 순위입니다.

 

그러나 일부 고주파수 제어 회로에서는 PWM 핀의 기본 주파수가 제한될 수 있습니다. 예, 이 핀의 주파수에는 몇 가지 기본값이 있습니다. 하지만 좋은 소식은 간단한 한 줄 코드를 사용하여 이 주파수를 쉽게 변경할 수 있다는 것입니다!

 

Arduino Mega의 각 PWM 핀의 기본 주파수는 다음과 같습니다.

 

Arduino Mega에는 총 15개의 PWM 핀이 있습니다. 이 중 12개는 핀 2부터 핀 13까지이고 나머지 3개는 D44, D45 및 D46입니다. 기본 주파수가 980Hz인 핀 4와 13을 제외하고 모든 핀의 기본 주파수는 490Hz입니다.

 

1) D4 및 D13의 PWM 주파수:

490.20Hz(기본값)

 

2) D2, D3, D5 ~ D12, D44, D45 및 D46의 PWM 주파수:

976.56Hz(기본값)

 

이러한 주파수는 LED 조광과 같은 저주파 작업에 가장 적합하지만 고주파 회로에는 적합하지 않습니다. 예를 들어 S.M.P.S에는 1kHz가 충분하지 않습니다.

 

많은 프로젝트, 특히 벅 컨버터와 같은 고주파 펄스와 관련된 프로젝트에서는 주파수 조정이 필요합니다. Arduino Mega의 PWM 주파수를 수정하는 간단한 한 줄 명령은 다음과 같습니다.

 

D4 및 D13 핀의 PWM 주파수를 변경하기 위한 라인 코드 1개:

 

TCCR0B = TCCR0B & B11111000 | B00000001; // 62500Hz의 PWM 주파수용

TCCR0B = TCCR0B & B11111000 | B00000010; // 7812.50 Hz

TCCR0B = TCCR0B & B11111000 | B00000011; //  976.56 Hz 

TCCR0B = TCCR0B & B11111000 | B00000100; // 244.14 Hz

TCCR0B = TCCR0B & B11111000 | B00000101; // 61.04 Hz

TCCR5B = TCCR5B & B11111000 | B00000101; // 30.64 Hz

 

TCCR0B = TCCR0B & B11111000 | B00000001; // 62500Hz의 PWM 주파수용 TCCR0B = TCCR0B & B11111000 | B00000010; // 7812.50Hz TCCR0B = TCCR0B & B11111000 | B00000011; // 976.56Hz TCCR0B = TCCR0B & B11111000 | B00000100; // 244.14Hz TCCR0B = TCCR0B & B11111000 | B00000101; // 61.04Hz TCCR5B = TCCR5B & B11111000 | B00000101; // 30.64Hz

D11 및 D12 핀에 대한 명령:

 

TCCR1B = TCCR1B & B11111000 | B00000001;  // for PWM frequency of 31372.55 Hz

TCCR1B = TCCR1B & B11111000 | B00000010;  // 3921.16 Hz

TCCR1B = TCCR1B & B11111000 | B00000011;  // 490.20 Hz

TCCR1B = TCCR1B & B11111000 | B00000100;  // 122.55 Hz

TCCR1B = TCCR1B & B11111000 | B00000101;   // 30.64 Hz

 

 

TCCR1B = TCCR1B & B11111000 | B00000001; // 31372.55Hz의 PWM 주파수용 TCCR1B = TCCR1B & B11111000 | B00000010; // 3921.16Hz TCCR1B = TCCR1B & B11111000 | B00000011; // 490.20Hz TCCR1B = TCCR1B & B11111000 | B00000100; // 122.55Hz TCCR1B = TCCR1B & B11111000 | B00000101; // 30.64Hz

 

D9 및 D10 핀에 대한 명령:

 

TCCR2B = TCCR2B & B11111000 | B00000001;  // for PWM frequency of 31372.55 Hz

TCCR2B = TCCR2B & B11111000 | B00000010;  // 3921.16 Hz

TCCR2B = TCCR2B & B11111000 | B00000011;  // 980.39 Hz

TCCR2B = TCCR2B & B11111000 | B00000100;  //  490.20 Hz

TCCR2B = TCCR2B & B11111000 | B00000101;  //  245.10 Hz

TCCR2B = TCCR2B & B11111000 | B00000110;  //  122.55 Hz

TCCR2B = TCCR2B & B11111000 | B00000111;  //   30.64 Hz

 

TCCR2B = TCCR2B & B11111000 | B00000001; // 31372.55Hz의 PWM 주파수용 TCCR2B = TCCR2B & B11111000 | B00000010; // 3921.16Hz TCCR2B = TCCR2B & B11111000 | B00000011; // 980.39Hz TCCR2B = TCCR2B & B11111000 | B00000100; // 490.20Hz TCCR2B = TCCR2B & B11111000 | B00000101; // 245.10Hz TCCR2B = TCCR2B & B11111000 | B00000110; // 122.55Hz TCCR2B = TCCR2B & B11111000 | B00000111; // 30.64Hz

 

D2, D3 및 D5에 대한 명령:

 

TCCR3B = TCCR3B & B11111000 | B00000001;   // for PWM frequency of 31372.55 Hz

TCCR3B = TCCR3B & B11111000 | B00000010;  //  3921.16 Hz

TCCR3B = TCCR3B & B11111000 | B00000011;  //  490.20 Hz

TCCR3B = TCCR3B & B11111000 | B00000100;   //  122.55 Hz

TCCR3B = TCCR3B & B11111000 | B00000101;    //  30.64 Hz

 

TCCR3B = TCCR3B & B11111000 | B00000001; // 31372.55Hz의 PWM 주파수용 TCCR3B = TCCR3B & B11111000 | B00000010; // 3921.16Hz TCCR3B = TCCR3B & B11111000 | B00000011; // 490.20Hz TCCR3B = TCCR3B & B11111000 | B00000100; // 122.55Hz TCCR3B = TCCR3B & B11111000 | B00000101; // 30.64Hz

 

D6, D7, D8 명령:

 

TCCR4B = TCCR4B & B11111000 | B00000001;   // for PWM frequency of 31372.55 Hz

TCCR4B = TCCR4B & B11111000 | B00000010;  //  3921.16 Hz

TCCR4B = TCCR4B & B11111000 | B00000011;  //  490.20 Hz

TCCR4B = TCCR4B & B11111000 | B00000100;   //  122.55 Hz

TCCR4B = TCCR4B & B11111000 | B00000101;    //  30.64 Hz

 

 

TCCR4B = TCCR4B & B11111000 | B00000001; // 31372.55Hz의 PWM 주파수용 TCCR4B = TCCR4B & B11111000 | B00000010; // 3921.16Hz TCCR4B = TCCR4B & B11111000 | B00000011; // 490.20Hz TCCR4B = TCCR4B & B11111000 | B00000100; // 122.55Hz TCCR4B = TCCR4B & B11111000 | B00000101; // 30.64Hz

 

D44, D45 및 D46에 대한 명령:

 

TCCR5B = TCCR5B & B11111000 | B00000001;  // for PWM frequency of 31372.55 Hz

TCCR5B = TCCR5B & B11111000 | B00000010;  // 3921.16 Hz

TCCR5B = TCCR5B & B11111000 | B00000011;  //    490.20 Hz

TCCR5B = TCCR5B & B11111000 | B00000100;  //  122.55 Hz

 

 

위 코드를 사용하여 D3 핀의 주파수를 변경해 보겠습니다. 회로는 Proteus 소프트웨어에서 시뮬레이션됩니다.

1단계: 다음 구성요소를 워크시트에 배치합니다.

 

아래와 같이 연결하세요.

 

오실로스코프에 연결된 아두이노 메가 2개

 

 

2단계: 각 Mega의 D3 핀을 오실로스코프에 연결합니다

.

3단계: 첫 번째 메가보드의 프로그램은 추가 명령이 사용되지 않으므로 기본 주파수로 PWM 신호를 출력합니다.

// 기본 PWM 주파수

 

// 기본 PWM 주파수

void setup() {
  pinMode(3, OUTPUT);
}

void loop() {
  analogWrite(3, 155);
}

 

 

Mega2 보드용 프로그램에는 주파수를 31372.55Hz로 설정하는 추가 명령이 있습니다. 

 

// 핀 D3에서 PWM 주파수를 31KHz로 설정합니다.

void setup() {
  TCCR3B = TCCR3B & B11111000 | B00000001;  // for PWM frequency of 31372.55 Hz
  pinMode(3, OUTPUT);
}

void loop() {
  analogWrite(3, 155);
}

 

 

4단계: 시뮬레이션 실행

 

각 보드는 서로 다른 주파수에서 PWM 신호를 출력합니다.

 

위 이미지에서 볼 수 있듯이 채널 2(Mega2에 연결됨)의 신호 주파수는 채널 1(Mega2에 연결됨)의 신호 주파수보다 높습니다. 

 

 

반응형

더욱 좋은 정보를 제공하겠습니다.~ ^^