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
정성태

... 16  17  18  19  20  [21]  22  23  24  25  26  27  28  29  30  ...
NoWriterDateCnt.TitleFile(s)
13095정성태7/7/20226295Windows: 208. AD 도메인에 참여하지 않은 컴퓨터에서 Kerberos 인증을 사용하는 방법
13094정성태7/6/20225982오류 유형: 816. Golang - "short write" 오류 원인
13093정성태7/5/20226909.NET Framework: 2029. C# - HttpWebRequest로 localhost 접속 시 2초 이상 지연
13092정성태7/3/20227836.NET Framework: 2028. C# - HttpWebRequest의 POST 동작 방식파일 다운로드1
13091정성태7/3/20226675.NET Framework: 2027. C# - IPv4, IPv6를 모두 지원하는 서버 소켓 생성 방법
13090정성태6/29/20225800오류 유형: 815. PyPI에 업로드한 패키지가 반영이 안 되는 경우
13089정성태6/28/20226291개발 환경 구성: 646. HOSTS 파일 변경 시 Edge 브라우저에 반영하는 방법
13088정성태6/27/20225418개발 환경 구성: 645. "Developer Command Prompt for VS 2022" 명령행 환경의 폰트를 바꾸는 방법
13087정성태6/23/20228352스크립트: 41. 파이썬 - FastAPI / uvicorn 호스팅 환경에서 asyncio 사용하는 방법 [1]
13086정성태6/22/20227785.NET Framework: 2026. C# 11 - 문자열 보간 개선 2가지파일 다운로드1
13085정성태6/22/20227851.NET Framework: 2025. C# 11 - 원시 문자열 리터럴(raw string literals)파일 다운로드1
13084정성태6/21/20226463개발 환경 구성: 644. Windows - 파이썬 2.7을 msi 설치 없이 구성하는 방법
13083정성태6/20/20227027.NET Framework: 2024. .NET 7에 도입된 GC의 메모리 해제에 대한 segment와 region의 차이점 [2]
13082정성태6/19/20226059.NET Framework: 2023. C# - Process의 I/O 사용량을 보여주는 GetProcessIoCounters Win32 API파일 다운로드1
13081정성태6/17/20226128.NET Framework: 2022. C# - .NET 7 Preview 5 신규 기능 - System.IO.Stream ReadExactly / ReadAtLeast파일 다운로드1
13080정성태6/17/20226757개발 환경 구성: 643. Visual Studio 2022 17.2 버전에서 C# 11 또는 .NET 7.0 preview 적용
13079정성태6/17/20224544오류 유형: 814. 파이썬 - Error: The file/path provided (...) does not appear to exist
13078정성태6/16/20226552.NET Framework: 2021. WPF - UI Thread와 Render Thread파일 다운로드1
13077정성태6/15/20226889스크립트: 40. 파이썬 - PostgreSQL 환경 구성
13075정성태6/15/20225844Linux: 50. Linux - apt와 apt-get의 차이 [2]
13074정성태6/13/20226145.NET Framework: 2020. C# - NTFS 파일에 사용자 정의 속성값 추가하는 방법파일 다운로드1
13073정성태6/12/20226345Windows: 207. Windows Server 2022에 도입된 WSL 2
13072정성태6/10/20226633Linux: 49. Linux - ls 명령어로 출력되는 디렉터리 색상 변경 방법
13071정성태6/9/20227216스크립트: 39. Python에서 cx_Oracle 환경 구성
13070정성태6/8/20227035오류 유형: 813. Windows 11에서 입력 포커스가 바뀌는 문제 [1]
13069정성태5/26/20229257.NET Framework: 2019. C# - .NET에서 제공하는 3가지 Timer 비교 [2]
... 16  17  18  19  20  [21]  22  23  24  25  26  27  28  29  30  ...