본문 바로가기

쓰기

조회 수 4087
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

이번 포스팅은 밸런싱 로봇에서 사용하는 유일한 센서인 IMU(Inertial Measurement Unit) - MPU6050과의 통신에 대한 것입니다.

준비물 : 앞의 포스팅에서 만든 하드웨어, 컴퓨터와 UART통신을 하기 위한 UART통신모듈(테스트용), CodeVision AVR

센서와 통신을 하기 위해서는 이 센서의 통신규격을 알아야 하는데요, 이것은 센서 데이터 시트에 잘 나와있습니다. MPU6050의 데이터 시트는 구글에 검색해보면 바로 다운받을 수 있으며, Product Specification(PS) 과 Register Map and Descriptions(RM)  이 두가지 데이터시트가 있습니다. 통신하는데 필요한 내용이 나와있는 데이터 시트는 Register Map and Descriptions 입니다.

mpu6050은 가속도,자이로 센서이고 이를 사용하기 편리하게 모듈로 판매를 하는데요, 밸런싱로봇에 사용한 모듈명은 gy-521입니다. 아래 사진1을 참조하세요.


gy 521(1)


                                                            

사진 1 gy-521(mpu-6050 모듈)


센서에 보시면 전원 연결선인 VCC와 GND 핀이 있고, 통신할 수 있는 SCL, SDA 핀이 있습니다. 이 두가지 핀으로부터 I2C통신을 사용하는 칩이라는 것을 알 수 있는데요, PS 데이터시트에서도 I2C를 사용한다는 내용이 나와있습니다. I2C통신규격은 AVR데이터시트에 TWI(Two Wire Interface)란 이름으로 설명이 되어있는데 CodeVisionAVR에서 함수로 편리하게 사용할 수 있으므로 간단하게 요약해보도록 하겠습니다.

   I2C는 마스터와 슬레이브 사이의 통신을 할 수 있는 규격입니다. 통신에는 두 가지 라인을 사용하는데 하나는 클럭(SCL), 하나는 데이터(SDA)를 주고받는 라인이며 각 SCL과 SDA에 *풀업저항을 달도록 되어있습니다. I2C의 데이터패킷은 9비트를 사용하는데, 1바이트의 Data와 1비트의 Acknowledge로 구성됩니다.  마스터에서 슬레이브로 어떻게 데이터를 보내고 받아야 하는지는 write인지 read인지에 따라 약간 다릅니다. 


- Write의 경우는 마스터가 슬레이브에게 1. 슬레이브 주소(7 bit) + write(1bit)   2. 레지스터 주소  3. write할 데이터(8bit) 순서로 보냅니다. (아래 표 1 참조)


사본 write


표 1 . mpu6050 single byte write sequence


- Read의 경우는 마스터가 슬레이브에게 1. 슬레이브 주소(7bit) + write(1bit)  2. 레지스터 주소  3. 슬레이브 주소(7bit) + read(1bit) 순으로 보낸 뒤 슬레이브로부터 데이터를 받습니다. (아래 표 2 참조)


write sequence

표 2. mpu6050 single byte read sequence


RM데이터시트 9. Digital Interface 9.3 I2C Communications Protocol 에 보시면 보다 상세한 설명을 확인하실 수 있습니다.


  mpu6050의 주소는 PS데이터시트의 9. Digital Interface - 9.2 I2C interface 부분에 보면 핀 AD0가 high 일 때 0b1101001(0x69), AD0가 low일 때  0b1101000(0x68)라고 나와있습니다. 우리는 AD0를 GND에 연결했기 때문에 0x68이 mpu6050의 주소가 됩니다. CodeVisionAVR에서는 이 I2C통신을 할 수 있는 twi_master_trans()함수fmf 제공하고 있어서 편리하게 i2c통신을 할 수 있습니다.

cvavr - help - 색인에서 twi_master_trans를 검색해보면 아래와 같은 변수를 받는 함수라는 것을 알 수 있습니다.


bool twi_master_trans(
            TWI_MASTER_INFO_t *twi,
            unsigned char slave_addr,
            unsigned char *tx_data,
            unsigned char tx_count,
            unsigned char *rx_data,
            unsigned char rx_count)


총 6개의 변수를 받는 함수인데, TWI_MASTER_INFO_t 는 초기 twi_master_init()설정으로부터 받는 변수이므로 우리는 5개의 변수를 입력해 주면 됩니다. 각각 슬레이브 주소, 보낼 데이터, 보낼 데이터 수, 받을 데이터, 받을 데이터 수 입니다.

어떤 식으로 활용하는지 주요 코드를 아래에 정리해 보았습니다.

======================================================================

// TWI initialization
// Mode: TWI Master
// Bit Rate: 300 kHz , 통신속도 설정. I2C의 통신속도는 400kHz까지 입니다.
twi_master_init(300);


mpu6050_write(0x6B,0x00); //mpu6050의 sleeping모드 해제를 위해 설정, 초기설정에 sleeping모드가 걸려있어서 이것을 해제해 주어야 mpu6050이 작동합니다.


while()

{

       a = mpu6050_read1byte(char add);

       printf("%c",a);

}


//아래의 두 함수는 mpu6050의 read, write를 편리하게 하기 위해 만든 함수

void mpu6050_write(char add, char val) //mpu6050에 write하는 함수
{
    char data[2]; //크기 2인 data배열 선언
    data[0] = add;
    data[1] = val;
    twi_master_trans(0x68,data,2 ,0,0);   //0x68에 data를 2번 쓰고, 읽기는 하지 않음.  data[2]는 배열이므로 data는 주소를 의미. 위에서 설명한 single byte write sequence에서 슬레이브주소, 레지스터 주소, write할 값 순서로 마스터가 슬레이브에게 보낸다고 했는데 이는 0x68, data[0], data[1]과 대응되는 형태를 가지고 있다.
}

char mpu6050_read1byte(char add) //mpu6050이 accelerometer와 gyroscope의 값을 16비트로 출력하지만, 8비트만 시험적으로 출력해보는 함수
{
    char val;//8비트 값을 저장하기 위해 1byte크기를 가지는 char형 변수 val을 선언
    twi_master_trans(0x68,&add,1 ,&val,1);// 0x68의 add에서 값을 읽어 val에 저장한다. 
    return val;  //저장한 val을 반환함.
}


==============================================================================






  1. ROS(Robot Operating System) 개념과 활용 - 11. rosserial 알아보기

    ROS가 적용되는 시스템에선 연산을 위한 상위 제어기와 하드웨어 제어를 위한 하위 제어기가 각각의 역할을 수행하는 경우가 많습니다. 상위 제어기는 보통 PC나 OBC(One Board Computer)를 사용하게 되는데, 하위 제어기와 통신할 때 가장 흔하게 사용되는 ...
    Date2016.03.28 CategoryROS(Robot Operating System) 개념과 활용 By박정현 Views7539
    Read More
  2. ROS(Robot Operating System) 개념과 활용 - 10. CMakeLists.txt 파헤치기

    CMakeLists.txt는 빌드 설정에 관련된 매우 중요한 파일이지만 주석의 압박과 익숙하지 않은 사용법 때문에 매번 대충 작성했던 경험이 있습니다. 관련 가이드를 찾아 보니 생각보다 간단한 규칙으로 되어 있어서 다른 내용을 진행하기 전에 미리 짚고 넘어가...
    Date2016.03.05 CategoryROS(Robot Operating System) 개념과 활용 By박정현 Views8436
    Read More
  3. ROS(Robot Operating System) 개념과 활용 - 9. Dynamic reconfigure를 이용한 실시간 node parameter 업데이트

    오랜만의 ROS 강좌 업데이트입니다. 거의 반년 전 쯤에 해 보았던 내용이지만 이런 저런 바쁜 일들에 밀려 이제서야 업데이트를 하게 되었습니다. 본 코너인 ROS 개념과 활용에서는 나머지 기본적인 내용들을 다루고 최종적으로 간단한 제어 예제까지 수행할 ...
    Date2016.02.24 CategoryROS(Robot Operating System) 개념과 활용 By박정현 Views3852
    Read More
  4. 밸런싱 로봇 만들기 - 2. I2C로 IMU(MPU 6050)와 통신하기

    이번 포스팅은 밸런싱 로봇에서 사용하는 유일한 센서인 IMU(Inertial Measurement Unit) - MPU6050과의 통신에 대한 것입니다. 준비물 : 앞의 포스팅에서 만든 하드웨어, 컴퓨터와 UART통신을 하기 위한 UART통신모듈(테스트용), CodeVision AVR 센서와 통신...
    Date2015.08.16 Category밸런싱 로봇 By한종인 Views4087
    Read More
  5. ROS(Robot Operating System) 개념과 활용 - 8. roslaunch 사용과 launch 파일 작성하기

    저번에 USB 카메라를 이용하면서 usb_cam-test.launch 파일을 실행시켜 보았습니다. usb_cam-test.launch 파일을 실행시키면 USB 카메라와 직접적으로 상호작용하는 '/usb_cam' 노드와 '/usb_cam/image_raw' 토픽을 받아 화면에 출력하는 '/image_view' 노드...
    Date2015.08.13 CategoryROS(Robot Operating System) 개념과 활용 By박정현 Views17572
    Read More
  6. ROS(Robot Operating System) 개념과 활용 - 7. USB 카메라 사용하기

    ROS는 여러 가지 이미지 관련 패키지를 제공하고 있습니다. 특히 OpenCV 연동 기능을 제공하기 때문에 다양한 영상 처리 알고리즘을 적용할 수 있다는 장점이 있습니다. 이미지와 영상을 얻기 위해서는 이미지를 얻는 센서가 필요한데, ROS가 주로 PC나 SBC ...
    Date2015.08.09 CategoryROS(Robot Operating System) 개념과 활용 By박정현 Views6775
    Read More
  7. ROS(Robot Operating System) 개념과 활용 - 6. rqt를 이용한 데이터 모니터링

    ROS는 로봇으로부터 얻을 수 있는 데이터를 쉽게 확인하고 관리할 수 있도록 rqt라고 하는 모니터링 도구를 제공합니다. rqt는 GUI 개발에 쓰이는 Qt framework 기반의 ROS software framework입니다. rqt는 우리가 지금까지 노드간 관계를 확인할 때 써 오던...
    Date2015.08.08 CategoryROS(Robot Operating System) 개념과 활용 By박정현 Views7049
    Read More
  8. ROS(Robot Operating System) 개념과 활용 - 5. 바닥부터 node 작성하기

    지금까지는 기존에 있던 패키지 노드를 수정하여 사용해 왔습니다. 이번에는 노드를 아예 처음부터 새로 작성하는 법에 대해 알아보겠습니다. 또한 노드 내부에서 사용되는 ROS의 기본 구조에 대해서도 간략히 짚고 넘어가도록 하겠습니다. 노드 작성법을 간...
    Date2015.07.26 CategoryROS(Robot Operating System) 개념과 활용 By박정현 Views33231
    Read More
  9. ROS(Robot Operating System) 개념과 활용 - 4. ROS node를 이용하여 direct serial 통신하기

    ROS 노드들은 TCP/IP 프로토콜의 메시지 통신을 기반으로 데이터를 주고 받습니다. 하지만 대다수의 센서들과 MCU의 통신은 일반적인 serial 프로토콜을 이용해 통신을 하는 경우가 많습니다. 여러 용도로 편리하게 사용되는 UART 통신 또한 그러한 방식입니...
    Date2015.07.07 CategoryROS(Robot Operating System) 개념과 활용 By박정현 Views10403
    Read More
  10. 밸런싱 로봇 만들기 - 1. 하드웨어 구성

    안녕하세요? 오늘부터 "밸런싱로봇 만들기"를 포스팅할 P.M.한종인 입니다. 밸런싱 로봇 하드웨어를 제작하기 위해서는 다음과 같은 몇 가지 준비물이 필요합니다. 준비물 : 부품, 회로도, 인두, 땜납, 테프론 래핑 와이어(얇은 배선용 전선), 일반전선, 멀티...
    Date2015.07.03 Category밸런싱 로봇 By한종인 Views2692
    Read More
Board Pagination Prev 1 2 Next
/ 2