카드뉴스










MCU Timer는 클럭을 세어 시간을 만드는 주변장치입니다
MCU Timer를 단순한 시계로 생각하면 실제 쓰임이 잘 보이지 않습니다. Timer는 입력된 클럭을 prescaler로 나누고, counter가 그 틱을 세며, 정해진 period나 compare 값에 도달했을 때 이벤트를 만드는 하드웨어입니다. 이 구조 덕분에 CPU가 계속 반복문으로 시간을 세지 않아도 1ms 주기 작업, PWM 출력, 입력 캡처, 모터 제어 루프 같은 동작을 만들 수 있습니다.
기본 계산은 클럭에서 시작합니다. 예를 들어 Timer가 1MHz 틱을 받도록 prescaler를 맞추면 counter는 1마이크로초마다 증가합니다. Auto-reload 값이 999라면 0부터 999까지 1000틱을 세고 업데이트 이벤트가 발생하므로 약 1ms 주기가 됩니다. 실제 MCU에서는 prescaler와 auto-reload가 0 기준으로 동작하는 경우가 많아 데이터시트와 레퍼런스 매뉴얼의 계산식을 확인해야 합니다.
인터럽트와 PWM은 같은 Timer 구조에서 나옵니다
Timer 인터럽트는 counter가 끝값에 도달했을 때 CPU에 알려주는 방식입니다. 센서 샘플링 주기를 맞추거나, 일정 시간마다 플래그를 세우거나, 제어 알고리즘 실행 주기를 만드는 데 사용됩니다. 이때 ISR 안에서 오래 계산하거나 blocking 통신을 넣으면 주기가 흔들릴 수 있으므로, 인터럽트에서는 짧은 처리만 하고 실제 작업은 main loop나 task로 넘기는 구조가 안정적입니다.
PWM도 Timer의 counter와 compare register를 이용합니다. 전체 주기는 auto-reload 값이 정하고, duty는 compare 값이 정합니다. LED 밝기 조절처럼 단순한 출력부터 DC 모터 속도 제어, BLDC 인버터 구동, 전력전자 스위칭까지 PWM은 매우 자주 등장합니다. 주파수와 duty를 바꿀 때는 Timer 클럭, prescaler, period, 출력 핀의 Alternate Function 설정을 함께 확인해야 합니다.
Timer 디버깅은 클럭과 핀 설정부터 봅니다
Timer가 동작하지 않을 때는 코드 한 줄보다 설정 순서를 보는 편이 빠릅니다. Timer peripheral clock이 켜졌는지, prescaler와 ARR 값이 의도한 주기를 만드는지, interrupt enable과 NVIC 설정이 맞는지 확인해야 합니다. PWM이라면 해당 채널이 연결된 GPIO 핀이 Alternate Function 모드인지, AF 번호가 맞는지, 출력 enable이 빠지지 않았는지도 봐야 합니다.
측정 장비가 있으면 오실로스코프나 로직 애널라이저로 PWM 주기와 duty를 직접 확인하는 것이 좋습니다. 계산값과 실제 파형이 다르면 클럭 트리나 prescaler 설정을 의심할 수 있습니다. Timer 공부의 중심은 레지스터 이름을 외우는 것이 아니라, 클럭을 나누고 세고 비교해서 이벤트와 파형을 만든다는 흐름을 읽는 것입니다.
제어 루프에서는 Timer 주기의 흔들림도 봐야 합니다
모터 제어, 전원 제어, 센서 샘플링처럼 주기가 중요한 코드에서는 Timer 설정이 시스템 품질에 직접 영향을 줍니다. 인터럽트 주기가 불안정하면 ADC를 읽는 시점이 흔들리고, PWM 갱신 타이밍이 밀리며, 제어 알고리즘의 입력과 출력 사이에 오차가 생길 수 있습니다. 그래서 단순히 인터럽트가 발생하는지만 확인하지 말고 ISR 실행 시간, 우선순위, 다른 통신 처리와 겹치는 구간까지 같이 점검하는 편이 좋습니다.