MCU는 STM32F030F4P6을 사용하였고 관련 데이터 시트는 아래 첨부했습니다.
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
① 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 |