[아두이노] 아두이노 PWM의 진짜 구조


“코드가 아니라 하드웨어가 만든다”


1. PWM은 소프트웨어가 아니라 “하드웨어 기능”이다

많은 사람들이 PWM을 이렇게 오해합니다:

“analogWrite()가 빠르게 ON/OFF를 반복한다”

하지만 실제 구조는 완전히 다릅니다.

아두이노 UNO 기준으로 PWM은:

  • CPU(코드 실행)
  • Timer(하드웨어)
  • 출력 핀 회로

이 3가지가 분리된 구조입니다.


🔧 핵심 구조

PWM 출력은 CPU가 직접 만드는 게 아니라:

Timer(하드웨어 타이머)가 자동으로 생성

합니다.


2. PWM 내부 동작 (하드웨어 레벨)

예를 들어 analogWrite(9, 64)를 실행하면:

① CPU가 하는 일

  • “9번 핀 PWM 모드로 설정”
  • “듀티 사이클 = 64/255” 값을 레지스터에 기록

② Timer가 하는 일 (핵심)

Timer는 내부에서 계속 반복합니다:

  1. 카운터 증가
  2. 특정 값 도달하면 HIGH
  3. 비교값 도달하면 LOW
  4. 다시 초기화

이 과정이 초당 약:

f=490HzT2.04msf = 490Hz \Rightarrow T \approx 2.04ms

로 반복됩니다.


3. PWM은 “계속 도는 기계”다

핵심은 이것입니다:

PWM은 코드가 아니라 독립적인 하드웨어 루프

즉:

  • 한 번 설정하면
  • CPU 없이도 계속 동작

💡 직관적 비유

PWM은 이렇게 생각하면 됩니다:

  • CPU → “설정만 하는 관리자”
  • Timer → “자동으로 일하는 공장 기계”
  • PWM 출력 → “계속 나오는 제품”

4. analogWrite()의 진짜 역할

analogWrite(9, 64);

이 한 줄은:

“9번 핀에 연결된 Timer에게
듀티비 25%로 계속 출력하라고 설정하는 것”


❌ 잘못된 이해

  • CPU가 계속 ON/OFF 반복

⭕ 실제 구조

  • CPU는 1번 설정
  • 이후 Timer가 자동 반복

5. 그럼 delay()는 무엇인가?

delay(1000);

이 함수의 본질은 단순합니다:

CPU를 1초 동안 멈추게 하는 것


🔧 중요한 차이

요소동작
PWM하드웨어 Timer가 계속 실행
CPUdelay 동안 정지

즉:

PWM은 계속 돌아가고, CPU만 멈춘다


6. 전체 시스템 흐름

예를 들어 코드:

analogWrite(9, 64);
delay(1000);
analogWrite(9, 128);

⏱ 시간 흐름

t = 0

  • Timer 시작 (25% duty PWM 생성)

t = 0 ~ 1000ms

  • PWM 계속 출력 (CPU는 멈춤)

t = 1000ms

  • duty 변경 (50%)

7. delay가 없다면?

analogWrite(9, 64);
analogWrite(9, 128);
analogWrite(9, 200);

CPU 관점

  • 초당 수십만 번 실행 가능

Timer 관점

  • PWM은 계속 유지

⚠️ 결과

  • 마지막 값이 사실상 “우세”
  • 또는 평균값처럼 보이는 현상 발생
  • 사람 눈에는 안정적인 밝기로 보일 수 있음

8. 핵심 개념 정리

🔹 PWM 본질

PWM=Timer 기반 자동 스위칭 시스템\text{PWM} = \text{Timer 기반 자동 스위칭 시스템}

🔹 Duty Cycle

D=TONTD = \frac{T_{ON}}{T}

🔹 평균 전압 (인간이 보는 값)

Vavg=DVmaxV_{avg} = D \cdot V_{max}

9. 엔지니어 관점 핵심

PWM을 제대로 이해하면 이렇게 바뀝니다:

❌ 초보 관점

“밝기 조절하는 함수”

⭕ 엔지니어 관점

“타이머 기반 에너지 평균 제어 시스템”


🔥 핵심 요약

  • PWM은 CPU가 만드는 게 아니라 Timer가 만든다
  • analogWrite는 “설정값을 Timer에 전달”
  • delay는 PWM과 무관하게 CPU만 멈춘다
  • PWM은 계속 독립적으로 동작하는 하드웨어 시스템이다

💡 한 줄 정리

PWM은 소프트웨어가 아니라, 하드웨어 타이머가 시간 자체를 쪼개서 만드는 아날로그 “흉내 시스템”이다.

댓글

이 블로그의 인기 게시물

공압 속도 제어: 미터인 vs 미터아웃

NPN, PNP 트랜지스터 차이점

[주식] 한국거래소(KRX) 데이터 API 입문 가이드

[PLC] 서보 모터 브레이크 결선, 왜 릴레이 터미널을 써야 할까?

[PLC] 센서 NPN, PNP 출력 타입별 결선방법 (OMRON E2E-X 시리즈 3선식 배선)

[PLC] PLC 아날로그 입출력 기본

전력(kW) 계산하기 (직류, 교류 단상, 교류 삼상)

사각형의 넓이 공식의 증명

[PLC] 릴레이와 전자 접촉기 (MC)

[아두이노] 가변저항(Potential Divider)과 전압분배(Voltage Divider)