[현대오토에버SW스쿨4기] 임베디드 MCU 프로그래밍(5)

chaehun·2025년 2월 17일

Pulse Width Modulation (PWM)

  • Lecture Overview
    • PWM을 사용하여 LED와 수동 부저의 출력을 제어해보자.
  • Pulse Width Modulation -> pulse의 너비를 조정한다.

    • 주기 내에서 HIGH 구간의 비율을 달리하여 나타내는 디지털 신호
    • HIGH와 LOW 구간에 개별적으로 반응하면 안됨
      • PWM 신호 주파수는 일반적으로 높음
        -> 불이 깜빡이는 것을 느끼게 되면 안된다.
      • 전체 주기의 평균값에 제어 대상이 반응하도록 함
        -> 평균값이 중요하다.
    • 아날로그 신호와 유사한 효과를 얻을 수 있음
      • LED의 밝기 조절
      • 모터의 속도 조절
        -> 시작 아이디어는 켜짐과 꺼짐은 우리가 결정할 수 있으나, 밝기는 어떻게 조정하면 될까? => 전류(시간당 흐르는 전하의 양)를 통해서
        엄청나게 빠른 속도로 전류를 0A에서 4.3A로 교체해주면 시간당 전류량을 줄일 수 있다.
        모터나 스피커의 세기도 조절할 수 있다.
  • 아날로그 신호의 디지털 표현

    PAM은 실제 비트 수 그대로 신호를 modulation 함
    PWM은 0~255 범위로 데이터를 양자화 한다면 높은 값일 수록 high 구간을 넓게 부여함

  • PWM 신호의 듀티 사이클: 주기 내 HIGH 비율

  • PAM과 PWM 비교
    PAM은 127이 128에 비해 1의 개수가 많아서 HIGH의 너비를 너 많이 부여해서 잘못 변조할 수 있다.
    따라서 회로에서는 PWM 통신에서는 정확한 비트를 보내는 PAM이 유리하다.
    -> 질문 드리자

  • Arduino 8비트 타이머/카운터의 PWM 모드
    • 고속 PWM 모드
      • BOTTOM에서 TOP으로 상향 카운트만 존재, 단일 경사 모드
    • 위상 교정 PWM 모드
      • 8비트 타이머/카운터에서는 사용할 수 없음
      • BOTTOM에서 TOP으로 다시 BOTTOM으로 상하양 카운트 존재, 이중 경사 모드
        -> BOTTOM: 카운터의 값이 0x00
        MAX: 카운터가 0xFF
        TOP: 카운터가 가질 수 있는 최댓값을 가리킨다. 오버플로 인터럽트의 경우에 TOP은 0xFF지만, CTC 모드의 경우에는 사용자가 설정한 값이 TOP이 된다.
  • 고속 PWM 모드 -> 웬만한 MCU에 다 기능이 들어있음.
    • 단일 경사 모드
  • 위상 교정 PWM 모드
    • 이중 경사 모드
  • PWM 모듈 분석
    • 전체 모듈 구조

  • PWM 소스코드 분석
    • GTM: Generic Timer Module
    • TOM: Timer Output Module
    • 초기화 코드



    • FXCLK 사용설정 코드

0개의 댓글