카테고리 없음

[STM32 (ARM Cortex - M)] PWM & Input Capture Mode

WorkKing 2023. 2. 5. 20:02

ARR(Auto-Reload Register) 는 PWM을 사용할 때 더욱 중요하게 사용된다.

 

ARR이 1000이고 듀티사이클을 50%로 설정해주려면 그냥 PWM의 Pulse를 500으로 설정해주면 된다. 25%는 250, 75%는 750. 그래서 보통은 듀티사이클을 계산하기 쉽게 ARR을 100 또는 1000 또는 255 같이 딱 떨어지는 값을 사용하거나, 좀 더 세밀한 조정이 필요한 경우에는 더 큰 값을 사용하는 것 같다.

 

그리고 위 설정에서 PWM mode 1로하면 한 주기 내의 펄스폭 동안 HIGH이고 주기 내의 나머지 시간은 LOW상태가 유지되고, PWM mode 2로 하면 HIGH / LOW 상태가 반대이다.

 

https://deepbluembedded.com/stm32-pwm-example-timer-pwm-mode-tutorial/

 

Clock 설정은 아래와 같다.

 

TIM1은 APB2에서 클락소스를 공급받음.

주파수를 50Hz로 맞추고 Pulse Width는 Sorce Code내에서 수정한다.

TIM2은 APB1에서 클락소스를 공급받음.

PSC를 90-1로 해서 1us 로설정한다.

Input Capture Channel에서 하나는 Rising Edge 하나는 Falling Edge로 설정한다.

 

TIM2의 인터럽트 켜기

 

Uart 설정

Source Code

 

 while문 위에서 TIM1의 CCR1 값을 125로 세팅해서 듀티비를 125/1000*100=12.5%로 맞춰줬다. 각자 PWM 과 IC 채널 1,2 인터럽트를 스타트한다.

 

인풋캡쳐 콜백함수 내에서 DutyCycle과 Frequency를 측정한뒤 while문 안에서 출력하는데 IC_Val1과 IC_Val2는 us 단위에서 ms 단위로 바꿔서 출력한다.