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("%");
    }
  }
}

코드 설명

  1. 핀 설정:
    • pwmPin은 PWM 신호가 출력될 핀입니다. (Arduino Uno에서는 핀 3, 5, 6, 9, 10, 11이 PWM을 지원)
  2. PWM 파라미터:
    • dutyCycle: PWM 신호의 ON 상태의 비율(%).
    • frequency: PWM 신호의 주파수(Hz).
  3. ON/OFF 시간 계산:
    • 신호의 주기를 계산: period=1frequency×106\text{period} = \frac{1}{\text{frequency}} \times 10^6
    • ON 시간과 OFF 시간 계산: onTime=period×dutyCycle100\text{onTime} = \text{period} \times \frac{\text{dutyCycle}}{100} offTime=periodonTime\text{offTime} = \text{period} – \text{onTime}
  4. PWM 신호 생성:
    • digitalWrite(pwmPin, HIGH)로 핀을 HIGH로 설정하여 ON 신호를 생성.
    • delayMicroseconds(onTime) 동안 신호를 유지.
    • digitalWrite(pwmPin, LOW)로 핀을 LOW로 설정하여 OFF 신호를 생성.
  5. Serial 입력 (선택 사항):
    • 사용자가 Serial Monitor를 통해 실시간으로 듀티 사이클 값을 업데이트할 수 있도록 구현.

사용 방법

  1. 코드 업로드:
    • 위 코드를 Arduino IDE에 복사하고, Arduino 보드(예: Uno, Mega 등)에 업로드합니다.
  2. 하드웨어 연결:
    • pwmPin(예: 9번 핀)을 원하는 부하(예: LED, 모터 드라이버)에 연결.
    • GND 핀을 회로의 GND에 연결.
  3. 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 밝기 제어, 모터 속도 제어 등에 사용할 수 있습니다.