타이머란
- 주기적 시간 처리에 사용하는 디지털 카운터 회로 모듈
- 펄스폭 계측, 주기적인 interrupt 발생 등에 사용
- 주파수가 높기 때문에 우선 prescaler를 사용하여 주파수를 낮춘 후 낮아진 주파수로 8,16비트 등의 카운터 회로를 사용하여 주기를 얻는다.
- STM32 타이머 종류
- SysTick Timer
- Watchdog Timer
- Advanced-control Timer (TIM1, TIM8)
- General-purpose Timer (TIM2 ~ TIM5)
- Basic Timer (TIM6, TIM7)
Systick Timer
Real-time operating system 전용이지만 standard down counter로 사용 할 수도 있음
- 24bit down counter
- Autoreload capability
- Counter가 0에 도달하면 설정에 따라 인터럽트가 발생
- Programmable clock source
IWDG/WWDG Timer-Watching timer
WATCHDOG(WDG)은 임베디드 시스템 등 특수 상황에서 CPU가 올바르게 작동하지 않을 시 강제로 리셋시키는 기능을 의미한다
- IWDG/WWDG는 모두 소프트웨어 고장으로 인한 오작동을 감지하고 해결하는 역할을 한다.
- 카운터가 주어진 시간 초과 값에 도달했을 때 시스템 재설정 또는 인터럽트(only WWDG)를 트리거한다.
- IWDG
- IWDG는 LSI 클럭 기반으로 메인 클럭 고장에도 활성 상태 유지 가능
- 타이밍 정확도 제약이 낮은 애플리케이션에 적합하다.
- 카운터가 0이 되면 Reset
- WWDG
- 7-bit down counter
- WWDG의 클럭은 APB1 클럭을 프리스케일해서 정의 가능
- 비정상적 어플리케이션 동작 감지를 위해 설정 가능한 time-window가 있다.
- Time-window 내에서 반응하도록 요구하는 애플리케이션에 적합하다.
- 카운터가 0x40 보다 작을 경우 또는 카운터가 Time-window 밖에 Reload 됐을 경우 Reset 가능하다.
- Early wakeup interrupt (EWI) : 카운터가 0x40과 같을 때, EWI 인터럽트 발생하게 설정 가능하다.
Advanced-control timers (TIM1 & TIM8)
- The advanced-control timers는 prescaler를 이용해 설정 가능한 16-bit auto-reload counter를 포함하고있다.
- 입력 신호 펄스 길이 측정(input capture) 또는 출력 파형 생성(output compare, PWM, complementary PWM with dead-time insertion) 등에 사용 가능하다.
- The advanced-control (TIM1&TIM8) and general-purpose (TIMx)는 자원을 공유하지 않는 독립적인 구조이며, 동기화 시키는 것도 가능하다
Basic timer (TIM6 & TIM7)
- 16-bit auto-reload 업카운터
- 설정 가능한 16-bit prescaler를 이용해 the counter clock 주파수를 나눠서 설정 가능
- DAC 트리거에 사용
- 카운터 오버플로우 발생 시 인터럽트/DMA 생성
General-purpose timers (TIM2 to TIM5)
- General-purpose timer은 prescaler를 이용해 설정 가능한 16-bit up, down, up/down auto-reload counter를 포함하고 있다.
- 입력 신호의 펄스 길이 측정(input capture) 또는 출력 파형 발생(output compare and PWM) 등 다양한 용도로 사용할 수 있다.
- 펄스 길이와 파형 주기는 timer prescaler와 the RCC clock controller prescaler를 사용하여 몇 μs에서 몇 ms까지 변조할 수 있다. 타이머들은 완전히 독립적이며, 어떤 자원도 공유하지 않으나 동기화 가능하다
- 분주란 MCU에서 제공하는 Frequency를 우리가 사용하기 쉬운 값으로 바꾸어 주는 것을 말합니다.
- Counter clock frequency 를 1~65536의 값으로 나누기 위해 16-bit programmable prescaler사용
- period 로 몇 번 count하는지 설정
PWM(Pulse Width Modulation)
일정한 주기 내에서 Duty ratio를 변화 시켜서 평균 전압을 제어하는 방법
ex) 0~5V의 전력 범위에서 2.5V 전압을 가하고 싶다면, 50% 듀티 사이클 적용
대부분의 서보모터는 50Hz ~ 1000Hz 의 주파수를 요구하고
데이터 시트를 반드시 확인해서 사용해야함.
STM32보드 PWM 신호 예시
TIM3의 채널 3 사용 예시
- PB0를 사용해야하며, Alternate function사용 (다른 채널 사용시 다른 핀을 사용해야함.)
'Project > 나만의 주점(STM32,Arduino,android)' 카테고리의 다른 글
나만의 주점.. (0) | 2022.12.29 |
---|---|
STM32- DMA (0) | 2022.12.16 |
STM32- LCD 및 ADC (0) | 2022.12.16 |
STM32-블루투스 (1) | 2022.12.16 |
STM32- Interrupt 방싱을 활용한 GPIO 제어 및 UART 통신 (0) | 2022.12.16 |