STM32_Tutorial_10 - 8BitsCoding/RobotMentor GitHub Wiki
PWM(Pulse Width Modulation) :
-
์ฒ์ ๊ณต๋ถํ๋ ๋ถ๋ค์๊ฒ๋ ์ข ์ด๋ ค์ธ ์๋ ์๋ ์ฃผ์ ์ธ PWM์ ๋ํด์ ์์๋ณด๊ฒ ๋ค. pulse width modulation ์ ํด์ํด๋ณด๋ฉด ์๋ ๋ก๊ทธ pulse(ํ์ฅ,ํํ)๋ฅผ ๋์งํธ ์ ํธ์ ๋ค๋ชจํ์ฅ์ ๋ชจ๋ํ ํด์ ํ๋ด๋ธ๋ค๋ ๊ฒ์ด๋ค.
-
์ฝ๊ฒ๋งํด ๋์งํธ ์ ํธ๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ก๊ทธ ์ ํธ๋ฅผ ํ๋ด๋ธ๋ค๋ ๋ป์ด๋ค.
์ฃผ๊ธฐ๋ฅผ ๋ฐ์ผ๋ก ๋๋๋ค๋ฉด 2.5V๋ฅผ ์ฃผ๋ ํจ๊ณผ๊ฐ ๋๊ฒ ๋๋ค.
์ฃผ๊ธฐ๋ฅผ 1/4์ผ๋ก ๋๋๋ค๋ฉด ์ฝ 1V๋ฅผ ์ฃผ๋ ํจ๊ณผ๊ฐ ๋๊ฒ ๋๋ค.
์ด๋ฐ์์ผ๋ก ์ ์ดํ๋ ๋ฐฉ์์ ์๋ฏธํ๋ค.
๋ชจํฐ์ ์๋, LED์ ๋ฐ๊ธฐ ๋ฑ์ ์ปจํธ๋กคํ ๋ ์ฌ์ฉ๋๋ค.
์ฐ์ , ํ์ด๋จธ๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง ๋ค์ ์ ๋ฆฌํด๋ณด์.
ARR(Auto Reload Register)์ ํน์ ๊ฐ์ ๋ฃ์ผ๋ฉด ํ์ด๋จธ ํด๋ญ์ ๋ฐ๋ผ ์นด์ดํธ๊ฐ ์ฌ๋ผ๊ฐ๋ฉฐ ๊ทธ ํด๋ญ๊ณผ ARR์ด ๊ฐ๊ฒ ๋๋ฉด ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๊ฒ๋๋ค.
์ฌ๊ธฐ์ Prescaler๋ ํ์ด๋จธ์ ํด๋ญ์ด ๋๊ธฐ์ ๊ทธ ํด๋ญ์ ์กฐ์ ํด์ฃผ๋ ์์น์ด๊ณ
APB1, 2๋ ์์คํ ํด๋ญ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋์ง ๋๋์ด ์ฌ์ฉํ๋์ง ํด๋ญ ํ์ด๋จธ์ ์ธํ ์ด๋ค.
์ฌ๊ธฐ๊น์ง ์ดํดํ์ผ๋ฉด PWM์ ์ดํดํ ์ ์๋ค.
PWM์ญ์ ํด๋ญ์ผ๋ก ๋์ํ๋ฉฐ CCR(Capture Compare Register)๋ฅผ ๋ฑ๋ก ํ ํ์ด๋จธ๊ฐ CCR์ ๋์ฐฉ์ ๋ค์ด์ฃ์งํ๊ฒ ๋๋ค.
์ด๋ฐ์์ผ๋ก ์ปจํธ๋กค์ ์งํํ๊ฒ๋๋ค.
๋ํ STM32 ํ์ด๋จธ ํ ์ด๋ธ ์ค Channels์ PWM์ CCR์ ๋ช๊ฐ๊น์ง ์ธํ ์ด ๊ฐ๋ฅํ์ง์ ๊ดํ ๊ฐ์ด๋ค.
STM32F4์ ๊ฒฝ์ฐ Channels๊ฐ 4์ด๋ 4๊ฐ๊น์ง ์ธํ (CCR1 ~ CCR4)์ด ๊ฐ๋ฅ
์ฝ๋๋ฅผ ๋ง๋ค์ด๋ณด์
CubeMX ์คํ
LED๋ฅผ Timer12 CH1๋ก ์ค์
Timer12์ ์ธํ ์ ๋ค์๊ณผ ๊ฐ์ด ๋ฐ๊พผ๋ค.
Configure -> Control -> TIM12๋ฅผ ๋๋ฅธ๋ค.
Project -> Generate Code
์ฝ๋๋ถ์
// main
HAL_TIM_PWM_Start(&htim, TIM_CHANNEL_1);
// ์๊ฑธ๋ก ์ด๊ธฐํ๋ง ํด์ฃผ๋ฉด ์ฌ์ฉ์ด๊ฐ๋ฅ!
ํ์คํญ์ ๋ณ๊ฒฝํ๊ณ ์ถ๋ค๋ฉด??
while(1)
{
uint16_t ccr = 0;
__HAL_TIM_SET_COMPARE(&htim, TIM_CHANNEL_1, ccr);
}