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)
12870정성태12/9/20216064개발 환경 구성: 614. 파이썬 - PyPI 패키지 만들기 (4) package_data 옵션
12869정성태12/8/20218266개발 환경 구성: 613. git clone 실행 시 fingerprint 묻는 단계를 생략하는 방법
12868정성태12/7/20216836오류 유형: 770. twine 업로드 시 "HTTPError: 400 Bad Request ..." 오류 [1]
12867정성태12/7/20216545개발 환경 구성: 612. 파이썬 - PyPI 패키지 만들기 (3) entry_points 옵션
12866정성태12/7/202113917오류 유형: 769. "docker build ..." 시 "failed to solve with frontend dockerfile.v0: failed to read dockerfile ..." 오류
12865정성태12/6/20216612개발 환경 구성: 611. 파이썬 - PyPI 패키지 만들기 (2) long_description, cmdclass 옵션
12864정성태12/6/20215085Linux: 46. WSL 환경에서 find 명령을 사용해 파일을 찾는 방법
12863정성태12/4/20216982개발 환경 구성: 610. 파이썬 - PyPI 패키지 만들기
12862정성태12/3/20215724오류 유형: 768. Golang - 빌드 시 "cmd/go: unsupported GOOS/GOARCH pair linux /amd64" 오류
12861정성태12/3/20217948개발 환경 구성: 609. 파이썬 - "Windows embeddable package"로 개발 환경 구성하는 방법
12860정성태12/1/20216053오류 유형: 767. SQL Server - 127.0.0.1로 접속하는 경우 "Access is denied"가 발생한다면?
12859정성태12/1/202112203개발 환경 구성: 608. Hyper-V 가상 머신에 Console 모드로 로그인하는 방법
12858정성태11/30/20219456개발 환경 구성: 607. 로컬의 USB 장치를 원격 머신에 제공하는 방법 - usbip-win
12857정성태11/24/20216943개발 환경 구성: 606. WSL Ubuntu 20.04에서 파이썬을 위한 uwsgi 설치 방법
12856정성태11/23/20218723.NET Framework: 1121. C# - 동일한 IP:Port로 바인딩 가능한 서버 소켓 [2]
12855정성태11/13/20216118개발 환경 구성: 605. Azure App Service - Kudu SSH 환경에서 FTP를 이용한 파일 전송
12854정성태11/13/20217665개발 환경 구성: 604. Azure - 윈도우 VM에서 FTP 여는 방법
12853정성태11/10/20216044오류 유형: 766. Azure App Service - JBoss 호스팅 생성 시 "This region has quota of 0 PremiumV3 instances for your subscription. Try selecting different region or SKU."
12851정성태11/1/20217368스크립트: 34. 파이썬 - MySQLdb 기본 예제 코드
12850정성태10/27/20218514오류 유형: 765. 우분투에서 pip install mysqlclient 실행 시 "OSError: mysql_config not found" 오류
12849정성태10/17/20217687스크립트: 33. JavaScript와 C#의 시간 변환 [1]
12848정성태10/17/20218642스크립트: 32. 파이썬 - sqlite3 기본 예제 코드 [1]
12847정성태10/14/20218481스크립트: 31. 파이썬 gunicorn - WORKER TIMEOUT 오류 발생
12846정성태10/7/20218251스크립트: 30. 파이썬 __debug__ 플래그 변수에 따른 코드 실행 제어
12845정성태10/6/20218094.NET Framework: 1120. C# - BufferBlock<T> 사용 예제 [5]파일 다운로드1
12844정성태10/3/20216127오류 유형: 764. MSI 설치 시 "... is accessible and not read-only." 오류 메시지
... 16  17  18  19  20  21  22  23  24  25  26  27  28  29  [30]  ...