CS/마이크로프로세서

[마이크로프로세서] 타이머/카운터 정리

nowkoes 2024. 1. 10. 16:18

타이머/카운터 내용 정리

개요

 타이머/카운터와 관련해서 정리할 내용이 많기 때문에, 이전에 하듯이 글 하단에 요약본을 만드는 것이 아닌 하나의 포스팅을 쓰기로 결정했다. 전반적인 내용과 레지스터 동작을 정리하도록 하겠다.


본문

기본 개념

 타이머/카운터는 MCU 내부에서의 입력된 클럭을 계수하는 기능을 하고 있다. 즉, 클럭의 주파수를 이용해 타이머로 활용하며, 만약 8비트 카운터의 경우 카운터의 상태가 11111111에서 00000000으로 변화할 때 발생한다. 이때 시스템 내부의 클럭 주기론 만들기 어려운 것이 있는데, 이를 해결하기 위해 프리스케일러(Prescaler)를 사용한다. 즉, 고속의 클럭을 사용할 때 나타나는 한계를 해결하기 위해 클럭을 분주하여 더 느린 클럭을 생성하는 것이다. 

 

 예를 들어, 8비트 카운터를 이용해 1ms 인터럽트 주기를 만들고 싶다고 가정해 보자. 시스템 내부 주파수는 16MHz이므로 시스템 내부 클럭 주기는 0.0625us가 된다. 1ms 인터럽트 주기를 만들기 위한 클럭 주기는 1ms/256 = 3.90625us이므로 분주비를 3.90625/0.0625 = 62.5 ~= 64로 설정하면 된다. 하지만 이렇게 정하면 인터럽트 주기가 0.0625us * 64 * 256 = 1.024ms이므로 매 인터럽트마다 0.024ms의 오차가 생긴다. 이를 보정하기 위해 인터럽트 주기를 클럭 주기로 나누어(1ms/4us = 250) 계수의 시작점을 조절하면 된다.


동작 모드(8비트)

 

1. 일반(Normal) 모드

ㄱ. 정의: 내부 클럭을 계수하여 0xFF에서 0x00으로 넘어갈 때 인터럽트를 발생시키는 모드ㄴ. 특징 a. 카운팅 방향이 항상 증가하며, 카운터 초기하는 수행되지 않음 b. 특별히 고려할 사항이 없으며, 언제든 새로운 카운터 값을 사용할 수 있음

출처: blog.naver.com/rnc_ohm/221220164869

 

2. 비교 일치(Clear Timer on Compare Match, CTC) 모드

ㄱ. 정의: TCNTn 값이 클럭의 입력에 따라 증가하며, OCRn의 값과 일치하면 인터럽트를 발생시키는 모드

ㄴ. 특징

 a. 하한값인 Bottom이 0으로 고정되어 있음

 b. 정확한 시간 간격으로 주기적인 펄스를 생성

 c. OCRn 값이 커지면 주파수가 낮아져 OCn의 출력 파형 주기가 커짐 (OCRn ∝ OCn 출력 파형 주기)

 d. 원하는 주기가 있을 때, 원하는 파형을 출력하는 가장 작은 분주비를 결정하고, OCRn 값을 결정함

ㄷ. 출력 파형의 주파수: 내부 클럭 주파수 / (2 * 분주비 * (OCRn + 1)

 

3. PWM(Pulse Width Modulation) 모드

ㄱ. 정의: TCNTn의 값이 클럭의 입력에 따라 변화하며 출력 전압을 조절하는 모드

ㄴ. 특징

 a. 디지털에서 아날로그로 변환하기 위해 사용됨

  • CTC 모드도 가능하지만, 매번 OCRn 값을 바꿔야 하는 불편함이 있어 PWM 모드를 사용하는 것이 편함

 b. 비반전 모드에서 출력 비교 시 OCn = 0, 오버플로우 시 OCn = 1 

 c. 반전 모드에서 출력 비교 시 OCn = 1, 오버플로우 시 OCn = 0

 d. OCRn 값이 커지면 주파수가 낮아져 OCn의 출력 파형 주기가 커짐 (OCRn ∝ OCn 출력 파형 주기)

ㄷ. 듀티비(Duty Ratio): Ton/T * 100

 

3-1. 고속(Fast) PWM 모드

ㄱ. 정의: Bottom에서 Max 방향으로 계수하는 모드 

ㄴ. 특징

 a. Phase Correct 모드에 비해 계수하는 속도가 빠르기 때문에 주파수가 높고, 노이즈가 많이 탐

 b. 주기가 고정되어 있고 출력 파형이 비대칭

ㄷ. 듀티비

 a. 반전 모드: (255 - OCR)/256 * 100

 b. 비반전 모드: (OCR+1)*클럭주기 / 256 * 100

 

3-2. 위상 정정(Phase Correct) PWM 모드

ㄱ. 정의: Max까지 증가하고 Bottom으로 감소하는 방향으로 계수 

ㄴ. 특징

 a. Fast PWM 모드에 비해 계수하는 속도가 느리기 때문에 주파수가 작고, 노이즈가 덜 탐

 b. 주기가 고정되어 있고 출력 파형이 대칭적이며 부드러움

ㄷ. 듀티비

 a. 반전 모드: (255 - OCR)/255 * 100

 b. 비반전 모드: OCR/255 * 100


주요 레지스터

 

1. TCCRn

 

ㄱ. 정의: 동작 모드, 분주비, OCn 출력을 설정하는 레지스터

ㄴ. FOC: PWM 모드가 아닐 때 활성화되며, FOC에 1을 쓰면 비교 일치가 강제로 발생

 

 

ㄷ. WGM: 모드를 설정하는 비트 

 

 

ㄹ. COM: 출력 비교 핀 OCn의 동작을 제어하는 비트. 동작 모드에 따라 설정이 바뀜

 

 

ㅁ. CS: 분주비를 설정하는 비트

 

2. TCNTn

 

ㄱ. 정의: 계수값을 설정하는 레지스터

 

3. OCRn

 

ㄱ. 정의: 출력 비교 값을 설정하는 레지스터

 

4. TIMSK

 

ㄱ. 정의: 인터럽트를 개별적으로 허가하는 레지스터

ㄴ. OCIEn: 타이머/카운터n의 비교 출력 인터럽트를 허용

ㄷ. TOIEn: 타이머/카운터n의 오버플로우 인터럽트를 허용

 

반응형