Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
(연관된 글이 2개 있습니다.)

아두이노 레오나르도 R3 호환 보드의 3.3v 핀의 LED 전압/전류 테스트

아두이노 보드를 하나 구매했습니다. ^^

아두이노 레오나르도 R3 호환보드
; https://www.devicemart.co.kr/goods/view?no=1278923

외부 인터럽트의 핀 번호
Mega2560                     : INT.0(2), INT.1(3), INT.2(21), INT.3(20), INT.4(19), INT.5(18)
Leonardo,Micro               : INT.0(3), INT.1(2), INT.2(0),  INT.3(1),  INT.4(7)
Uno, Ethernet, DUE, ZERO, Mkr: INT.0(2), INT.1(3)

호환 보드인데 칩이 ATMEL 제품이니,

ATmega32u4 (ATMEL MEGA32U4 - AU 1708E PH A8YDQA)

Arduino IDE에서는 레오나르도로 잡으면 인식이 됩니다.




아두이노 보드에 9v 외부 전압을 연결했을 때, 3.3v 출력 pin의 전류가 다음과 같습니다.

3.3v 출력 pin
    1.0KΩ - 3.29mA (약 3.3mA)
    2.2KΩ - 1.48mA (약 1.5mA)

V = IR이니,

    1.0K * 3.3mA = 3.3v
    2.2K * 1.5mA = 3.3v

계산상으로도 거의 정확합니다. LED를 하나 연결해 볼까요?

아두이노 LED 5mm 녹색 (AS0276)
; http://arduinostory.com/goods/goods_view.php?goodsNo=1000000276

제조사: 애니벤더
원산지: 중국
사양:
    동작전압(Operating Voltage) 2.2 ~ 2.4V
    사용전류(Using Current): 20mA 미만
    크기: 넓이 5mm x 높이 36.5mm

1.0K 저항과 LED를 연결 후 측정 전류는 0.89mA였습니다. 그럼 LED에 전류를 낮추게 만드는 저항이 걸렸다고 생각해도 될까요? 실제로 다음과 같이 계산할 수 있습니다.

(1.0KΩ + LED) * 0.89mA = 3.3v
(1.0KΩ + LED) = 3.3v / 0.89mA = 약 3.7K

(1.0KΩ + 2.7K) * 0.89mA = 약 3.3v

따라서, 대략 LED 하나가 2.7K 정도의 저항 역할을 하는 것입니다. 전압을 계산해 볼까요?

측정 전압:
    LED: 2.368V
    1.0KΩ: 0.895V
    합: 2.368 + 0.895 = 3.263V

계산 전압:
    LED: 약 2.403v = 2.7K * 0.89mA
    1.0KΩ: 약 0.89V = 1.0K * 0.89mA
    합: 2.403 + 0.89 = 3.293V (약 3.3V)

측정 결과와 계산 결과가 LED에 약간 오차가 나는군요.

그렇다면 2.2K 저항(2.178K) + LED로 바꾸면 어떻게 될까요? 측정 전류는 0.43mA로 1.0K에 비해 거의 반 토막 났고, 나머지 계산은 다음과 같이 할 수 있습니다.

(2.2KΩ + LED) * 0.43mA = 3.3v
(2.2KΩ + LED) = 3.3v / 0.43mA = 약 7.6K

(2.2KΩ + 5.4K) * 0.43mA = 약 3.3v

따라서, 대략 LED 하나가 5.4K 정도의 저항 역할을 하는 것입니다. 전압을 계산해 볼까요?

측정 전압:
    LED: 2.28V
    2.2KΩ: 0.981V
    합: 2.28V + 0.981V = 3.261V

계산 전압:
    LED: 약 2.28v = 5.4K * 0.43mA
    2.2KΩ: 약 0.98V = 2.2K * 0.43mA
    합: 2.28 + 0.98 = 3.26V (약 3.3V)

이번엔 측정과 계산이 거의 일치하고 있습니다.

LED의 사양에 보면 동작 전압이 2.2 ~ 2.4V로 되어 있고 위의 회로에서 LED에 걸린 전압은 1.0K의 경우 2.368V, 2.2K의 경우 2.28V입니다. 따라서 LED가 타지 않고 잘 버티게 되는 것 같습니다. 만약 이 상태에서 저항을 제거해 버리면 LED에 완전하게 3.3V가 걸리는 것은 물론이고 LED가 허용한 20mA를 초과하게 되므로 손상을 입게 되는 거라고... 이해하면 될까요? ^^




아두이노의 경우 3.3v 핀에서 제공할 수 있는 최대 전류가 200mA라고 합니다. 즉, 200mA를 제대로 쓰려면 회로의 저항은,

0.2 = 3.3 / R
0.2 * R = 3.3
R = 3.3 / 0.2
R = 16Ω

대략 16Ω 정도로 낮춰져야 합니다. 테스트를 위해 약 20Ω(19.6) 정도의 저항을 연결하고 전류를 측정하니 122mA 정도가 나왔고 저항의 전압은 2.96v가 나왔습니다.

2.96 = 0.122 * R (R = 24.26...)

이상하군요. R은 분명 20Ω 정도였는데 측정으로는 24Ω으로 올라간 것처럼 되었습니다. 그리고 저항이 낮아지다 보니 회로의 선들에 걸린 저항들이 의미 있는 숫자로 나오는 것 같습니다. 따라서, "3.3v - 2.96v = 0.34v" 전압에 대해 계산해 보면,

0.34 = 0.122 * R (R = 2.786...)

회로의 다른 부분에서 약 2.8Ω 정도의 저항 역할을 하고 있는 것입니다.

테스트를 위해 9.5Ω 정도의 저항을 연결하고 전류를 측정하니 196mA 정도가 나왔고, 저항의 전압은 2.69v가 나왔습니다.

2.69 = 0.196 * R (R = 13.72...)

회로의 다른 부분에 대한 저항은 3.1Ω 정도로 높아졌습니다.

(3.3 - 2.69) = 0.196 * R (R = 3.112...)

한번 더 4.8Ω 저항을 연결하고 전류를 측정하니 274mA, 전압은 2.28v가 나왔습니다.

2.28 = 0.274 * R (R = 8.32...)

마찬가지로 나머지 영역의 저항은 3.7Ω 정도로 높아집니다.

(3.3 - 2.28) = 0.274 * R (R = 3.72...)

이게 맞게 하는 건가...? 라는 의문이 드는군요. ^^;




다음의 책에 보면,

짜릿짜릿 전자회로 DIY (2판) 뜯고 태우고 맛보고, 몸으로 배우는
; http://www.yes24.com/24/goods/33342224

LED를 위한 적당한 저항값을 찾는 방법이 나옵니다. 제가 사용할 LED의 사양이,

동작전압(Operating Voltage) 2.2 ~ 2.4V
사용전류(Using Current): 20mA 미만

이렇기 때문에 LED가 2.2 ~ 2.4V 사이의 전압을 사용하면서 20mA 미만으로 흘러야 한다고 합니다. 이럴 때 LED가 2.2 ~ 2.4V를 소모한다고 되어 있으므로 대략 중간값인 2.3V로 가정하고 3.3V 입력 전압에 대해 2.3V를 사용하므로 나머지 전압이 1.0V가 됩니다.

그리고 그 1.0V 전압에서 20mA 미만으로 전류가 흘러야 하니 저항은 다음과 같이 구할 수 있습니다.

1.0v = 0.02 * R (R = 50)

즉, 50Ω 짜리 저항을 연결하면 회로에 20mA 정도의 전류가 흐르며 3.3v 중 2.3v 정도가 LED에 사용되어 가장 높은 밝기를 내게 되는 것입니다. 정말 그런지 한번 해봐야죠. ^^

회로에 측정값 기준 51.3Ω에 해당하는 저항을 하나 두고, LED를 연결했습니다. 이때 전류는 8.11mA가 흐르고 전압은 다음과 같이 측정됩니다.

측정 전압:
    LED: 2.81v
    저항: 0.439v

LED에 걸린 (그렇게 부를 수 있다면) 저항은 다음과 같이 계산할 수 있습니다.

(51.3Ω + LED) * 0.00811A = 3.3v
(51.3Ω + LED) = 3.3v / 0.00811A = 약 406Ω, 따라서 LED는 약 355.6Ω

위의 계산으로 다시 전압을 계산해 보면,

0.00811A * 355.6 = 2.883v
0.00811A * 51.3 = 0.416v

대충 비슷한 수치를 얻게 됩니다. 그나저나 저항값 51Ω으로는 LED에 2.8v의 전압을 걸리게 하므로 적절한 수치는 아닌 것 같습니다.




문서 상으로 아두이노의 3.3v와 5v 핀에는 어느 정도의 전류가 흐를까요? 아쉽지만 딱히 문서를 찾을 수는 없었고 여기저기 검색된 글들만 나옵니다.

How much current can be drawn from an Arduino Uno's 3.3V rail?
; https://www.quora.com/How-much-current-can-be-drawn-from-an-Arduino-Unos-3-3V-rail

대략 보면, 다음과 같은 정도로 정리되는 것 같습니다.

USB 인터페이스
    5v인 경우 500mA
    3.3v인 경우 200mA.

정전압 외부 전원인 경우
    5v인 경우 1A
    3.3v는 200mA

그 외의 digital pin들은 40mA에 총 합은 200mA

또는 다른 글을 보면,

[팁/부품선택] 아두이노(Arduino) 부품 선택 및 구매 노하우
; http://bbangpan.tistory.com/7

Arduino류의 3.3V 출력 핀의 최대 전류는 대개 공식적으로 50mA이다.
Arduino UNO의 5V 핀은 USB전원이냐 12V DC전원이냐에 따라 다르지만, 소형치고는 큰 전류를 감당해 낸다(전원 전력에 따라 400mA~900mA까지도 가능).


라고 하는데, 물론 기종마다 다르기 때문에 신뢰할 수 있는 수치는 아닌 것 같습니다. 제 경우에도 3.3v 핀에서 저항을 4.8Ω으로 낮췄을 때 측정된 전류는 274mA였습니다.

그나마 제가 찾을 수 있었던 pdf 문서를 이 글에 첨부해 두었습니다. 이 파일에 보면 다음과 같은 사양이 있습니다.

Microcontroller ATmega32u4
Operating Voltage 5V
Input Voltage (recommended) 7-12V
Input Voltage (limits) 6-20V
Digital I/O Pins 20
PWM Channels 7
Analog Input Channels 12
DC Current per I/O Pin 40 mA
DC Current for 3.3V Pin 50 mA
Flash Memory 32 KB (ATmega32u4) of which 4 KB used by bootloader
SRAM 2.5 KB (ATmega32u4)
EEPROM 1 KB (ATmega32u4)
Clock Speed 16 MHz

3.3V 핀의 DC 전류가 50mA라고 하는데... 그럼 제 테스트가 틀린 걸까요?




그나저나, 테스트하면서 물어보고 싶은 데를 찾아봤는데... 찾을 수가 없군요. ^^; 그나마 찾은 곳이 makeshare.org인데,

makeshare.org 질문 게시판
; http://makeshare.org/bbs/board.php?bo_table=question

보시면 알겠지만, (질문도 별로 없지만) 답변이 많지 않습니다. (그에 비하면, 프로그래밍 관련 개발 포럼은 정말 잘 되어 있는 편에 속하는군요. ^^)




[업데이트: 2018-08-12]
네이버 친구로 등록된 분의 추천에 의해 페이스북 그룹인 "한국 아두이노 사용자 모임"에 가입했습니다.

한국 아두이노 사용자 모임
; https://www.facebook.com/groups/easyarduino/

와~~~ 질문 답변이 굉장히 활발합니다. ^^ 이 글의 내용도 질문을 했는데요, 다음과 같은 답변을 얻었습니다.

  • LED의 전압 강하는 빛과 열로 소모되는 것
  • LED의 저항은 입력 전압에 따라 변함
  • LED 자체의 전압 강하가 있고, 그걸 제외하면 전압에 따라 전류는 지수적으로 변함
  • LED는 능동 소자이므로 동작에 필요한 최소 동작 전압이 필요하고 이때에 소모되는 전류를 측정할 수 있음.

또한 회사에 ^^ 전기/전자 전공한 직원에게 물어보니, 아두이노 핀의 전류 공급은 권장 수치이고 그것을 넘어가는 순간 아두이노 측에서 그 전류를 공급하기 위해 무리하는 거라고 합니다. 즉, 제가 가진 보드의 3.3v 핀의 DC 전류가 50mA라고 되어 있는데 그것을 넘어 200mA가 흐르도록 저항을 낮게 잡아 회로를 구성하면 아두이노 회로에 발열이 생기는 등의 문제가 발생한다고 합니다.




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 6/4/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2018-08-13 06시23분
LED + 220 저항(측정치 217.2)으로 아두이노의 5V 핀에 연결한 테스트 결과 추가

 전류 = 9.51mA
 V = IR에 의해 (217.2 + LED) * 9.51mA = 4.96V
따라서 LED가 303.8 저항에 해당.

계산상의 전압
217.2 * 9.51mA = 2.0655V
 303.8 * 9.51mA = 2.8891V
 2.06555 + 2.8891 = 4.9546V

계측기로 측정한 전압
217.2 저항 = 2.117V
 LED = 2.843V
 2.117 + 2.843 = 4.96V
정성태

... 76  77  78  79  80  81  82  [83]  84  85  86  87  88  89  90  ...
NoWriterDateCnt.TitleFile(s)
11735정성태10/12/201819744VS.NET IDE: 129. Visual Studio - 특정 문자(열)를 개행 문자로 바꾸는 방법
11734정성태10/10/201814862Linux: 4. Synology NAS(DS216+II)에 FTDI 장치 연결 후 C#(.NET Core)으로 DTR 제어파일 다운로드1
11733정성태10/10/201817197Linux: 3. Synology NAS(DS216+II)에서 FTDI 장치를 C/C++로 제어
11732정성태10/10/201816891디버깅 기술: 119. windbg 분석 사례 - 종료자(Finalizer)에서 예외가 발생한 경우 비정상 종료(Crash) 발생파일 다운로드1
11731정성태10/9/201816654개발 환경 구성: 409. C# - REST API를 이용해 Azure Kudu 서비스 이용 - 웹 앱 확장 처리파일 다운로드1
11730정성태10/9/201815446개발 환경 구성: 408. C# - REST API를 이용해 Azure Kudu 서비스 이용 - 파일 처리파일 다운로드1
11729정성태10/9/201817588Windows: 150. 윈도우에서 ARP Cache 목록 확인 및 삭제하는 방법
11728정성태10/9/201816025사물인터넷: 50. Audio Jack 커넥터의 IR 적외선 송신기 [1]
11727정성태10/8/201816951오류 유형: 491. Visual Studio의 리눅스 SSH 원격 연결 - "Connectivity Failure. Please make sure host name and port number are correct."
11726정성태10/7/201819393사물인터넷: 49. 라즈베리 파이를 이용해 원격 컴퓨터의 전원 스위치 제어파일 다운로드1
11724정성태10/5/201818105개발 환경 구성: 407. 유니코드와 한글 - "Hangul Compatibility Jamo"파일 다운로드1
11723정성태10/4/201814156개발 환경 구성: 406. "Docker for Windows" 컨테이너 내의 .NET Core 응용 프로그램에서 직렬 포트(Serial Port, COM Port) 사용 방법
11722정성태10/4/201816730.NET Framework: 798. C# - Hyper-V 가상 머신의 직렬 포트와 연결된 Named Pipe 간의 통신파일 다운로드1
11721정성태10/4/201817217.NET Framework: 797. Linux 환경의 .NET Core 응용 프로그램에서 직렬 포트(Serial Port, COM Port) 사용 방법파일 다운로드1
11720정성태10/4/201818656개발 환경 구성: 405. Hyper-V 가상 머신에서 직렬 포트(Serial Port, COM Port) 사용
11719정성태10/4/201819572.NET Framework: 796. C# - 인증서를 윈도우에 설치하는 방법
11718정성태10/4/201814544개발 환경 구성: 404. (opkg가 설치된) Synology NAS(DS216+II)에 cmake 설치
11717정성태10/3/201817472사물인터넷: 48. 넷두이노의 C# 네트워크 프로그램 [1]
11716정성태10/3/201817748사물인터넷: 47. Raspberry PI Zero (W)에 FTDI 장치 연결 후 C/C++로 DTR 제어파일 다운로드1
11715정성태10/3/201816929사물인터넷: 46. Raspberry PI Zero (W)에 docker 설치
11714정성태10/2/201815976사물인터넷: 45. Raspberry PI에 ping을 hostname으로 하는 방법
11713정성태10/2/201818742개발 환경 구성: 403. Synology NAS(DS216+II)에 docker 설치 후 .NET Core 2.1 응용 프로그램 실행하는 방법
11712정성태10/2/201823635.NET Framework: 795. C# - 폰트 목록을 한글이 아닌 영문으로 구하는 방법 [3]
11711정성태10/2/201819192오류 유형: 490. 윈도우 라이선스 키 입력 오류 0xc004f050, 0xc004e028
11710정성태10/2/201817628.NET Framework: 794. C# - 같은 모양, 다른 값의 한글 자음을 비교하는 호환 분해 [5]
11709정성태9/30/201815757개발 환경 구성: 402. .NET Core 콘솔 응용 프로그램을 docker로 실행/디버깅하는 방법 [1]
... 76  77  78  79  80  81  82  [83]  84  85  86  87  88  89  90  ...