본문 바로가기

아두이노우노 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에 연결됨)의 신호 주파수보다 높습니다. 

 

 

반응형

캐어랩 고객 지원

취업, 창업의 막막함, 외주 관리, 제품 부재!

당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약, 아이디어는 있지만 구현할 기술이 없는 막막함.

우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.

이제 고민을 멈추고, 캐어랩을 만나세요!

코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.

제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!

귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.

지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.

카카오 채널 추가하기

카톡 채팅방에서 무엇이든 물어보세요

귀사가 성공하기까지의 긴 고난의 시간을 캐어랩과 함께 하세요.

캐어랩 온라인 채널 바로가기

캐어랩