안녕하세요?
오늘은 Timer 기능 중 Input Capture기능에 대해 다뤄보겠습니다.
위의 그림을 보시면 Input Caputure를 쉽게 이해하실 수 있습니다.
외부에서 들어오는 신호를 받을 떄 Timer를 통해 주기 및 주파수를 파악할 수 있는 기능입니다.
Input Caputre 기능으로 Rising Edge, Falling Edge, both를 선택하여 각 Edge가 감지합니다.
갑지 시 TIMER CNT의 값을 CCR에 저장하게 됩니다.
CCR을 통해 언제 신호가 들어왔는지 확인이 가능합니다.
Input Caputre의 기능을 확인하기 위해서 입력신호가 필요합니다.
PWM신호를 입력신호를 사용하기 위해 STM32CubeMX로 PWM을 설정합니다.
저는 1s주기와 50% Duty비를 갖도록 위처럼 설정을 했습니다.
(PWM의 자세한 내용은 Timer(General Purpose - PWM을 확인해주기 바랍니다.)
한 핀에서 Rising Edge, Falling Edge를 감지하기 위해 CH1, CH2에 Input Capture 기능을 설정했습니다.
신호를 감지 시 인터럽트 발생을 통하여 Callback함수를 호출합니다.
Rising Edge 감지 시 ic1Value에 CCR값을 저장시키고 CNT를 초기화 해줍니다.(초기화 시켜주는 이유는 주파수와 Duty비를 편하게 측정하기 위해서 입니다.)
Falling Edge 감지 시 ic2Value에 CCR값을 저장시키고 ic1Value와 ic2Value를 이용하여 입력된 신호의 Duty비와 주파수를 구합니다.
printf를 통하여 구한 Duty비와 주파수를 출력합니다.
저는 IAR를 이용하여 Terminal로 확인을 하였습니다.
직접 확인해 보시면 입력된 Duty비와 주파수는 살짝 오차가 생기는 것을 볼 수 있습니다.
이는 제가 HSI를 이용하여 Clk을 생성했기 때문입니다.(HSI는 클럭 발생 시 정밀하지 못하고 오차가 생깁니다. 정밀한 측정을 위해서 HSE를 사용해주시면 됩니다.)
감사합니다.