타이머에 대해 알아보기에 앞서 주기, 주파수, 펄스, 클락, 카운터 개념을 먼저 알아보았습니다.
⏰ 개념 정리
주기
0에서 특정 값(1 또는 -1)으로 변했다가 다시 0으로 변하는 데 걸리는 시간(단위 : s, ms 등의 시간 단위)
주파수
1초 당 몇 번이나 0과 1이 변경되었는지 횟수를 나타냄(e.g. 84 MHz -> 1초에 84 x 1,000,000번 0과 1이 반복)
주기와 주파수는 아래와 같은 관계를 가진다.
펄스
펄스는 신호나 에너지의 변화를 말하며 병원 또는 드라마에서 보았던 심장박동 그래프가 대표적인 예시이다.
펄스는 신호에 따라 여러 모양을 가질 수 있으며 모양에 따라 여러 종류로 나뉘게 된다.
클락
클락은 논리상태 H(high, 1)와 L(low, 0)이 규칙적(주기적)으로 아래와 같이 나타나는 구형파 펄스 신호를 말한다.
주파수와 세기(Voltage)에 따라 간격과 높이가 달라질 수 있으나 모양은 변하지 않는다.
위에서 알아본 4가지로 타이머와 카운터에 대해 알아보았습니다.
⏰ 타이머, 카운터
타이머 : MCU 내부에서 발생하는 클락에서 0 -> 1로 변환 횟수를 새는 장치
카운터 : MCU 외부에서 입력되는 클락에서 0 -> 1로 변환 횟수를 새는 장치
(※ 8비트 타이머, 카운터란 00000000 -> 11111111 2^8인 0 ~ 255까지 카운트가 가능한 타이머이다.)
※ 타이머, 카운터에서 클락을 측정함을 통해 우리는 특정한 순간에 원하는 기능을 동작시킬 수 있다.
⏰ STM32 F429Zi Timer 살펴보기
STM32 F429ZI의 CPU Timer 블록 다이어그램을 보면 TIM1 ~ TIM14 총 14개의 타이머가 12개의 16비트 타이머와
2개의 32비트 타이머로 구성되어 있다.
(※ MCU 내부에서 발생하는 클락이므로 이들은 카운터가 아닌 타이머이다.)
Timer 1, 8, 9, 10, 11 총 5개의 타이머는 APB2(168MHz)에
Timer 2, 3, 4, 5, 6, 7, 12, 13, 14 총 9개의 타이머는 APB1 Clock(84MHz)에 연결되어 있다.
Timer는 Advanced Timer. General purpose Timer, Basic Timer 총 3가지로 구분되며 각 타이머들은 위와 같은 특성을
가지고 있다.
(기초적인 동작만 수행할 경우에는 Basic, 다양한 동작이 필요할 경우 General 또는 Advanced를 사용한다.)
HCLK
HCLK는 AHB(Advanced High performance Bus)라고 불리는 버스에(고속으로 동작하는 장치들이 많이 연결되어 있음)에연결된 168 MHz의 주파수를 가지는 클럭 신호이다.
APB1과 APB2는 해당 클럭 신호를 그대로 사용하냐, 주파수를 반으로 줄여 사용하냐로 구분된 타이머이다.
APB1 TIM CLK = HCLK / 2 = 84MHz
APB2 TIM CLK = HCLK = 168MHz
정리하면 f429zi의 경우 주파수 : 84MHz, 168MHz 비트 : 16bit, 32bit 를 가지는 내부 타이머가 존재하며
사용자는 필요한 클럭 신호를 얻기 위해 APB1 또는 APB2 타이머를 제어해야 한다. 제어를 위해
Prescaler 설정을 통해서 펄스의 주기를 제어하고 최종적으로
Counter Period 설정을 통해 몇초마다 카운트될 것인지 설정한다.
Prescaler
Prescaler는 주파수를 조정하는 데 사용되는 장치(회로) 이다.
APB1 소속 타이머의 Prescaler 값을 10^5으로 설정할 시 주파수는 기존 84MHz 에서 840Hz가 되고 주기는
1 / 840 s가 된다. (계산식 -> 84 x 10^6 ÷ 10^5 = 840 Hz)
Counter Period
Counter period는 Prescaler로 주파수가 조정된 펄스에서 클락이 x번 반복 되었을 때 Update Event를 발생시키 개념으로
위에서 예를 들었던 1 / 840s 의 주기를 갖는 펄스의 경우 Counter Period 값을 840으로 설정하면
1 / 840s 주기가 840 번 반복 되었을 때 Update Event가 발생하게 된다. 즉 1초마다 Update(카운트)가 되는 타이머가 된다.
APB1의 경우에 UpdateCycle(단위 s)를 계산하는 식을 정리하면 아래와 같다.
PWM
PWM 이란 주기가 일정한 0과 1로 이루어진 디지털 신호의 Dutycycle(High에 머무는 시간, 아래 그림에서는 5V)을 조절하는 방법이다. 이를 통해 출력 전압을 조절할 수 있게 된다.
하나의 타이머에서 일반적으로 4개의 채널이 존재하며 해당 채널을 통해 PWM 출력을 나타낼 수 있다.
그 후 출력되는 PWM 신호의 Dutycycle을 변경하여 출력 전압을 즉 출력의 세기를 조절할 수 있게 된다.
이를 통해 LED의 밝기, 모터의 속도와 같은 출력값 까지 같이 제어할 수 있게 된다고 이해를 하였다.
'embedded' 카테고리의 다른 글
[stm32] UART 실습 (0) | 2023.08.30 |
---|---|
[stm32] UART 이론 정리 (0) | 2023.08.16 |
[stm32] Timer 실습 (0) | 2023.08.16 |
[stm32] GPIO 실습 (0) | 2023.08.13 |
[stm32] GPIO 이론 정리 (0) | 2023.08.12 |