STM32 정리

BLDC 모터(인 휠 모터)와 모터 드라이버(BLD-15)

dawon-project 2025. 1. 13. 20:24

 

 

모터

모터 : 전기 에너지를 이용하여 운동 에너지를 만들어 내는 장치-> 보통 모터 드라이버를 통해 모터를 제어하며, 모터 드라이버 내부에는 H-Bridge 회로가 들어 있다.-> H-Bridge 회로를 통해서 모터가

dawon-project.tistory.com

 

 

PWM

PWM(Pulse Width Modulation) : 펄스 폭 변조      -> 듀티 비를 통해 PWM 값이 달라진다.      -> 디지털 신호를 아날로그 신호처럼 흉내내는 것과 비슷하다.      -> 일정한 주기 내에서 Duty의 비를 변화

dawon-project.tistory.com

 

 

STM Clock

*Clock : 일정한 시간 간격으로 0과 1의 값이 번갈아 나타난다. -> 내부 / 외부 또는 low / high speed의 분류에 따라 HSE, HSI, LSE, LSI로 분류 된다. *PRESCALER(분주기) : 카운터에 공급되는 클럭을 더 느리게

dawon-project.tistory.com

 

 

<사용한 제품>

 인 휠 BLDC 모터 -> 48V 350W 10인치

 

<BLD-15 회로도 및 Spec>

 

=> PWM을 통한 컨트롤

DC 전압 : 12V ~ 50V

전류 : 15A

=> 풀업 방식

 

 

 

 

 

 

 

 

 

 

 

<제어 모드 2가지 > 

  1. RV 모드 (Potentiometer 사용) : 고정 스피드 사용시 적합
    -> RV 모드로 사용할때 DIP 스위치 2번 ON 세팅
     -> 시계 방향으로 돌릴때 속도 점점 증가
  2. AVI 모드 : 속도 변화가 있는 경우 적합
     -> DIP 스위치 2번을 OFF 세팅
     -> 아날로그 신호를 통한 PWM을 만들어줘야함 (V(전압)이 높아질수록 변화폭이 증가)
     -> 이거 사용!

< 모터 드라이버 핀마다의 기능 >

  • ENBL 핀 : 모터의 Start/Stop 신호 제어 -> 항상 GND 연결
  • F/R 핀 : 모터의 회전 방향 제어 -> GPIO 핀을 통한 제어
  • BRK 핀 : 비상용 브레이크 기능 (긴급 정지모드로 속도를 0으로 한순간에 만듬)
     -> GPIO 핀을 통한 제어(GPIO_OUTPUT)
  • SPEED 핀 : 모터의 속도를 조절하도록 신호를 모터에 보냄
     -> PWM핀 -> TIM로 생성
  • ALM 핀 : 드라이버가 과전류, 과전압, 상간 단락, 로터 구속 등 기타 오류가 발생하면 드라이버는 자동으로 보호 상태가 되어 모터를 정지시키고, 경보 신호를 ALM에 출력 -> 빨간불
     -> GPIO_INPUT 핀을 통해 상태 읽음

 

 

BLDC모터드라이버 BLD-15 DC12-50V 15A 750W PWM컨트롤 스마트드라이버

모터뱅크

www.motorbank.kr

-> 해당 사이트에 Datasheet가 적혀 있다.

< STM32 PWM 설정 >

STM32 cubeMX 설정

  • ST에서 Duty rate(듀티비)는 CCR(Channel Capture Compare) 값에 의해 결정된다.
     -> CCR : PWM 신호의 듀티 사이클(일정 시간 동안 신호가 활성화되어 있는 시간)을 설정하는 레지스터
  • TIM3는 APB1을 통해서 클럭이 생성되고, 필자의 경우 아래의 그림처럼 84MHz로 세팅되어 있기 때문에 한 주기가 1μs로 세팅하기 위해서는 83으로 Prescaler를 세팅해야 한다.
    -> "84 - 1" 을 해줘야한다 왜냐하면 ST에서는 0부터 숫자가 카운트되기 때문
  • Counter Period 는 PWM 값의 범위를 몇 까지 줄 것인가를 결정하는 설정인데 필자는 0 ~ 2000 까지의 PWM 범위를 사용할 것이기 때문에 1999로 설정했다.
     -> ARR(Auto-Reload Register) : 주기적인 PWM 신호의 주기를 결정하는 레지스터
         -> Prescaler와 Counter Period를 통해 ARR 조절
  • PWM Generation Channel 1에서 Pulse 옵션은 초기 PWM 값을 몇으로 설정할 것인지를 정하는 것이다 필자의 경우 초반에는 멈춘 상태를 유지하고 싶기 때문에 0 으로 세팅했다.
     

최종 ST MX 설정 UI

< PWM 코드 >

  • Polling 방식일 경우 사용 함수
    HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1) 함수를 사용
     -> 첫번째 인자는 사용하는 타이머 번호, 두번째 인자는 해당 타이머에서 사용하는 채널
    Main 함수의 while 문에서 "TIM3 -> CCR1 = value; "를 통해 CCR 레지스터에 직접 접근하여 값을 변경(duty비 변경)시킬 수 있다.

  • Interrupt 방식일 경우 사용 함수
     HAL_TIM_Base_Start_IT(&htim3) 함수를 사용
     -> Interrupt의 경우 Callback 함수 내에서 처리 코드를 적어야한다.
     -> 아래 코드 처럼 htim에 멤버 접근 연산자인 "->"를 통해서 htim3가 맞는지 확인 후 내부에 코딩
 

 

-> 추가로 NVIC에서 인터럽트 설정을 체크해줘야한다.

 

BLDC.zip
9.60MB

 

<작동 영상 및 후기>

 

-> 모터와 모터 드라이버 그리고 SRF08이라는 초음파 센서를 같이 적용하여 구동 시킨 영상이다.

문제 : 킥보드 용이라 그런지 속도가 많이 빠르다 그러나 BLDC 모터 내부에 ESC 나 토크가 거의 없어서 내리막길에서 속도를 많이 내지 않으면 잘 올라가지 못하고 경사도에서 전원이 꺼졌을 시에 뒤로 굴러가는 문제가 발생하였다.
-> ESC에서의 회생 제동 또는  모터 자체에 토크 값이 높아야 해결이 가능하다고 한다.
-> 다시 토크 값이 높은 BLDC 모터를 사거나 ESC를 직접 달기에는 어려움이 있기 때문에 U,V,W 값을 읽어와서 뒤로 속력이 가해질 때 속력을 더 주는 알고리즘을 구현하였다.

-> ESC에서의 회생 제동(Regenerative Braking) : 모터가 감속하거나 역방향 토크를 생성할 때 발생하는 운동 에너지를 전기 에너지로 변환해 배터리에 다시 저장하는 기술

'STM32 정리' 카테고리의 다른 글

Polling 과 Interrupt 그리고 DMA  (0) 2025.01.13
IMU ( EBIMU )  (0) 2025.01.13
3D Lidar (CygLidar)  (0) 2025.01.13
2D Lidar (Slamtec rplidar A1M8)  (0) 2025.01.13
라이다  (0) 2025.01.13