STM32F091RC PWM목차
- STM32F0XX CUBEMX로 PWM클럭 설정하기
- STM32F0XX PWM 코드 작성하기
- STM32F0XX PWM 설정 부록 설명 (현재 포스트)
- STM32F0XX PWM Duty 조절하기
설정 포스팅 보신 분들은 아마 설정만 보아서는 바로 이해가 안가시는 분들도 계시리라 생각합니다.
- Prescaler : 분주기니 뭐니 이야기를 하는데, 그냥 간단히 클럭을 나누는것이다. 이를테면 48Mhz는 이므로 매우 주파수가 높다. 육안으로 PWM제어하는 것을 보고 싶다면 속도를 느리게 해줄 필요가 있다. 그래서 48000으로 나누어 1000hz로 동작하게 설정하였다.
- Counter Mode : 카운터가 0부터 올라가게 할 것인지, 끝에서 내려가게 할 것인지를 설정한다.
- Counter Period : 카운터의 주기를 정하는 것이다. 1000hz를 1초에 1주기로 돌게 하고 싶다면 1000으로 설정하고, 1초에 10번 주기를 돌게하고 싶다면, 100을 입력한다. 즉, TIM Clock / Prescaler / Counter Period = 한 주기
라고 보면 될 것이다. 나는 1초 간격의 주기를 가지게 하고 싶으므로 1000으로 설정하였다. - auto-reload preload : PWM 신호를 계속 반복해서 생성하고 싶으면 Enable, 아니면 Disable이다. 난 반복해서 보고싶어서 Enable로 하였다.
바로 위부분을 더 설명하고자 한다.
발로 그린 그림으로 설명하려니 쑥쓰럽다
Prescaler의 값을 48000으로 하면 48Mhz/48000이므로 1000hz의 주파수를 가지는 것을 알 수 있다.(엄밀히 이야기하면 0부터 시작하므로 47999로 설정하는 것이 맞다)
이 말은 카운터 1이 증가하는데 소요되는 시간이 초라는 의미다.
Counter Period는 그 카운터의 상한선을 지정하는 개념에 가깝다.
1000으로 놓는다면 카운터가 1000까지 도달할때까지 소요되는 시간은, 즉 1초이다. (엄밀히 이야기하면 0부터 카운터를 시작하므로 999로 설정하는 것이 맞다)
따라서 정확하게 설정한다면, Counter Period는 999로 설정하여야 한다.(이하 Counter Period가 999로 설정했다고 가정)
카운터가 999가 넘어가면 다시 카운터가 0으로 돌아간다. 이 상황을 반복하므로, 해당 설정에서 PWM의 주기는 1초라고 볼 수있다.
- Pulse : 듀티를 설정할 수 있다. Counter Period가 1000이라면, 500으로 해야 50%로 설정이 되는 셈이다.
위의 경우도 간단하다. 전체 카운터가 0~999까지므로 499로 설정하면 전체 50%의 듀티를 차지하므로 0.5초 간격으로 토글이 될 것이다.
끝.