[아두이노] 아두이노 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는 내부에서 계속 반복합니다:
- 카운터 증가
- 특정 값 도달하면 HIGH
- 비교값 도달하면 LOW
- 다시 초기화
이 과정이 초당 약:
로 반복됩니다.
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가 계속 실행 |
| CPU | delay 동안 정지 |
즉:
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 본질
🔹 Duty Cycle
🔹 평균 전압 (인간이 보는 값)
9. 엔지니어 관점 핵심
PWM을 제대로 이해하면 이렇게 바뀝니다:
❌ 초보 관점
“밝기 조절하는 함수”
⭕ 엔지니어 관점
“타이머 기반 에너지 평균 제어 시스템”
🔥 핵심 요약
- PWM은 CPU가 만드는 게 아니라 Timer가 만든다
- analogWrite는 “설정값을 Timer에 전달”
- delay는 PWM과 무관하게 CPU만 멈춘다
- PWM은 계속 독립적으로 동작하는 하드웨어 시스템이다
💡 한 줄 정리
PWM은 소프트웨어가 아니라, 하드웨어 타이머가 시간 자체를 쪼개서 만드는 아날로그 “흉내 시스템”이다.
댓글
댓글 쓰기