[아두이노 드론] I2C (Inter Integrated Circuit) 통신 1부

Posted by Doony
2017. 2. 12. 23:22 아두이노 드론 프로젝트

안녕하세요! 와이엔지니어스입니다. 




지금까지 드론 프로젝트를 진행하면서 원리에 대한 기술 없이


진행했던 부분들도 많은데요. (빨리 띄우고 싶은 마음이 급하다보니..^^;;)


앞으로는 이렇게 빠뜨리고 넘어간 원리들을 조금씩 채워나가려고 합니다. 




mpu6050의 통신 방법 : I2C 통신


그 첫번째 원리는 바로 I2C 통신입니다.  


I2C 통신은 시리얼 통신 (UART/USART) 그리고 SPI 통신과 더불어 가장 많이 활용되는 통신 방법 중 하나인데요.


저희 프로젝트에서는 각도와 각속도를 추출하기 위해 사용했던 mpu6050이 I2C 통신 기반입니다. (오호..)

        


      

                                   

                                                              <I2C 통신 기반의 mpu6050>


그럼 이제 그 원리를 알아볼까요??



통신을 위해 꼭 필요한 구성요소들


I2C 통신에 대해 알아보기 전에, 


일반적으로, 하나의 기기가 다른 기기들과 통신을 하려면 반드시 필요한 요소가 무엇이 있을까요?


저희가 우편물을 보낼 때를 생각하면 답을 유추하기가 쉬운데요.


가장 먼저, 전달하고자 하는 데이터 (우편물), 그리고 이 데이터를 전달하고자 하는 위치에 대한 정보, 즉 주소 (배송지)가 있어야 할 것입니다. 


또, 이 데이터를 언제 전달할지 결정하는 전송 시점에 대한 정보 또한 필요하겠죠.



전송 시점의 경우에는 일반 우편물 보내는 것과 조금 다른데요. 


일반 우편물을 보낼 때는 최대한 빨리 가길 원하지만, 기기 간의 통신에서는 여러 기기가 동시 다발적으로 통신을 하게 되면 서로 간섭을 일으킬 수 있어요. 


특히, 공용으로 통신을 위한 선(버스선)을 활용하는 경우에 말이죠. 



또, 데이터를 읽을 것인지 또는 쓸 것인지를 대한 정보 또한 필요합니다.



이 정도면 얼추 통신은 가능할 것 같네요. (빠진게 없겠지..??)



I2C 통신 구성


I2C 통신은 n개의 마스터 장치n개의 슬레이브 장치간의 통신 프로토콜인데요.


저희의 경우엔, 마스터는 아두이노였고, 슬레이브는 mpu6050 및 다른 I2C 기반 센서들입니다.


아래 mpu6050 그림을 보면 SDA, SCL line이 아두이노 우노의 A4 (SDA) 및 A5 (SCL) 핀으로 연결되어 있는데요. 


이 두 선을 통해 데이터, 주소, 전송 시점 등에 대한 정보를 전송합니다. 엄청 단순하죠??



SDA (Serial Data) 선은  마스터에서 슬레이브 또는 슬레이브에서 마스터로 데이터를 전달하게 됩니다.


SCL (Serial Clock) 선은 통신의 동기화를 위한 클럭 시그널을 전송합니다.



      


                                                              <I2C 통신 기반의 mpu6050>



참고로, SDA와 SCL은 High 상태여야 하는데, 이를 위해서 pull-up 저항에 연결되어야 합니다. 


(아두이노에서는 내부 풀업 저항이 있어 신경을 쓰시지 않아도 된다고 하네요.)



또, 하나가 아닌 여러개의 센서들을 연결할 때는 아래 그림 <아두이노에 병렬로 연결된 I2C 기반 온도센서들> 같이 병렬로 연결하시면 되요. 



                 <아두이노에 병렬로 연결된 I2C 기반 온도센서들>



데이터 구성 


                                     <I2C 통신 개략도>


위 그림은 I2C 통신이 어떻게 구성되는지 잘 보여주는데요. 


마스터와 슬레이브가 SDA, SCL선을 통해 연결된 걸 볼 수 있습니다.


I2C 통신을 통해 전달되는 전송되는 데이터들은 다음과 같은 형태를 띄고 있어요. 



                                     <I2C 통신 Data 형태>



조금 복잡해보일 수 있으나, 잘 살펴보면 위에서 통신을 위해 꼭 필요하다고 했던 요소들이 있음을 확인할 수 있습니다.


(주소 ADDRESS, 데이터를 쓸 지 읽을지 나타내는 Read/Write DIRECTION BIT, 그리고 데이터)


그리고 통신의 처음과 끝을 나타내는 시작(SDA : High to Low / SCL : High) 그리고 정지 (SDA : Low to High / SCL : High) 조건과


ACK (통신이 제대로 진행되고 있다고 알려주는 신호) 또한 보이는데요.


글이 조금 길어질 것 같아 각각의 구성요소와 이 데이터들이 전달되는 형태는 다음 포스팅에서 좀 더 자세히 알아볼게요.                          


조만간 다시 찾아오겠습니다! 그 때까지 다들 화이팅!!!!!!!!




출처 

1) mpu6050 : http://fritzing.org/projects/mpu-6050-board-gy-521-acelerometro-y-giroscopio

2) 아두이노와 mpu6050 : http://www.makecube.in/search

3) Connection of multiple I2C devices to Arduino : http://www.learningaboutelectronics.com/Articles/Multiple-I2C-devices-to-an-arduino-microcontroller.php

4) http://wiki.mcselec.com/bavr/Using_the_I2C_protocol