이전에 비슷한 프로젝트를 했는데, 당시에는 LED를 사용해서 했는데 이번엔 모터로 바꿔서 해봤다.
해본 이유는 Timer에 대해 더알아보기위해...?
이전 포스트를 같이보면 좋을 듯함
[STM32] Touch GFX 실습 - 2 : 터치스크린으로 PWM 제어
로봇은 이미 분해했기에 이 터치스크린으로 간단하게 뭘해볼 수 있을까 하던중, 눌러진 숫자를 PWM 신호로 바꿔서, LED의 밝기를 조정하는 간단한 실습을 진행해보았다. PWM은 프로젝트의 모터제
oragg.tistory.com
Timer
지난번에도 설명했었지만 다시한번 자세히 해볼려고한다.

STM32 IDE에서 Clock Configuaration 메뉴를 통해 위처럼 timer별 clock(주파수)을 설정할 수 있다.
여기서 보이는 APB Timer Clocks들의 역할은 APB버스에 연결된 타이머들에 클록을 공급한다.
각 버스로 범용 타이머, 주변 장치들 (USART, UART, SPI, I2C 등) 등에 전달된다.
여기서 범용타이머는 내가
- 이벤트 카운팅
- PWM 생성
- 인터럽트
등으로 사용할 수 있으며 주변장치는 데이터 통신에서 일정 속도로 데이터를 송수신 하므로 클럭은 필수적이라고 할 수 있다.

전체 Datasheet에서 APB1버스에 연결된 장치들을 확인할 수 있으며, 나는 PWM 제어를 위해 TIM4를 이용했는데, 16비트 타이머임을 확인할 수 있다.
16비트 타이머와 32비트 타이머의 차이는 최대값 카운트의 차이이다.

최대 138Mhz를 사용할 수 있어, 나는 137.5Mhz로 APB1의 범용 타이머를 설정해주었다.
여기서, prescaler를 통해 PWM으로 사용할 TIM4의 주파수를 설정해줄 수 있다.
main.c 코드에서 설정가능하며, 1375으로 설정하면 137500000hz/13750 = 10kHz로 설정된다.
적절한 주파수를 선정하는게 쉽지만은 않은데,
너무 낮은 주파수에서는 모터 코일의 인덕턴스 때문에 전류가 충분히 흐르지 못해 모터 토크가 떨어질 수 있고, 효율도 낮아진다.
주파수가 너무 높으면 스위칭 손실이 발생하여 효율이 감소할 수 있다.
가청 주파수 영역인 (수백 Hz ~ 10kHz 미만) PWM 주파수를 사용할 경우, 모터가 신호에 따라 '삐' 소리나 기타 소음을 발생시킬 수 있다지만, 나는 못느껴서 10kHz로 설정했다.
참고로 실험결과 PWM주파수를 매우 높게 설정도 해봤는데, 확실히 속력이 감소함을 보았다.
모터 제어
이전 LED랑 코드는 별로 안바꼈다.
Touch GFX를 사용해 PWM 신호를 입력했으며 Duty Cycle은 0~999(선택) / 1000 (Counter 범위)로 설정해 모터 속도를 제어할 수 있도록 하였다 .
L298N 모터 드라이버를 사용했으며, STM32에서 PWM, GPIO두개를 모터드라이버에 연결해서 제어하였다.
7.4V 배터리를 전원으로 인가하였다.
RTOS TASK두개를 사용했으며
소스코드는 아래와같다.


'STM32' 카테고리의 다른 글
| [STM32] STM? (0) | 2024.08.09 |
|---|