본문 바로가기
Embedded SW/[Infineon] TC275 Lite Project

DC모터 드라이버 설계, RC카 전진,후진,회전 설계 (인피니언 MCU PWM, GPIO 설정)

by 방구석 임베디드 2021. 11. 26.
반응형

안녕하세요.

지난 시간에는 모터드라이버에 대해서 설명을 드렸습니다.

오늘은 인피니언 MCU(TC275)를 이용하여 RC카를 한번 돌려보는 시간을 가져보도록 하겠습니다.

PWM과 GPIO 모듈을 이용하여 모터드라이버를 Control 할 것 입니다.

 

먼저, 모터드라이버를 이용하여 만든 RC카는 아래와 같이 동작합니다.

 

참고로 이 글은 개발의 전체적인 내용을 연재하고 있는 글이 중에 하나입니다.

그래서, 앞에쓴 글을 보시면 더욱 도움이 되실것 같습니다.

아래 글을 링크 걸어둘께요. 필요하신 분은 한번 읽어 보세요.

(물론 이 글만 보셔도 크게 문제는 없습니다.)

 

1) 임베디드 SW, MCU에 대한 정리 (feat. 임베디드 SW 비전)

https://embeddedchallenge.tistory.com/210

2) MCU 개발 장비 구매 방법 정리 (인피니언 MCU TC275 Lite)

https://embeddedchallenge.tistory.com/211

3) 임베디드 SW 개발 환경 세팅 방법 정리 (소스코드 편집기, 컴파일러, 디버거 환경 설정 방법)

https://embeddedchallenge.tistory.com/212

4) 인피니언 IDE Tool 사용방법 정리 (프로젝트 생성 및 다운로드 수행)

https://embeddedchallenge.tistory.com/219

5) 인피니언 MCU LED Blinking (TC275 GPIO 설정)

https://embeddedchallenge.tistory.com/225

6) 인피니언 MCU Clock, 오실레이터 에 대한 이해 (TC275 보드에서 확인)

https://embeddedchallenge.tistory.com/226

7) 인피니언 MCU PLL 설정 및 주변기기 Clock 설정 (TC275)

https://embeddedchallenge.tistory.com/227

8) 인피니언 MCU 인터럽트/Interrupt 설정 (TC275 동작 확인)

https://embeddedchallenge.tistory.com/228

9) 스케줄링(scheduling)에 대한 정리, 인피니언 MCU Scheduler 설계 정리

https://embeddedchallenge.tistory.com/229

10) PWM이란 무엇인가? 인피니언 MCU를 이용한 PWM 설계 수행

https://embeddedchallenge.tistory.com/232

11) Motor Driver L298N 사용법 정리 (인피니언 MCU 개발)

https://embeddedchallenge.tistory.com/235

 

그렇다면 지금부터 어떻게 모터드라이버를 동작시키는지 알아보도록 하겠습니다.

 

다시한번 지난번시간의 내용을 간단히 정리하고 넘어가도록 하겠습니다.

아래와 같이 모터드라이버의 외부전압을 오렌지박스에 넣어주세요.

그리고 5V출력전압은 MCU 전원으로 사용하시면 됩니다.

아래는 전체 연결도입니다.

이제부터 이 연결을 통하여 어떻게 RC카를 동작시키는지를 알아 보도록 하겠습니다.

 

 

우선 2개의 모터드라이버가 보입니다.

왼쪽의 모터드라이버는 자동차의 앞바퀴를 제어하는 부분입니다.

위의 설계에서 아래순으로

오렌지 -> 빨강 -> 초록 -> 하늘 -> 보라 -> 회색이 보입니다.

오렌지 (Enable A) : 왼쪽바퀴를 동작시키는 MCU의 PWM이 들어가는 부분입니다.

빨강 (IN1) : MCU의 Digital Output이 들어가는 부분입니다.

초록 (IN2) : MCU의 Digital Output이 들어가는 부분입니다.

 

이렇게 3가지 신호를 이용하여 앞바퀴 왼쪽의 모터의 움직임을 제어합니다.

 

하늘 (IN3) : MCU의 Digital Output이 들어가는 부분입니다.

보라 (IN4) : MCU의 Digital Output이 들어가는 부분입니다.

회색 (Enable B) : 오른쪽 바퀴를 동작시키는 MCU의 PWM이 들어가는 부분입니다.

 

이렇게 3가지 신호를 이용하여 앞바퀴 오른쪽의 모터의 움직임을 제어합니다.

PWM은 현재 Duty 50%를 주고 있습니다.

Period는 10ms입니다.

그리고 IN1, IN2, IN3, IN4의 진리표는 아래와 같습니다.

IN1 : High, IN2 : Low 일때 바퀴는 앞으로 회전합니다.

IN1 : Low, IN2 : High 일때 바퀴는 뒤로 회전합니다.

모두 High, 모두 Low일 경우 바퀴는 정지합니다.

 

오른쪽 바퀴도 마찬가지입니다.

 

그렇다면 포트에 어떻게 연결이 되었는지를 알아 보도록 하겠습니다.

Enable A : p02.4 에 연결하였습니다. 이 포트는 PWM이 나오는 포트입니다.

IN1 : p00.0에 연결하였습니다. 이 포트는 Digital Ouput(GPO)이 나오는 포트입니다.

IN2 :  p00.1에 연결하였습니다. 이 포트는 Digital Ouput(GPO)이 나오는 포트입니다.

 

Enable B : p02.5 에 연결하였습니다. 이 포트는 PWM이 나오는 포트입니다.

IN3 : p00.2에 연결하였습니다. 이 포트는 Digital Ouput(GPO)이 나오는 포트입니다.

IN4 :  p00.3에 연결하였습니다. 이 포트는 Digital Ouput(GPO)이 나오는 포트입니다.

이제 SW 설계를 수행해 보도록 하겠습니다.

우리는 지난시간에 Digital Ouput을 제어하는 API를 만들어 보았습니다.

매개변수로 port 정보를 입력하면 그 핀을 Low 또는 High로 만드는 API 입니다.

이것을 아래와 같은 함수로 다시 만들어 보았습니다.

IN1을 High, Low로 만들고 싶을때 아래 API를 사용하면 됩니다.

조금더 사용자가 편할수 있도록 만든 Middle단 함수라고 할수 있습니다.

아래 포트내용을 잘 살펴 주세요.

위에서 정의한 내용과 정확하게 일치하고 있는것을 확인 할 수 있습니다.

 

아래는  뒷바퀴 부분의 middle단 함수 입니다.

이제 이 함수를 이용하여 RC카의 전진, 좌회전, 우회전, 후진, 정지를 결정하는 함수를 만들어

보도록 하겠습니다.

아래 함수는 앞바퀴 2개에 대해서 전진, 좌회전, 우회전, 후진, 정지를 요청하는 함수입니다.

 

즉, 정지할때는 모두 Low로 만들어서 정지시키면 됩니다.

전지을 할때는 IN1 High, IN2 Low 를 주어야 합니다.

IN3, IN4도 마찬가지 입니다.

아래는 뒷바퀴 부분입니다.

이제 이 2개의 함수를 합쳐서 최종적인 함수를 만들어 보도록 하겠습니다.

 

원하는 TestInput을 넣어서, 전진, 후진, 우회전, 좌회전이 가능해 졌습니다.

참고로 우회전을 하려면

왼쪽바퀴는 전진을 하고, 오른쪽 바퀴는 후진을 해야 합니다.

한번 머리속으로 그려보세요 ^^

좌회전은 반대가 되어야 하겠죠?

 

드디어 최종함수가 만들어 졌습니다.

이제 이 함수를 Scheduler에 할당하면 됩니다.

10ms Task에 할당을 하도록 하겠습니다.

참고로, PWM은 항상 50 Duty가 나가도록 설정하였습니다.

 

이제 원하는 TestInput을 넣어서 전진 후진을 수행할수 있습니다.

간단히 동작하는 RC카가 만들어 진 것입니다.

 

이것으로 DC모터 드라이버를 이용하여 RC카 동작을 구현하는 SW를 설계해 보았습니다.

PWM과 GPO(Digital Input)이 필요하였습니다.

 

이제 이 RC카를 무선으로 제어하려고 합니다.

어떻게 무선으로 제어해야 할까요?

 

다음 시간에는 무선으로 동작하는 방법에 대해서 정리를 하도록 하겠습니다.

오늘 포스팅은 이것으로 마무리 하도록 하겠습니다.

 

감사합니다.

반응형

댓글