분류 전체보기

일상

나의 첫번째 자동차

어렸을 때부터 나는 차를 좋아했던 것 같다. 부모님 차에 타서 창 밖을 바라보며 지나다니는 차들의 이름을 맞추면서 놀았던 기억이 난다. 하지만 나는 내가 차를 좋아하는 건지 몰랐다. 당연히 다들 그런 줄만 알았다. 고등학교 3학년 수능이 끝남과 동시에 생일이 지난 친구들은 모두 운전 면허를 따는 것이 유행이었다. '남자라면 수동'이라는 한마디로 모두 따질 것 없이 1종 보통 수동 면허를 땄다. 나는 생일이 늦어 겨울방학이 돼서야 혼자 학원에 다녀 면허를 취득했다. 정확히 기억은 나진 않지만 필기 90점 기능시험 도로주행 만점으로 통과했다. 면허가 나오자마자 부모님은 운전하는 감을 이어가야 한다고 하셔서 바로 보험을 들고 집에 있는 차를 몰게 해주셨다. 엄마와 함께 운전 연수를 다녀온 날이면 너무 피..

프로젝트 일지/Whale Car

[Whale Car] Motor 제어 - H-Bridge & Encoder

지난 시간에 우리는 PWM이라는 것을 배웠다. 모터를 굴릴 준비는 다 되었으니 이제 굴릴 수단이 필요하다. 쉽게 말해 스위치를 껐다 켜는 것을 만들었으니 스위치가 필요한 셈이다. 모터를 제어하기 위해서는 모터 드라이버라는 스위치가 필요하다. 모터 드라이버는 모터 종류에 따라 여러 가지가 있는데 그중에 오늘 우리는 H-Bridge라는 것을 사용할 예정이다. H-Bridge는 총 4개의 스위치를 가지고 모터를 제어할 수 있도록 구성된 회로를 말한다. 아래 그림과 같이 H의 형태로 구성이 되어 있어 H-Bridge라 불리며 이 구조를 통해서 모터의 방향과 속도를 제어할 수 있다. 위 회로가 모터의 회전 방향을 바꿔줄 수 있는 이유는 바로 4개의 트랜지스터 Mosfet 덕이다. 4개의 Mosfet 들은 각..

프로젝트 일지/Whale Car

[Whale Car] Motor 제어 - PWM

이 프로젝트의 시작점이 바로 알리에서 이 모터를 구매하면서 시작됐다. 구매한 모터의 모델명은 JGB-520 Motor로 모터에 내장 엔코더를 포함하고 있다. 2개의 인코더가 있으며 각각 1 바퀴에 11 Pulse를 생성하게 된다. 물론 2개의 인코더를 가지고 있으니 두 위상은 90도 차이가 날 것이고 그것으로 모터 회전의 방향성을 추론할 수 있을 것이다. 일단 그 부분은 나중에 더 디테일하게 다루고 오늘은 PWM에 대해서 이야기해 보자.  PWM은 Pulse Width Modulation의 약자로 말 그대로 Digital 신호로 On/Off를 제어하면서 진폭을 제어하는 것을 의미한다. 그렇다면 여기서 왜 On/Off를 반복하며 신호를 내보낼까? 그 이유는 모터 제어의 방법과도 이어진다. 모터는 쉽게 말해..

프로젝트 일지/Whale Car

[Whale Car] Core간 Communication

우리 프로젝트 내에는 Cortex-M4와 Cortex-M7이 있다. 두 Core는 각각 동작하며, 코드 데이터 영역을 따로 가지고 있다. 그렇다면 두 Core 간 데이터를 주고받기 위해서는 어떻게 해야 할까?  해답은 데이터 시트에 있다.   데이터 시트를 자세히 보면, D3 Domain의 SRAM 4를 Cortex-M4와 Cortex-M7이 공유하고 있다. 이 영역을 두 프로젝트에서 Linker Script를 수정하여 영역을 잡아 주면 해결 가능하다. 나는 해당 영역을 SHARED_RAM으로 이름을 지었다. 해당 영역을 Common Folder에다가 IPC 형태의 소통 창고를 만들 것이다. 바로 아래와 같이.  위와 같이 선언하고 코드를 구현하면 Build Analyzer를 통해서 실제로 할당 된것도 ..

프로젝트 일지/Whale Car

[Whale Car] Schedule 이식 그리고 CPU Load

1ms Timer가 정상 작동 하는 것을 보았으니, Scheduler를 다시 심어보자. 이전에 다루었었던 내용이니 내용적인 부분은 넘어가도록 하겠다. https://enginbear.tistory.com/29 [Whale Car] Scheduler 만들기이번 시간에는 지난 시간 만든 1ms Timer Interrupt를 활용해서 Scheduler를 만들어 봅시다. 임베디드에서는 Scheduler가 심장이라고 해도 과언이 아닙니다. 임베디드 위에서 올라가있는 모든 로직들의 일enginbear.tistory.com  근데 한 가지 문제점이 있다. Dual Core 프로젝트의 경우에 하나의 elf가 만들어질 것이라 생각했는데, 두 개의 elf를 올리는 방식이다. 즉 그 말은 하나의 프로젝트 안에 두 개의 빌드..