안녕하세요?
오늘은 Timer 기능중에 Output Compare의 기능을 다뤄보겠습니다.
Output Compare의 기능은 카운터 값이 CCR값과 동일할 때 인터럽트를 발생시키는 기능입니다.
위에 그림을 보시게 되면 Auto Reload Register와 Capture Compare Regiser가 각각 42000, 21000으로 설정된 것을 볼 수 있습니다.
만약 인터럽트 발생이 되었을때 출력을 On -> Off , Off - > On으로 토글시키면 이해하시기 편하실 껍니다.
일반 타이머 인터럽트는 CNT값이 42000이 되면 인터럽트가 발생되지만 OC모드 타이머 인터럽트는 21000일 떄 발생합니다.
그러므로 아래에 출력을 보시게 되면 위상차이가 발생하는 것을 볼 수 있고 OC타이머를 이용하여 인터럽트 발생 시점을 변경할 수 있다는것을 알 수 있습니다.
Timer3을 이용하여 Ouput Compare를 다루기 위해 위 그림과 같이 설정을 해줍니다.
CH2에 Output Compare를 설정하였고 ARR은 9999로 Prescaler는 1599로 설정하였습니다.
여기서 중요한점은 Pulse부분입니다.
Pulse 부분의 값으로 CCR값을 정하기 때문에 저는 ARR의 중간 부분에 인터럽트 발생시키기 위해 Pulse를 4999로 설정하였습니다.
위에 그림 < Output Compare 개념 >부분처럼 파형을 발생시키기 위해 코드를 작성하였습니다.
먼저 타이머 인터럽트 발생하였을 떄 HAL_TIM_PeriodElapsedCallback 함수를 호출하기 때문에 이 때 마다 출력을 on/off를 반복시키는 토글기능을 작성하였습니다.
Output Compare 모드 인터럽트 발생하였을 때 HAL_TIM_OC_DelayElapsedCallback 함수를 호출하며, 이부분은 위와 같이 작성을 하였습니다.
출력 결과를 오실로스코프를 확인을 하면, 위와 같이 그림이 나오게 되며 위에 그림 < Output Compare 개념 >의 그림처럼 위상차이가 발생하는것을 확인하였습니다.
감사합니다.