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)
11861정성태4/6/201919519디버깅 기술: 126. windbg - .NET x86 CLR2/CLR4 EXE의 EntryPoint
11860정성태4/5/201923362오류 유형: 527. Visual C++ 컴파일 오류 - error C2220: warning treated as error - no 'object' file generated
11859정성태4/4/201920593디버깅 기술: 125. WinDbg로 EXE의 EntryPoint에서 BP 거는 방법
11858정성태3/27/201921432VC++: 129. EXE를 LoadLibrary로 로딩해 PE 헤더에 있는 EntryPoint를 직접 호출하는 방법파일 다운로드1
11857정성태3/26/201919377VC++: 128. strncpy 사용 시 주의 사항(Linux / Windows)
11856정성태3/25/201919645VS.NET IDE: 134. 마이크로소프트의 CoreCLR 프로파일러 리눅스 예제를 Visual Studio F5 원격 디버깅하는 방법 [1]파일 다운로드1
11855정성태3/25/201921770개발 환경 구성: 436. 페이스북 HTTPS 인증을 localhost에서 테스트하는 방법
11854정성태3/25/201917468VS.NET IDE: 133. IIS Express로 호스팅하는 사이트를 https로 접근하는 방법
11853정성태3/24/201920179개발 환경 구성: 435. 존재하지 않는 IP 주소에 대한 Dns.GetHostByAddress/gethostbyaddr/GetNameInfoW 실행이 느리다면? - 두 번째 이야기 [1]
11852정성태3/20/201919498개발 환경 구성: 434. 존재하지 않는 IP 주소에 대한 Dns.GetHostByAddress/gethostbyaddr/GetNameInfoW 실행이 느리다면?파일 다운로드1
11851정성태3/19/201923270Linux: 8. C# - 리눅스 환경에서 DllImport 대신 라이브러리 동적 로드 처리 [2]
11850정성태3/18/201922213.NET Framework: 813. C# async 메서드에서 out/ref/in 유형의 인자를 사용하지 못하는 이유
11849정성태3/18/201921626.NET Framework: 812. pscp.exe 기능을 C#으로 제어하는 방법파일 다운로드1
11848정성태3/17/201918312스크립트: 14. 윈도우 CMD - 파일이 변경된 경우 파일명을 변경해 복사하고 싶다면?
11847정성태3/17/201922832Linux: 7. 리눅스 C/C++ - 공유 라이브러리 동적 로딩 후 export 함수 사용 방법파일 다운로드1
11846정성태3/15/201921449Linux: 6. getenv, setenv가 언어/운영체제마다 호환이 안 되는 문제
11845정성태3/15/201921646Linux: 5. Linux 응용 프로그램의 (C++) so 의존성 줄이기(ReleaseMinDependency) [3]
11844정성태3/14/201922951개발 환경 구성: 434. Visual Studio 2019 - 리눅스 프로젝트를 이용한 공유/실행(so/out) 프로그램 개발 환경 설정 [1]파일 다운로드1
11843정성태3/14/201917908기타: 75. MSDN 웹 사이트를 기본으로 영문 페이지로 열고 싶다면?
11842정성태3/13/201916308개발 환경 구성: 433. 마이크로소프트의 CoreCLR 프로파일러 예제를 Visual Studio CMake로 빌드하는 방법 [1]파일 다운로드1
11841정성태3/13/201916618VS.NET IDE: 132. Visual Studio 2019 - CMake의 컴파일러를 기본 g++에서 clang++로 변경
11840정성태3/13/201918182오류 유형: 526. 윈도우 10 Ubuntu App 환경에서는 USB 외장 하드 접근 불가
11839정성태3/12/201922111디버깅 기술: 124. .NET Core 웹 앱을 호스팅하는 Azure App Services의 프로세스 메모리 덤프 및 windbg 분석 개요 [3]
11838정성태3/7/201925692.NET Framework: 811. (번역글) .NET Internals Cookbook Part 1 - Exceptions, filters and corrupted processes [1]파일 다운로드1
11837정성태3/6/201939677기타: 74. 도서: 시작하세요! C# 7.3 프로그래밍 [10]
11836정성태3/5/201923209오류 유형: 525. Visual Studio 2019 Preview 4/RC - C# 8.0 Missing compiler required member 'System.Range..ctor' [1]
... 76  77  78  79  80  81  82  [83]  84  85  86  87  88  89  90  ...