SWDesk/Firmware
[Arduino] 가변 주파수를 갖는 GPIO 출력
bizmaker
2025. 4. 20. 11:30
아두이노를 이용해
사용자가 원하는 특정한 주파수를 갖는 GPIO 출력을 갖도록 하는 코드
[예제 코드]
// 설정할 GPIO 핀
const int outputPin = 18; // 원하는 출력 핀 번호로 설정
// PWM 채널 설정
const int pwmChannel = 0;
const int resolution = 8; // 8-bit (0~255)
int dutyCycle = 128; // 50% 듀티사이클 (8-bit 기준)
// 초기 주파수
int currentFrequency = 1000; // Hz
void setup() {
Serial.begin(115200);
// 초기 PWM 설정
ledcSetup(pwmChannel, currentFrequency, resolution);
ledcAttachPin(outputPin, pwmChannel);
ledcWrite(pwmChannel, dutyCycle);
Serial.println("PWM 시작. 주파수를 시리얼로 입력하세요 (예: 1000)");
}
void loop() {
if (Serial.available()) {
String input = Serial.readStringUntil('\n');
int newFreq = input.toInt();
if (newFreq > 0 && newFreq <= 40000) { // ESP32에서 안정적으로 가능한 범위
currentFrequency = newFreq;
// PWM 다시 설정
ledcSetup(pwmChannel, currentFrequency, resolution);
ledcWrite(pwmChannel, dutyCycle);
Serial.print("주파수 변경됨: ");
Serial.print(currentFrequency);
Serial.println(" Hz");
} else {
Serial.println("올바른 주파수를 입력하세요 (1~40000Hz)");
}
}
// loop에서 별다른 작업 없음. PWM은 하드웨어에서 유지됨.
}
[설명]
- ESP32의 경우 총 16개의 PWM 채널을 가지며
- 각 채널은 독립적으로 운용되며
- 1Hz에서 40kHz까지 광범위한 주파수 대역의 출력 생성 가능
반응형