• 카테고리

    질문 & 답변
  • 세부 분야

    임베디드 · IoT

  • 해결 여부

    미해결

pwm 주기 강의 질문드립니다.

23.01.29 23:16 작성 조회수 319

0

PWM 3번째 강의 10분 39초 내용 질문 드려봐요~

ARR 대신 프리스케일러를 변경하여 PWM을 바꾸는 내용이 이해가 잘 안되는데요.

 

  1. TIM2->CCR1 = ARR레지스터 값 / 2를 ARR값이 바뀌지 않는다고 지우셨는데

    while문 전에 초기화에서는 ARR /2를 CCR레지스터에 설정 해줘야하지않나요?

    그래야 50% 토글이 될 것 같아서요.

  2. 추가적으로 CubeMX에서 PWM 설정을 할 때 Internal clock을 선택해주는데

    내부 클락은 정확도가 떨어진다고 들었는데 Internal clock 으로밖에 못하는건가요?

    아니면 PWM 정확도와 내부 클락 선택 여부와는 관계가 없는건가요??

감사합니다~

답변 1

답변을 작성해보세요.

1

안녕하세요.

  1. TIM2->CCR1 = ARR / 2; 를 지워도 동작하는 이유는 이미 강의영상 9분4초에 CubeMX에서 PWM Generation Channel1의 Pulse에 ARR의 반인 84를 초기화 해줬기 때문입니다. 이 값은 한번 초기화되면 그 후 값을 바꾸지 않는다면 PSC를 바꾸더라도 50%의 펄스폭이 유지됩니다.

  2. Timer의 Internal clock에 대해서, 여기서 말하는 Internal clock은 STM32 내부의 RC 발진기가 아니고, 타이머 페리페럴로 공급되는 clock을 의미합니다.
    타이머로 공급되는 clock은 강의 맨 처음 RCC를 설정할 때 HSE (High Speed External) clock으로 설정되었기 때문에, 회로도 상 외부 Crystal 클럭이 입력되고 그게 PLL을 통해 타이머에 168MHz 또는 84MHz로 공급됩니다. 따라서 정확도는 Crystal의 정확도를 따라가겠죠.
    만약 RCC 설정할 때 HSI (High Speed Internal) 로 선택했다면 칩 내부 RC 발진기를 통한 clock이 전체 시스템에 공급되고 타이머 역시 이를 사용하기 때문에 RC 발진기의 정확도를 따라갑니다. 그 경우 정확도가 매우 떨어집니다.

    그리고 Timer의 External 클럭은 타이머의 외부 클럭 입력핀으로 공급된 clock으로 사용하는 기능입니다. 이것은 HSE의 외부 Crystal이나 HSI의 내부 RC발진기와는 다른 입력을 사용하는 경우에 사용하고 특정 타이머의 경우에만 이 기능을 지원합니다.

    즉, 타이머의 내부, 외부 클럭과 시스템에 공급되는 HSE, HSI, LSE, LSI 등은 다른 개념이므로 이걸 이해해두시면 될 것 같습니다.

chltnckd7님의 프로필

chltnckd7

질문자

2023.01.30

우선 빠른 답변 감사드립니다~

1번 질문은 잘 이해한 것 같습니다.

2번에서

타이머가 mcu의 외부 핀에 연결하여 사용하는 클락 : 외부 클락 이고

강의에서 mcu에서 사용 하는 내부 클락을 사용한다는 의미로 Internal clock으로 체크박스에 체크를 한거라고 이해하면 될까요?

 

네 맞습니다.

타이머를 내부클럭으로 동작시키면 RCC 설정에 의해 공급되는 시스템 클럭을 타이머 클럭으로 사용합니다.

타이머를 외부클럭으로 동작시키려면 TIMx_ETR 핀에 클럭을 입력시켜주어야 합니다.