PWM이라는 것은 구형파의 듀티비(duty ratio)를 조절하는 것을 의미한다. 듀티비란 구형파의 주기와 ‘1’이 되는 구간의 시간비율을 의미한다. 다음 [그림 1]에서 T는 주기, t1은 한주기에서 ‘1’이 되는 시간을 표기하는데 듀티비는 t1/T 로 정의된다.


[그림 1] PWM과 듀티비


ATmega8(A)의 T/C2는 두가지 PWM발생 모드를 가지고 있는데 하나는 고속PWM모드이고 다른 하나는 위상교정PWM 모드이다. 이 두 가지에 대해서 각각 알아보겠다.

고속 PWM 모드

 고속 PWM모드는 TCNT2레지스터가 노멀모드에서와 같은 동작을 한다. 즉, 0x00에서 0xFF까지 1씩 증가하다가 그 다음 사이클에서 다시 0x00으로 클리어된 후 다시 1씩 증가한다. 이 때 ① TOV2 플래그가 세트되며 ②비교매치시 OC2 플래그도 세트된다. OC2 핀은 COM21:0 비트들의 설정에 따라서 동작이 결정되는데 ①의 경우에 세트되고 ②의 경우에 리셋 되거나 혹은 반대의 동작을 취할 수 있다.([표 1] 참조) 데이터쉬트에서 [그림 1]에 고속 PWM모드의 타이밍 다이어그램을 발췌하였다.


[그림 2] 고속 PWM 모드에서의 타이밍 다이어그램


[표 1] 고속 PWM 모드일 때 비교 출력핀(OC2핀) 동작

COM21

COM20

OC2핀의 동작

0

0

포트핀(PB3)으로 동작

0

1

-

1

0

TCNT2=0x00일때 OC2핀 셋,

비교매치시 OC2핀 리셋

1

1

TCNT2=0x00일때 OC2핀 리셋,

비교매치시 OC2핀 셋


OC2핀으로 발생하는 PWM파형의 주기는 다음 식과 같이 계산할 수 있다.

여기서 N 은 분주수를 나타내며 1, 8, 32, 64, 128, 256, 1024 중 하나이고, fTC2는 T/C2에 인가되는 클럭 주파수이다.


 한 가지 유용한 사실은 오버플로우 인터럽트와 비교매치 인터럽트를 이용하면 임의의 포트핀에 PWM파형을 발생시킬 수 있다는 점이다. 즉 해당하는 ISR() 함수 내부에서 원하는 포트핀을 셋시키거나 리셋시켜서 OC2핀 뿐만 아니라 임의의 포트핀에 PWM파형을 발생시킬 수 있다.


위상 교정 PWM 모드

 위상교정PWM 모드가 고속PWM 모드와 다른 점은 TCNT2레지스터가 0에서 0xFF값에 도달한 후(업-카운팅) 0x00으로 클리어되는 것이 아니고 1씩 감소하여 다시 0x00이 된다(다운-카운팅)는 점이다. 이때 비교매치는 두 가지 경우인데 업 카운팅의 경우와 다운 카운팅의 경우이다. PWM파형은 업-카운팅에서 비교매치가 일어난 경우 OC2핀을 ‘1’로, 다운-카운팅에서 비교매치가 일어난 경우 OC2핀을 ‘0’으로 설정하여 PWM파형을 발생시킨다. (혹은 그 반대의 모양으로 발생시킬 수 있다.)


[그림 3] 위상 교정 PWM 모드의 타이밍 다이어그램


OC2핀으로 발생하는 PWM파형의 주파수는 고속 PWM의 경우보다 두 배 줄어들며 다음 식과 같이 계산할 수 있다.

여기서 N은 분주수를 나타내며 1, 8, 32, 64, 128, 256, 1024 중 하나이다.


[표 2] 위상 교정 PWM 모드일 때 비교 출력핀(OC2핀) 동작

COM21

COM20

OC2핀의 동작

0

0

포트핀(PB3)으로 동작

0

1

reserved

1

0

업카운팅에서 비교매치시 OC2핀 리셋

다운카운팅에서 비교매치시 OC2핀 셋

1

1

업카운팅에서 비교매치시 OC2핀 셋

다운카운팅에서 비교매치시 OC2핀 리셋


고속 PWM모드에서와 마찬가지로 두 개의 인터럽트를 이용하면 위상교정 PWM파형도 임의의 포트핀으로 내보낼 수 있다. 단, 이번에는 앞의 경우와 달리 비교매치 인터럽트가 업-카운팅에서 발생했는지 다운-카운팅에서 발생했는지를 판별해야 할 것이다. 이것을 위해서 [그림 3]을 살펴보면 오버플로우 인터럽트는 다운-카운팅에서 0x00에 도달한 경우에 발생하는 것을 알 수 있다. 따라서, 오버플로우 인터럽트가 발생한 이후 첫 번째 비교매치 인터럽트는 업-카운팅에서, 두 번째 비교매치 인터럽트는 다운-카운팅에서 발생한 것으로 판정해야 하므로 조건 검사를 하는 코드가 앞의 경우에 비해서 더 추가가 되어야 할 것이다.




Posted by 살레시오

댓글을 달아 주세요