Arduino Mega 2560의 Digital 출력
Arduino Mega를 사용하는 가장 큰 이유 중 하나는 많은 출력 때문입니다.. 가장 많이 사용하는 Arduino Uno 의 경우 디지털 입출력 핀이 14개입니다. 그나마 직렬통신을 사용할 경우 1번과 2번 핀을 사용하지 못하기 때문에 12개만 사용할 수 있습니다. 디지털 입출력 핀 중 PWM 출력이 가능한 핀은 6개입니다. 여러개의 모터와 센서를 동시에 사용할 경우 모자라는 경우가 많습니다. 그래서 그 대안으로 Arduino Mega 2560을 자주 선택합니. Arduino Mega는 54개의 디지털 입출력 핀을 갖고 있으며, 그 중에 15개는 PWM 출력도 가능합니다.
디지털 입출력은 하나의 핀으로 입력 혹은 출력으로 사용할 수 있으나, 아날로그 단자의 경우 입력만 가능합니다. 아날로그 출력의 경우 디지털 핀 중 PWM이 가능한 핀을 사용통해, PWM 출력을 내보내 사용하게 됩니다. PWM으로 구현하는 아날로그 신호가 만족스럽지 못할 경우 아날로그 출력이 가능한 Arduino Duo나 MKR을 사용하는 것이 좋습니다. 참고로 아날로그 입력은 Uno는 6개 Mega는 16개 입니다.
그림은 Arduino Mega의 핀 레이아웃입다. 핀 레이아웃 원본은 아래 링크를 따라가면 pdf 파일형태로 받을 수 있습니다.
https://docs.arduino.cc/resources/pinouts/A000067-full-pinout.pdf
그림에서 디지털 입출력 핀은 D0 부터 D69까지로 70개 입니다. 그중 D54에서 D69까지 16개는 아날로그 입력 겸용입니다. 센서 입력이 필요할 경우 아날로그 입력을 자주 쓰기 때문에 아날로그쪽은 배제하고 디지털 입출력을 설계하는 경우가 많지만, 필요하면 70개 까지 사용할 수 있습니다. 디지털 핀 중 pwm이 가능한 pin은 ~D45 와 같이 이름 앞에 ~ (물결) 기호가 추가되어 있습니다.
Mega pin 배열에서 하단에 있는 2열의 핀은 첫 부분과 끝 부분에 5V와 GND가 배치되어 있어, 실제 배선해보면 매우 편리합니다.
Arduino Mega 2560 PWM output frequency 설정법
기본 설정 값은 490Hz와 980Hz입니다. 기본 설정 값은 주파수 설정을 별도로 하지 않았을 때 사용할 수 있는 주파수 입니다.
PWM pin number
pin 2 ~ 13
pin 44 ~46
defalut pwm frequency : 490 Hz
pin 4 and 13 : 980 Hz
---------------------------------------------------------------------------------
기본 설정 값 이외의 PWM 주파수를 쓰기위해서는 register 설정이 필요합니다.
D4번과 D13번 핀은 30.64Hz에서 62500 Hz (62.5kHz) 까지 설정할 수 있고,
D2, D3, D5 ~ D12번 핀은 30.64Hz에서 31372.55 Hz (31.37255 kHz) 까지 설정할 수 있습니다.
D44 ~ D46번 핀은 122.55Hz에서 31372.55 Hz (31.37255 kHz) 까지 설정할 수 있습니다.
-------------------------------------------------------------------------------
기본 PWM 방법 : 3번 핀에서 490 Hz 출력
void setup() {
pinMode(3, OUTPUT); // 3번핀을 출력으로 설정
}
void loop() {
analogWrite(3, 64); // 3번핀에서 64의 값 출력, 0에서 255사이 값으로 설정
}
PWM Frequency 설정법 : 3번 핀에서 3.92116 kHz (3921.16Hz) 출력
void setup() {
pinMode(3, OUTPUT); //3번핀을 출력으로 설정
}
void loop() {
TCCR3B = TCCR3B & B11111000 | B00000010; // for PWM frequency of 3921.16 Hz
analogWrite(3, 64); // 3번핀에서 64의 값 출력, 0에서 255사이 값으로 설정
}
TCCR3B = TCCR3B & B11111000 | B00000010; 를 추가하면 3921.16 Hz를 사용할 수 있다.
주파수 설정 표
D2, D3, D5
Timer 3
TCCR3B = TCCR3B & B11111000 | B00000001; // for PWM frequency of 31372.55 Hz , divisor 1
TCCR3B = TCCR3B & B11111000 | B00000010; // for PWM frequency of 3921.16 Hz , divisor 8
TCCR3B = TCCR3B & B11111000 | B00000011; // for PWM frequency of 490.20 Hz , divisor 64
TCCR3B = TCCR3B & B11111000 | B00000100; // for for PWM frequency of 122.55 Hz , divisor 256
TCCR3B = TCCR3B & B11111000 | B00000101; // for PWM frequency of 30.64 Hz , divisor 1024
D6, D7, D8
Timer 4
TCCR4B = TCCR4B & B11111000 | B00000001; // for PWM frequency of 31372.55 Hz , divisor 1
TCCR4B = TCCR4B & B11111000 | B00000010; // for PWM frequency of 3921.16 Hz , divisor 8
TCCR4B = TCCR4B & B11111000 | B00000011; // for PWM frequency of 490.20 Hz , divisor 64
TCCR4B = TCCR4B & B11111000 | B00000100; // for for PWM frequency of 122.55 Hz , divisor 256
TCCR4B = TCCR4B & B11111000 | B00000101; // for PWM frequency of 30.64 Hz , divisor 1024
D9, D10
Timer 2
TCCR2B = TCCR2B & B11111000 | B00000001; // for PWM frequency of 31372.55 Hz , divisor 1
TCCR2B = TCCR2B & B11111000 | B00000010; // for PWM frequency of 3921.16 Hz , divisor 8
TCCR2B = TCCR2B & B11111000 | B00000011; // for PWM frequency of 980.39 Hz , divisor 32
TCCR2B = TCCR2B & B11111000 | B00000100; // for PWM frequency of 490.20 Hz , divisor 64
TCCR2B = TCCR2B & B11111000 | B00000101; // for PWM frequency of 245.10 Hz , divisor 128
TCCR2B = TCCR2B & B11111000 | B00000110; // for for PWM frequency of 122.55 Hz , divisor 256
TCCR2B = TCCR2B & B11111000 | B00000111; // for PWM frequency of 30.64 Hz , divisor 1024
D11~D12 설정
Timer 1
TCCR1B = TCCR1B & B11111000 | B00000001; // for PWM frequency of 31372.55 Hz , divisor 1
TCCR1B = TCCR1B & B11111000 | B00000010; // for PWM frequency of 3921.16 Hz , divisor 8
TCCR1B = TCCR1B & B11111000 | B00000011; // for PWM frequency of 490.20 Hz , divisor 64
TCCR1B = TCCR1B & B11111000 | B00000100; // for for PWM frequency of 122.55 Hz , divisor 256
TCCR1B = TCCR1B & B11111000 | B00000101; // for PWM frequency of 30.64 Hz , divisor 1024
D4, D13 설정
Timer 0
TCCR0B = TCCR0B & B11111000 | B00000001; // for PWM frequency of 62500 Hz , divisor 1
TCCR0B = TCCR0B & B11111000 | B00000010; // for PWM frequency of 7812.50 Hz , divisor 8
TCCR0B = TCCR0B & B11111000 | B00000011; // for PWM frequency of 976.56 Hz (The DEFAULT) , divisor 64
TCCR0B = TCCR0B & B11111000 | B00000100; // for PWM frequency of 244.14 Hz , divisor 256
TCCR0B = TCCR0B & B11111000 | B00000101; // for PWM frequency of 61.04 Hz, , divisor 1024
D44~ D46 설정
Timer 5
TCCR5B = TCCR5B & B11111000 | B00000001; // for PWM frequency of 31372.55 Hz, divisor 1
TCCR5B = TCCR5B & B11111000 | B00000010; // for PWM frequency of 3921.16 Hz, divisor 8
TCCR5B = TCCR5B & B11111000 | B00000011; // for PWM frequency of 490.20 Hz, divisor 64
TCCR5B = TCCR5B & B11111000 | B00000100; // for PWM frequency of 122.55 Hz, divisor 256
TCCR5B = TCCR5B & B11111000 | B00000101; // for PWM frequency of 30.64 Hz, divisor 1024
Arduino-PWM-Frequency - ArduinoInfo
Changing PWM Frequency on the Arduino There is a very good tutorial HERE: Credits for the below: http://usethearduino.blogspot.com On the Arduino UNO and YourDuino RoboRED etc., pins 3,5,6, 9, 10, 11 can be configured for PWM output. The 8-bit PWM value th
arduinoinfo.mywikis.net
원하는 주파수를 조절하시려면, 주파수 설정 표에서 원하는 값을 코드에 삽입하면 됩니다.
목록에 없는 주파수는 설정할 수 없습니다. 기본적으로 clock을 1배, 8배, 32배, 64배 등 일정한 비율로 변형하여 pwm 신호를 생성하기 때문에 clock의 배수나 약수 형태의 주파수가 아니면 생성하기 어렵습니다. Arduino mega 2560이 사용하는 ATmega2560 microcontroller의 PWM 신호는 System clock을 prescaler로 처리하여 신호를 만들기 때문에 system clock인 16MHz를 1, 2, 4, 8, 16, 32, 64, 128, 256 배로 나누어 주파수를 만듭니다.
실행 예는 아래 사이트를 참조하십시오.
https://www.etechnophiles.com/how-to-change-pwm-frequency-of-arduino-mega/
How To Change PWM Frequency Of Arduino Mega
Default PWM frequency of Arduino Mega can be easily changed by using a simple one-line code! Read below to know How To Change PWM Frequency Of Arduino Mega.
www.etechnophiles.com
'Arduino' 카테고리의 다른 글
[Arduino] Arduino nano가 인식되지 않을 경우 (0) | 2024.11.26 |
---|