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)
12893정성태12/27/20218692.NET Framework: 1124. C# - .NET Platform Extension의 ObjectPool<T> 사용법 소개파일 다운로드1
12892정성태12/26/20216675기타: 83. unsigned 형의 이전 값이 최댓값을 넘어 0을 지난 경우, 값의 차이를 계산하는 방법
12891정성태12/23/20216602스크립트: 38. 파이썬 - uwsgi의 --master 옵션
12890정성태12/23/20216740VC++: 152. Golang - (문자가 아닌) 바이트 위치를 반환하는 strings.IndexRune 함수
12889정성태12/22/20219147.NET Framework: 1123. C# - (SharpDX + DXGI) 화면 캡처한 이미지를 빠르게 JPG로 변환하는 방법파일 다운로드1
12888정성태12/21/20217343.NET Framework: 1122. C# - ImageCodecInfo 사용 시 System.Drawing.Image와 System.Drawing.Bitmap에 따른 Save 성능 차이파일 다운로드1
12887정성태12/21/20219366오류 유형: 777. OpenCVSharp4를 사용한 프로그램 실행 시 "The type initializer for 'OpenCvSharp.Internal.NativeMethods' threw an exception." 예외 발생
12886정성태12/20/20217325스크립트: 37. 파이썬 - uwsgi의 --enable-threads 옵션 [2]
12885정성태12/20/20217562오류 유형: 776. uwsgi-plugin-python3 환경에서 MySQLdb 사용 환경
12884정성태12/20/20216649개발 환경 구성: 620. Windows 10+에서 WMI root/Microsoft/Windows/WindowsUpdate 네임스페이스 제거
12883정성태12/19/20217487오류 유형: 775. uwsgi-plugin-python3 환경에서 "ModuleNotFoundError: No module named 'django'" 오류 발생
12882정성태12/18/20216596개발 환경 구성: 619. Windows Server에서 WSL을 위한 리눅스 배포본을 설치하는 방법
12881정성태12/17/20217144개발 환경 구성: 618. WSL Ubuntu 20.04에서 파이썬을 위한 uwsgi 설치 방법 (2)
12880정성태12/16/20216916VS.NET IDE: 170. Visual Studio에서 .NET Core/5+ 역어셈블 소스코드 확인하는 방법
12879정성태12/16/202113142오류 유형: 774. Windows Server 2022 + docker desktop 설치 시 WSL 2로 선택한 경우 "Failed to deploy distro docker-desktop to ..." 오류 발생
12878정성태12/15/20218187개발 환경 구성: 617. 윈도우 WSL 환경에서 같은 종류의 리눅스를 다중으로 설치하는 방법
12877정성태12/15/20216860스크립트: 36. 파이썬 - pymysql 기본 예제 코드
12876정성태12/14/20216704개발 환경 구성: 616. Custom Sources를 이용한 Azure Monitor Metric 만들기
12875정성태12/13/20216432스크립트: 35. python - time.sleep(...) 호출 시 hang이 걸리는 듯한 문제
12874정성태12/13/20216396오류 유형: 773. shell script 실행 시 "$'\r': command not found" 오류
12873정성태12/12/20217517오류 유형: 772. 리눅스 - PATH에 등록했는데도 "command not found"가 나온다면?
12872정성태12/12/20217307개발 환경 구성: 615. GoLang과 Python 빌드가 모두 가능한 docker 이미지 만들기
12871정성태12/12/20217457오류 유형: 771. docker: Error response from daemon: OCI runtime create failed
12870정성태12/9/20216060개발 환경 구성: 614. 파이썬 - PyPI 패키지 만들기 (4) package_data 옵션
12869정성태12/8/20218253개발 환경 구성: 613. git clone 실행 시 fingerprint 묻는 단계를 생략하는 방법
12868정성태12/7/20216825오류 유형: 770. twine 업로드 시 "HTTPError: 400 Bad Request ..." 오류 [1]
... 16  17  18  19  20  21  22  23  24  25  26  27  28  [29]  30  ...