C언어로 Arduino에서 PWM 제어기를 구현한 코드
Arduino에서 PWM 제어기를 구현한 코드입니다. 이 코드는 PWM 핀에 신호를 생성하여 듀티 사이클과 주파수를 제어합니다.
Arduino PWM 제어기 코드
// Define PWM pin
const int pwmPin = 9; // Use pin 9 for PWM output
// Parameters for PWM
int dutyCycle = 50; // Duty cycle in percentage (0-100)
int frequency = 500; // Frequency in Hz
void setup() {
// Configure PWM pin as output
pinMode(pwmPin, OUTPUT);
// Optional: Display the parameters in the Serial Monitor
Serial.begin(9600);
Serial.println("PWM Control Initialized");
Serial.print("Duty Cycle: ");
Serial.print(dutyCycle);
Serial.println("%");
Serial.print("Frequency: ");
Serial.print(frequency);
Serial.println(" Hz");
}
void loop() {
// Calculate ON and OFF time based on frequency and duty cycle
int period_us = 1000000 / frequency; // Period in microseconds
int onTime_us = (period_us * dutyCycle) / 100; // ON time
int offTime_us = period_us - onTime_us; // OFF time
// Generate PWM signal
digitalWrite(pwmPin, HIGH); // Turn on the pin
delayMicroseconds(onTime_us);
digitalWrite(pwmPin, LOW); // Turn off the pin
delayMicroseconds(offTime_us);
// Optional: Update parameters dynamically from Serial input
if (Serial.available() > 0) {
String input = Serial.readStringUntil('\n');
int value = input.toInt();
if (value >= 0 && value <= 100) {
dutyCycle = value;
Serial.print("Duty Cycle updated to: ");
Serial.print(dutyCycle);
Serial.println("%");
}
}
}
코드 설명
- 핀 설정:
pwmPin
은 PWM 신호가 출력될 핀입니다. (Arduino Uno에서는 핀 3, 5, 6, 9, 10, 11이 PWM을 지원)
- PWM 파라미터:
dutyCycle
: PWM 신호의 ON 상태의 비율(%).frequency
: PWM 신호의 주파수(Hz).
- ON/OFF 시간 계산:
- 신호의 주기를 계산:
- ON 시간과 OFF 시간 계산:
- PWM 신호 생성:
digitalWrite(pwmPin, HIGH)
로 핀을 HIGH로 설정하여 ON 신호를 생성.delayMicroseconds(onTime)
동안 신호를 유지.digitalWrite(pwmPin, LOW)
로 핀을 LOW로 설정하여 OFF 신호를 생성.
- Serial 입력 (선택 사항):
- 사용자가 Serial Monitor를 통해 실시간으로 듀티 사이클 값을 업데이트할 수 있도록 구현.
사용 방법
- 코드 업로드:
- 위 코드를 Arduino IDE에 복사하고, Arduino 보드(예: Uno, Mega 등)에 업로드합니다.
- 하드웨어 연결:
pwmPin
(예: 9번 핀)을 원하는 부하(예: LED, 모터 드라이버)에 연결.- GND 핀을 회로의 GND에 연결.
- Serial Monitor 사용:
- Serial Monitor(9600 baud)를 열고 듀티 사이클 값을 실시간으로 입력하여 PWM 신호를 제어.
예제 실행
초기 출력
PWM Control Initialized
Duty Cycle: 50%
Frequency: 500 Hz
동작
- 50% 듀티 사이클로 500Hz의 PWM 신호가 출력됩니다.
- Serial Monitor에
75
를 입력하면 듀티 사이클이 75%로 변경됩니다.
이 코드는 간단하면서도 효과적인 방법으로 Arduino에서 PWM 신호를 생성하며, LED 밝기 제어, 모터 속도 제어 등에 사용할 수 있습니다.