PWM 사용하여 Buzzer 동작시키기

2022년 02월 25일 by 진아사랑해

    PWM 사용하여 Buzzer 동작시키기 목차
반응형

사용하는 부저는 Passive 소자로 4KHz로 동작하며 duty는 50%를 사용한다

사용하는 Pin은 PF8로 TIM13번을 사용한다

 

TIM13이 사용하는 주파수는 90MHz를 사용하고 16bit resolution을 갖는다

 

4KHz를 만들기 위해 90M/4Kz = 22500의 값이 나온다

PWM Pulse의 resoultion을 좋게 만들기 위해

Prescaler는 10 - 1로 한다 즉, 클럭이 10개가 지나가야 counter가 1 올라간다

Counter Period(AutoReload Register(ARR))는 2250 -1로 설정한다 즉, 2250개의 카운터가 지나가면 PWM의 한 펄스가 종료된다.

auto-reload preload는 Enable로 되어야 한다(기본 설정이 enable이다)

Pulse(Capture/Compare Register(CCR))는 duty를 나타내며 50%로 만들려면 Counter Period/2의 값을 넣으면 된다

CH Polarity는 PWM 펄스가 High에서 시작하여 Pulse가 지나면 Low로 반전된다

     Low로 변경하면 Low에서 시작한다

 

이렇게 하면 CubeMX에서 하는 설정은 끝난것이다

 

PWM을 시작시키기 위하여 프로그램에서

PWM 파형이 출력되기를 원하는 곳에 이 문장이 있어야 실체 출력이된다

TIM_CHANNEL_1은 CubeMX 설정에서 CH1을 선택하였기 때문이다

 

PWM을 중지시키기 위하여 프로그램에서

이 문장을 실행하면 된다

 

프로그램에서 duty를 변경하기 위해서는

__HAL_TIM_SET_COMPARE(&htim13, TIM_CHANNEL_1, xxx) 여기서 원하는 CCR(또는 Pulse) 값을 xxx에 넣어주면 된다

TIM13->CCR1= xxx 에 직접 입력하여도 된다.

 

혹시 프로그램에서 ARR 값을 변경하고 싶으면 TIM13->ARR에 값을 넣어주면 된다

 

 

반응형