pwm datasheet 분석
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