- 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에 값을 넣어주면 된다
'STM32' 카테고리의 다른 글
tVOC의 ppm, ppb, mg/m3 (0) | 2022.06.07 |
---|---|
[touchGFX]touchGFX 열기(open)할 때 경고(warning) (0) | 2022.03.03 |
[touchGFX] 와일드 카드 Text 색상 변경 (0) | 2022.02.23 |
[touchGFX]버튼 클릭시 작업을 수행하고 화면 전환(change screen) (0) | 2022.02.18 |
[touchGFX]View에서 변경된 값을 Model로 전달 순서 (0) | 2022.02.09 |