공부,일/Arm

pwm datasheet 분석

fromnothing1 2021. 9. 6. 13:29

 

 

at91sam7s mcu 는 4개의 pwm 채널을 가지고 있다. 

 

그림을 보면 , pwm 칩 내부에 자체적으로 카운터가 존재하고 , 비교기 , 등이 모두 존재한다. 

 

 

pmc 에서 사용하는 클럭의 경우 2가지 경우를 사용할 수 있다. 

 

1. mck 로부터 오는 클럭을 분주기로 분주한 값 

2. clkA,clkB 값 ( 분주하고 divder 로 한번더 나뉜값)

 

위 그림의 표를 보면 클럭을 mck를 분주해서 사용할지 , 내가 설정한 clkA,clKB 값을 쓸지 정 할 수 있다. 

 

 

그림을 보면 알수 있다 싶이  pwm 은 2가지 모드가 존재한다. 따라서 각각의 경우에 duty 구하는 법이 달라진다. 

1. center aligned 

2. left aligned 

 

하지만 pwm 이 동작하는법은 동일히다. 

분주비로 나뉘어진 클럭이 들어올때만다 카운터가 증가한다.  CPRD 값까지 증가하다가 left aligned  일때는  카운터가 reset 되고 center aligned  일때는 1씩 줄어든다. 

 

output 의 경우는 카운터가 증가하다가 , 카운터의 값이 CDTY 값보다 커질때 출력이 이루어진다. 

 

인터럽트(PWM_ISR) 의 경우 카운터의 값이 0으로 reset 될때마다 인터럽트 신호가 발생하고 있다. 

 

 

초기화 -  pwm 실행하기전 에 해줘야하는거 

 

1. DIVA , DIVB 쓸 건지 선택

2. 각각의 채널에 클럭 선택 (CPRE field in the PWM_CMRx register)

3. center aligned , left aligned 둘중에 선택(CPRE field in the PWM_CMRx register)

4. 주기 선택하기 (CPRD in the PWM_CPRDx register) , pwm 이 동작중일때는 PWM_CUPDx ( 업데이트용) 레지스터를 이용해서 업데이트 

5. 듀티 비 정하기 (CDTY in the PWM_CDTYx register) , 동작중일때는 PWM_CUPDx를 통해서 업데이트 

6. 파형 정하기 CPOL in the PWM_CMRx register)

7. 인터럽트 켜기 (Writing CHIDx in the PWM_IER register)

8. PWM 실행 (Writing CHIDx in the PWM_ENA register)

 

주의 - CDTY  는 0 보다 크고 CPRD 보다 작다 . (ex CPRD  = 15 , 0 < CDTY  < 15)

업데이트 과정

CPRD CDTY 모두 PWM_CUPDx  레지스터를 이용해서 업데이트 된다. 

PWM_CMRx 레지스터를 읽어서 1 이면 CPRD  값을 업데이트 하고 , 0 이면 CDTY 값을 업데이트 한다. 

 

레지스터 

 

 

 

 

 

 

 

 

 

https://wowcat.tistory.com/2307

 

20150911-11번-남수진 - 센서(초음파센서) / ARM(PWM)

센서 초음파 센서 초음파의 진행속도 : 331.5 + (0.607*t) m/s t : 온도 상온에서의 속도 : 약 346m/s 초음파가 어떤 거리를 왕복하는 시간 시간 = 이동거리/속도 예) 초음파가 10cm 거리를 왕복하는데 소요

wowcat.tistory.com