panda.jpg 


안녕하세요 판다 이우영입니다.


오늘은 pwm에 대해서 이야기 해보려 합니다.

pwm은 led나 모터 제어 등에 많이 사용되는 디바이스입니다.


그럼 pwm이 무엇인지 부터 알아 보도록 하겠습니다.


pwm?



pwm은 Pulse Width Modulation 의 약자입니다.

우리 말로 번역하면 펄스 폭 변조 라고 합니다.


말 그대로 펄스란 넘의 폭을 변조할 수 있는 것입니다.

여기서 펄스가 무엇일까요?



위의 신호를 펄스라고 부릅니다.

위 그림은 아날로그 신호입니다.


우리가 다루는 컴퓨터는 0,1로 구성되어 있기때문에 디지털 신호로 구성되어 있습니다.


02.png



우리가 다루는 신호는 이런식으로 딱딱한 모습입니다.

여기서 반복되는 신호의 하나를 1주기라고 합니다.

그리고  한 주기의 1값이 유지되는 시간(폭)을 변조하는것이 pwm입니다.


조금더 자세히 알고 싶으신 분은 이곳을 한번 보고오세요!

(http://jungbomadang.pe.kr/100015179383)


지금 중요한건 이정도면 충분하니 일단 지나가겠습니다.


v210에서 사용되는 pwm?



자 실제 우리가 제어해야하는 s5pv210에서 pwm을 살펴 보겠습니다.


01.PNG


pwm이 1을 시작으로 동작 할 때 pwm  enable 하면 신호가 0으로 떨어집니다. 

그리고 설정된 카운트 값(TCNB)이 감소하기 시작합니다.

그리고 이값이 TCMP값과 같아지면 신호를 다시 1로 돌아가게 됩니다.

TCNB값이 0이 되면 한번의 주기가 끝나게 됩니다.


중요한 레지스터만 살펴보도록 하겠습니다.

v210에는 4개의 pwm이 있지만 pwm0를 기준으로 설명해 보겠습니다.


03.png


각 pwm은 3개의 레지스터를 가지고 있습니다.

방금 위에서 설명한 TCNB,TCMP 레이스터가 보입니다.

이 2개를 설정함에 따라 신호의 폭과 1 주기의 길이를 결정할 수 있습니다.


그리고 timer control regiser(TCON) 가 있습니다.

여기에도 각 pwm의 설정들이 있습니다.


04.png


위와 같이 4가지가 있습니다.

0번 비트 - 타이머를 동작시키거나 정시시키는 레지스터

1번 비트 - 다음 주기의 레지스터를 자동으로 update 할것인지 결정

2번 비트 - pwm 신호를 0에서 시작할것인지 1에서 시작할것인지 결정

3번 비트 - 신호를 연속으로 만들것인지 한번만 만들것인지 결정



간단하게 레지스터 소개를 끝으로 오늘 이야기를 마무리 하겠습니다.

다음 시간에는 커널에서 pwm 디바이스 드라이버를 사용할 수 있게 바꾸고

그 드라이버를 통해 간단하게 pwm을 제어해 보도록 하겠습니다.

오늘 배운 레지스터를 직접 제어해서도 pwm을 동작시킬 수 있습니다.

직접 해보고싶으신 분은 다음 글을 참고하시길 바랍니다.

(http://forum.falinux.com/zbxe/index.php?document_srl=570903&mid=lecture_tip)