Arduino : 외부 전압 측정


10

코인 셀에서 외부 전압을 측정하려고 할 때 "문제"가 있습니다. 회로를 단순화했지만 기본적으로 Arduino 5v 출력으로 구동되는 DS1307 실시간 클록과 vBat에 연결된 코인 셀을 사용하여 Arduino가 종료되는 동안 클록을 유지합니다. 내 생각은 양극 입력을 아날로그 입력에 연결하여 Arduino로 배터리 수준을 측정하고 전압 수준을 읽는 것입니다. 따라서 최대 전압이 3v이므로 3v3을 AREF로 사용하고 아날로그 기준을 외부에 설정 한 다음 정확한 결과를 읽을 수 있다고 생각했습니다. 결과는 매우 시원하며 Arduino의 측정 값은 멀티 미터에서 배터리 전압을 읽는 것과 동일합니다. Arduino (USB 연결)에서 소스 전원을 분리하면 문제가 발생합니다. 놀랍게도 Arduino는 종료되지 않습니다 (일부 LED는 계속 켜져 있음).

왜 이런 일이 발생합니까? Arduino는 아날로그 핀에서 전류를 어떻게 가져 옵니까? 이 작은 회로는 전자 수차입니까?

여기에 이미지 설명을 입력하십시오

답변:


10

전부는 아니지만 대부분 AVR 컨트롤러의 입력 핀은 클램핑 다이오드로 내부적으로 보호됩니다. 이 다이오드는 입력 전압이 공급 전압보다 높을 수 없도록합니다.

왜 이러한 내부 다이오드가 있습니까?

입력 핀 공급 전압 이상으로 상승 하고 이러한 다이오드가없는 경우 칩이 SCR 역할을하고 래치를 걸고 배터리를 단락 시키며 과전류 / 과열로 인해 칩 자체가 손상 될 수 있음을 인식해야합니다. .

Arduino가 배터리로 작동하는 이유 아래 회로도를 살펴보십시오. Vcc가 일반 전원에서 분리되면 배터리에서 D1을 통해 Vcc로가는 경로가 있습니다. 배터리 전압은 컨트롤러가 작동하기에 충분히 높습니다.

개략도

이 회로 시뮬레이션CircuitLab을 사용하여 작성된 회로도

그것을 해결하는 방법

해결책은 간단합니다. 배터리와 컨트롤러 입력 사이에 직렬로 높은 값의 저항을 추가하십시오. 대부분의 AVR에는 최대 입력 누설 전류 (I IL )가 1μA로 지정되어 있으므로 100kΩ과 같이 해당 전류에서 전압 강하를 수용 할 수 있어야합니다.

그러나 조심하십시오!

입력이 버튼 셀에서이 전류를 끌어와 수명을 단축시킬 수 있음을 알아야합니다.


10Mohm을 시도하고 ADC가 무엇을 읽고 충전 된 배터리에 대한 참조로 사용하는지 확인합니다. 원치 않는 배수를 피하려면 까다로운 측정입니다.
Andy 일명

입력 임피던스가 아닌 입력 전류로 지정되었지만 작동 할 수 있습니다. 응답은 비선형적일 수 있지만 반드시 쓸모있는 것은 아닙니다. 어떤 종류의 교정이 필요할 수 있으며 측정 된 전압이 1.1V 아래로 떨어질 때 1V1 대역 갭 기준 (3V3 외부 기준 대신)을 사용할 수 있습니다.
jippie

좋은 대답 !! 100kΩ과 50kΩ의 저항 분배기가 작동하는지 생각하고있었습니다. 이 경우 최대 배터리 전압은 3.2 볼트라고 가정합니다. 이는 1.067v의 드롭 전압을 제공하며, 이는 1v1의 내부 아날로그 기준과 호환 될 수 있습니다. 이 작동 할 수 있습니까? 아니면 배터리가 너무 빨리 소모됩니까?
alvarolb

2
배터리 용량을 모르겠습니다. mAh로 지정해야합니다. 수명에 대한 대략적인 표시는 . 코인 셀은 오래 가지 않을 수 있지만 데이터 시트를 확인해야합니다. T=mAh3V×1000100kΩ+50kΩ=mAh × (100kΩ+50kΩ)3V×1000
jippie

1
이 다이오드는 AVR뿐만 아니라 대부분의 마이크로 컨트롤러에 일반적으로 존재합니다. 그들은 다른 유형의 IC에 대해서도 들어 본 적이 없습니다.
Adam Lawrence
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.