라즈베리파이 gpio 전압 - lajeubelipai gpio jeon-ab

라즈베리파이(RPI)

[버섯] 라즈베리파이 허용전류 및 전압 등의 주의 사항 - Ver1.0

버섯돌이의 라즈베리 파이 기초

허용전류 및 전압 등의 주의 사항

Created Date: 2016.01.01

Modified Date: 2016.01.01

revision 1.0

키워드 : 라즈베리파이, Raspberry Pi, RPI

안녕하세요 버섯돌이 유재성입니다.

라즈베리파이를 이용해서 GPIO로 뭔가 작업을 할 일이 거의 없다 보니 작업할 때마다 사람들한테 물어보지만

돌아서면 잊어버리는 허용 전류와 관련해서 나중에라도 정리하기 위해 살짝 글을 남겨 놓습니다.

(음... 어딘가에 정리해 놨던 것 같기도 한데... 막상 찾으면 안 보이니...)

이쪽 지식은 아는 게 없어서 틀린 내용이 포함될 수 있으며, 잘 못된 정보나 추가될 정보는 제보 주시면 수정하겠습니다.

손 놓은지 너무 오래되어서 죄송하지만 질문은 답변을 못 드려용.*^^*V

1. 전류 관련

초기의 라즈베리 파이 제품은 허용전류가 750mA로 제한이 걸려있었던 것 같습니다.

글을 보면 폴리스위치는 일종의 PTC로서 온도에 따라 저항값이 변하는 소자이며,

과전류가 흐르게 되면 전류를 차단했다가 다시 온도가 낮아지면 회복이 되는 fuse라고 하는군요.

(PTC : 온도가 상승하면 전기저항이 급격히 커지는 반도체소자)

평소에는 매우 낮은 저항값을 가지고 있다가 일정 온도가 되면 급격히 저항값이 높아지며,

일반 퓨즈와 달리 연결이 끊어지는 구조가 아니라서 여러 번 재사용이 가능하다고 합니다.

하지만, 라즈베리파이 B+에서는 750mA로 제한되었던 폴리스위치가 2A로 변경된 것 같네요.

그리고, 글을 보면 부팅 옵션인 config.txt 파일에서 입력 허용 전류 설정을 변경할 수 있다고 합니다.

$ sudo nano /boot/config.txt

 max_usb_current=2

 safe_mode_gpio=4

그리고, 제품에 따라서 각 GPIO 핀마다의 허용 전류와 전체 전류의 제한도 있었는데...

이건 기억이 안 나니 나중에 알게 되면 추가를...^^;;;

2. 전압 관련

한빛 출판에서 2015.05월에 출간된 "프로젝트로 배우는 라즈베리 파이" 도서에 아래와 같은 내용이 있습니다.

(대충 훑어봐서 잘 못 봤을 수 있으나 도서는 2015년 신간인데 번역서라서 그런지 내용은 상당히 오래된 내용 같더군요.^^)

모든 GPIO는 3.3V를 사용하며, 5V는 사용할 수 없다고 합니다.

라즈베리 파이에는 과전압에 대한 보호 설계가 포함되지 않았기 때문에,

실수로 GPIO 핀에 5V를 연결하면 라즈베리 파이가 망가질 수 있다고 하니 주의하시기 바랍니다.

즉, 라즈베리 파이의 GPIO는 3.3V의 전원 전압으로 구동되며, 입력 전압이 3.3V를 넘으면 GPIO 핀 회로가 망가진다고 합니다.

3. 디지털 신호의 전압 레벨

표로 예쁘게(?) 정리하면 좋겠지만... 대충 찾아보니 전공 분야가 아니라서 쉽게 정리되지 않는군요.

여기서 중요한 건, 위 도서에서 3.3V로 구동되는 GPIO 핀에 대한 디지털 신호의 전압 레벨에 대해서 설명하기를

GPIO 핀은 0.7V 이하0또는 LOW로 인식하며, 2.7V~3.3V 까지1또는 HIGH로 인식한다고 합니다.

또한, 표준 5V 논리 레벨에서도 0.7V 이하는 0또는 LOW, 3.3V 이상을 1또는 HIGH로 인식하기 때문에

라즈베리 파이의 출력으로 5V 논리 레벨을 갖는 장치를 제어할 수 있지만..

문제는, 5V 논리 레벨의 장치에서 나오는 HIGH 신호는 약 4.4V에서 5V의 전압을 갖는다고 합니다.

(GPIO 핀의 최대 입력 전압은 3.3V라고 했죠?)

따라서, 라즈베리 파이를 이용해서 5V 논리 레벨의 장치를 제어하는 건 문제가 되지 않지만...

라즈베리 파이의 GPIO 핀은 3.3V 이상의 입력 전압이 들어오면 망가진다고 했으니,

5V 논리 레벨을 사용하는 장치의 출력을 라즈베리 파이의 입력으로 사용할 때에는 주의하시기 바랍니다.

즉, 라즈베리 파이로 뭔가 제어하고 싶다면 GPIO 핀은 출력 용으로만 사용하시면 문제가 되지 않으나..

라즈베리 파이와 연동되는 제품에서 뭔가 입력을 받는 용도라면 엄청난 주의가 필요하겠습니다.

[참고자료]

라즈베리활용 : 라즈베리파이 전원부 750mA 의 진실 (POLYSWITCH)

PTC - 두산백과

라즈베리파이 GPIO : DC모터 제어하기 (L293D 이용)

라즈베리파이 모델 B+ 에서 외장형 하드디스크(외장하드) 사용하기

프로젝트로 배우는 라즈베리 파이 - 도서

End.

라즈베리파이 gpio 전압 - lajeubelipai gpio jeon-ab

이 저작물은 크리에이티브 커먼즈 저작자표시-비영리 3.0 Unported 라이선스에 따라 이용할 수 있습니다. 

1. gpio(general purpose input, output)

첫 시간에 라즈베리파이이 운영체제를 설치해 보았는데, 이 부분은 컴퓨터와 같은 속성을 잘 보여주었습니다. 여러 포트들을 사용해서 설치된 리눅스 시스템에 컴퓨터나 마우스, 모니터 등을 이용해서 입력 및 출력을 할 수도 있었습니다. 이번 시간에는 임베디드 시스템과 관련된 부분을 알아보려 하는데, 이 부분을 가장 잘 보여주는 부분 중 하나가 바로 입출력 신호를 제어할 수 있는 전용 포트가 있다는 점입니다. I/O포트 중에는 HDMI, SD카드와 연결되는 포트도 있지만,이 중 GPIO는 목적에 따라 입력으로도 출력으로도 사용할 수 있는, 마이크로 프로세서가 다른 장치들과 소통하기 위해 사용하는 범용 포트입니다. 라즈베리파이에는 총 40개의 핀이 있는데 전력공급이나 GND(ground)외의 기능을 하는 핀을 제외하고는, GPIO핀으로 사용이 되나, GPIO핀들 중 특정 핀은 I2C, SPI, UART 등 다양한 통신 들 중 기능을 위한 핀으로도 사용할 수 있습니다. 이렇게 GPIO외에 다른 기능을 사용하기 위해서 하드웨어적으로 설계되어 나온 PIN을 alternative function이라고 합니다.마지막으로 라즈베리파이의 GPIO는 표준 입출력으로 3.3v전압을 사용합니다. 만약 해당핀을 output으로 사용하면 해당 핀에 3.3v(HIGH) 혹은 0v(LOW)의 전압을 걸어주게 됩니다. 입력으로 사용하면, 3.3v 혹은 0v의 전압을 감지할 수 있습니다.

라즈베리파이 gpio 전압 - lajeubelipai gpio jeon-ab

라즈베리파이 핀 배치도

라즈베리파에어서 각각의 pin에는 레지스터가 있는데 해당 레지스터에 프로그램을 해줌으로써 특정한 목적이 있는 핀이 아닐 경우, 어떤 목적으로 쓸 건지 명기해 둘 수 있습니다. 각각의 간단하게 설명을 하자면 전압이 명기된 부분은 해당핀에 특정 전압이 걸려 있어서 와이어를 연결할 경우 전류를 흘려줄 수 있습니다. 전압을 걸어주는 핀은 3v, 5.5v 두가지가 있습니다. 다음으로는 GND입니다. gnd ground의 약자로 전류가 흘러 들어가는 (-)의 역할을 합니다. 이들을 제외한 나머지가 전부 GPIO핀입니다.

2. 회로

이번엔 라즈베리파이의 회로도를 구성해 보도록 하겠습니다. 먼저 스키메틱 다이어그램으로 어떤 회로를 구성할지 알아보겠습니다. GND, LED(다이오드), 저항, 전원(GPIO) 4가지를 사용합니다.

라즈베리파이 gpio 전압 - lajeubelipai gpio jeon-ab

이런 회로도를 가진 LED 2개를 라즈베리파이와 연결합니다..

다음과 같이 라즈베리파이와 와이어 led를 연결해 줍니다.

라즈베리파이 gpio 전압 - lajeubelipai gpio jeon-ab

각 구성요소에 대한 간략한 설명을 곁들이자면...

-전구-

전구에서 다리가 긴 쪽을 Anode (+) 짧은 쪽을 Cathod (-) 라고 합니다. 각 각 GPIO IN으로 사용되는 핀과 GND에 연결해 줍니다.

-저항-

LED의 + 전극앞에 붙어서 너무 많은 전류가 흐르지 않게 전류변환/전압을 분배해 줍니다.

3. GPIO 사용

GPIO핀을 라즈베리파이와 파이썬 두 가지로 작성해 보겠습니다. 먼저 C로 작성해보겠습니다. C로 작성하기 위해서는 wiringPI라는 라이브러리를 설치해 주어야 합니다.

<version C>

1. git의 내용을 받을 것이기 대문에 git을 설치해 줍니다.

sudo apt-get git-core

2. git에 있는 라이브러리를 clone 해줍니다.

git clone git://git.drogon.net/wiringPi

3. 빌드 및 설치를 해줍니다.

cd wiringPi

./build

4. 잘 설치되었는지 테스트 해줍니다.

gpio -v

5. C코드를 작성해 줍니다.

#include <stdio.h> #include <wiringPi.h> #define LED1 23 #define LED2 24 int main(){ if(wiringPiSetupGpio()==-1){ return 1; } pinMode(LED1, OUTPUT); pinMode(LED1, OUTPUT); while(1){ digitalWrite(LED1, 1); digitalWrite(LED2, 1); delay(500); digitalWrite(LED1, 0); digitalWrite(LED2, 0); } return 0; }

6. gcc로 컴파일 후 실행해 줍니다.

gcc -o [컴파일 후 파일 명] [컴파일 할 파일 명] -lwiringPi

./[컴파일 후 파일 명]

<version Python>

import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setup(23, GPIO.OUT) GPIO.output(23, False) GPIO.setup(23, GPIO.OUT) GPIO.output(23, False) GPIO.output(23, true) GPIO.output(23, true) tmie.sleep(0.5) GPIO.output(23, false) GPIO.output(23, false)

2. 실행

sudo python [파일이름.py]

(필자는 페레럴 케이블과 T자형 GPIO확장 모듈을 이용하였습니다.)

라즈베리파이 gpio 전압 - lajeubelipai gpio jeon-ab