본문 바로가기

개발환경/STM32CubeMX

타이머 설정 - STM32F030F4P6

MCU는 STM32F030F4P6을 사용하였고 관련 데이터 시트는 아래 첨부했습니다.

STM32F030F4P6_Reference Manual.pdf
11.46MB

 

STM32CubeMX 설정

1. Mode

1) Slave Mode

외부 또는 내부 트리거에 반응해서 타이머의 카운터 동작을 제어하는 방식

※ 트리거
어떤 동작을 시작하게 만드는 신호 또는 이벤트를 말한다.

종류 설명 예시
외부 트리거 외부에서 들어오는 핀 신호(스위치, 센서 등) GPIO 핀에서 rising/falling edge
내부 트리거 마이크로컨트롤러 내부 이벤트 다른 타이머의 업데이트 이벤트, ADC 완료 신호 등
소프트웨어 트리거 코드로 직접 발생시킴 HAL_TIM_GenerateEvent()같은 함수로 트리거 유도


Slave Mode 옵션 설명
Disable 슬레이브 모드를 사용하지 않음.
타이머는 자체 클럭으로 자유롭게 동작. 기본 설정.
External Clock Mode 1 외부 신호를 클럭처럼 사용하여 타이머 카운터를 증가시킴.
-> 트리거 입력 상승/하강엣지마다 카운터 증가
Reset Mode 트리거 입력이 들어올 때마다 카운터를 0으로 리셋함.
반복 측정에 유용
Gated Mdoe 트리거 입력이 활성 상태일 때만 카운터가 작동함.
입력이 OFF되면 멈춤
Trigger Mode 트리거 입력이 발생할 때마다 카운터가 시작됨.
일정 이벤트 이후 타이머가 시작되도록 할 때 사용

 

2) Trigger Source

타이머를 작동시키는 조건을 무엇으로 할지 선택하는 항목

Trigger Source 옵션 의미 설명
Disable 비활성화 트리거 소스를 사용하지 않음.
내부 클럭 등으로 독립 실행.
ITR0 ~ ITR3 내부 트리거 다른 타이머의 이벤트를 트리거로 사용함
ETR1 외부 트리거 입력 외부 핀(TIMx_ETR)에 들어오는 신호를 트리거로 사용
TI1_ED TI1 엣지 디텍트 TIMx_CH1 핀의 상승 + 하강 엣지를 트리거로 사용
TI1FP1 필터된 TI1 CH1 핀의 입력을 디지털 필터 후 트리거로 사용

 

3) Clock Source

기본 클럭 공급원을 선택하는 항목

Clock Source 옵션 의미 설명
Disable 클럭 없음 타이머에 클럭이 공급되지 않아 동작하지 않음
Internal Clock 내부 클럭 사용 타이머는 시스템 클럭에서 분주된 내부 클럭을 사용하여 작동
ETR2 외부 클럭 입력 사용 외부 핀(TIMx_ETR)을 통해 클럭 펄스를 받아 그 펄스에 따라 카운터를 증가시킴(타이머를 외부 신호에 동기화하고 싶을 때 사용)

 

4) Channel

하나의 타이머 내에서 독립적인 기능을 수행할 수 있는 "하위 타이머 유닛"으로 하나의 타이머로 최대 4가지 다른 동작을 동시에 수행할 수 있다.

Input Capture 옵션 설명
Input Capture direct mode 외부 입력 신호의 상승/하강 엣지를 감지하여 캡처
(입력 시간 측정)
Input Capture indirect mode 보조 채널을 이용한 간접 캡처 모드
(잘 사용되지 않음)
Input Capture triggered by TRC 내부 트리거에 의해 캡처
(다른 타이머나 이벤트가 트리거 역할)
Output Compare 옵션 설명
Output Compare No Output 비교 일치 시 아무 동작도 하지 않음
Output Compare CH1/CH1N 비교 일치 시 해당 채널 핀에 출력 발생
Output Compare CH1 CH1N CH1과 CH1N 양쪽 채널을 동시에 사용
PWM Generation 옵션 설명
PWM Generation CH1 일반적인 PWM 출력
PWM Generation CH1N Complementary(보완) 출력 사용
PWM Generation CH1 CH1N 두 채널 동시에 사용(일반 + 보완 출력)
Forced Output 옵션 설명
Forced Output CH1 소프트웨어로 강제로 출력 High/Low를 설정
Forced Output CH1N 위와 동일한 보완 출력용
Forced Output CH1 CH1N 둘 다 제어

 

5) Combined Channels

둘 이상의 채널을 함께 묶어 특수한 기능을 수행하도록 하는 설정

Combined Channels 옵션 설명
Disable 결합 채널 기능 사용 안 함
Encoder Mode 2채널을 사용하여 쿼드러터 인코더의 회전 방향과 속도 측정
PWM Input on CH1 외부 PWM 신호를 CH1으로 입력받아 주기와 듀티비 측정
PWM Input on CH2 PWM 측정을 CH2로 수행(CH1과 동일한 원리)
XOR ON / Hall Sensor Mode CH1~CH3 세 채널의 XOR 결과를 캡처
(홀 센서나 BLDC 모터 위치 감지에 사용)

 

6) One Pulse Mode

외부 입력이 인가될 경우 이로부터 일정 시간이 지난 후에 펄스를 1번 발생시키는 모드로 펄스가 발생하는 시간과 지속하는 시간은 프로그래밍이 가능하다.

 

2. Configuration

1) Parameter Settings

그림1

① Prescaler(PSC)

타이머에 공급하는 입력 클럭의 속도를 조절한다.

분주기라고도 하는데 분주기라는 말 자체가 의미하듯이 클럭을 쪼갠다는, 즉 속도를 느리게 한다는 의미이다.

위 그림1처럼 1000을 나누려고 한다면 -1을 해줘야 한다. 그 이유는 0부터 시작이기 때문이다(0~999).

그리고 이 말은 클럭을 1000번 보내면 카운터를 1개 올리겠다는 뜻이 된다.

 

② Counter Mode

여기서는 카운터의 값이 증가하면서 카운팅을 하는 업 카운팅 모드를 선택했다.

범용 카운터의 모드

1. 업 카운팅 모드
카운터의 값이 증가하면서 카운팅을 하는 모드
카운터 CNT = 0부터 시작해서 CNT = ARR값까지 증가한 후 다시 0부터 카운팅을 시작하는 작업을 계속하여 반복 실행한다.
CNT = 0이 될 때 오버플로우, 업데이트 이벤트와 업데이트 인터럽트가 발생한다.

2. 다운 카운팅 모드
카운터의 값이 감소하면서 카운팅을 하는 모드
카운터 CNT = ARR부터 CNT = 0까지 감소한 후 다시 CNT = ARR부터 카운팅을 시작하는 작업을 계속하여 반복 실행한다.
CNT = ARR이 될 때 언더플로우, 업데이트 이벤트와 업데이트 인터럽트, 업데이트 인터럽트 플래그가 발생한다.

3. 업/다운 카운팅 모드
카운터의 값이 증가한 후 다시 감소하면서 카운팅을 하는 모드
카운터는 0부터 ARR값까지 증가한 후 다시 0까지 감소
이후에 동작으로는 증가->감소->증가->감소 계속 반복하면서 카운팅
업 카운팅 동작 시 CNT = ARR이 되면 오버플로우, 업데이트 이벤트, 업데이트 인터럽트가 발생한다.
다운 카운팅 동작 시 CNT = 0이 되면 언더플로우, 업데이트 이벤트, 업데이트 인터럽트가 발생한다.
업/다운 카운팅 모드를 Center Aligned 모드라고 한다.

4. 입력 캡쳐(Input Capture) 모드
외부의 입력 값이 들어오는 순간 그 때의 카운터 값을 캡쳐하는 동작을 하는 모드

5. 출력 비교(Output Compare) 모드
카운터의 출력 값이 캡쳐/비교기에 설정된 비교값(CCRx)과 일치할 때 인터럽트나 해당 핀에 출력이 발생하는 모드

6. PWM 출력 모드
펄스 폭을 변조하여 출력하는 모드

7. 원 펄스(One Pulse) 모드
외부 입력이 인가될 경우 이로부터 일정 시간이 지난 후에 펄스를 1번 발생시키는 모드로 펄스가 발생하는 시간과 지속하는 시간은 프로그래밍이 가능하다.

 

③ Counter Period(Auto Reload Register: ARR)

카운터를 어디까지 올릴지 결정한다. 이 말은 주기를 결정할 수 있다는 말이다.

예를 들어 4800이라고 하면 카운터는 0부터 4799까지 돌고 다시 0으로 돌아간다. 

그림1처럼 지금까지 Prescaler와 Counter Period를 각각 (1000 - 1), (4800 - 1)으로 설정했다.

이를 정리하면 아래와 같다.

Counter Period는 카운터가 0부터 4799까지 올라가는 것을 뜻한다. 즉 4800개의 단계를 만든다는 뜻이다.

그런데 한 단계가 올라가려고 하면 클럭 한 번이 뛸 때 올라가는 것이 아니고 클럭이 1000번이 뛰면 카운터 1이 올라가는 것이다.

그리고 4799가 되면 다시 0으로 돌아온다.

즉, 여기서 APB는 48MHz로 1초에 48,000,000번을 뛴다.

그런데 Prescaler가 999이므로 카운터가 1 올라가는데 1000번을 뛴다(0부터 999이므로).

그리고 Counter Period가 (4800 - 1)이므로 카운터는 0 ~ 4799까지 올라갔다 다시 0으로 돌아온다.

정리하면 내가 설정한 카운터가 0 ~ 4799까지 가는데 1000 * 4800을 뛰어야 한다.

한 주기를 도는데 4,800,000번 뛰어야 된다는 의미이고, 그 말은 48MHz 클럭에서 0.1초에 해당한다.

결론적으로 카운터가 0 ~ 4799까지 갔다가 다시 0으로 돌아오는데 걸리는 시간은 0.1초라는 뜻이다.

 

2) NVIC Settings

항목 설명
TIM1 break interrupt 타이머의 브레이크 입력(BKIN 핀)에 의한 긴급 정지.
주로 모터 드라이브 회로에서 과전류/과온 보호에 사용
TIM1 update interrupt 타이머 카운터가 overflow 또는 underflow(즉, 자동 reload 값에 도달)시 발생.
일반적인 경우에 해당함.
TIM1 trigger and commutation interrupts 내부 트리거 또는 전환 이벤트 시 발생.
주로 고급 PWM 또는 모터 제어용
TIM1 capture compare interrupt 입력 캡처나 출력 비교 이벤트 시 발생.
CH1~CH4에서 설정된 비교값 또는 캡처 이벤트 발생 시 사용됨

여기서는 TIM1 update interrupt를 선택하여 0.1초마다 인터럽트를 발생시켰다.

 

'개발환경 > STM32CubeMX' 카테고리의 다른 글

Debug 설정 - STM32F030F4P6  (1) 2023.11.18
ADC 설정 - STM32F030F4P6  (1) 2023.11.18
UART(RS-485) 설정 - STM32F030F4P6  (1) 2023.11.18
Clock 설정 - STM32F030F4P6  (0) 2023.11.18
STM32CubeMX에서 STM32CubeIDE로 코드 생성하기  (1) 2023.11.17