개발자/Arduino

아두이노 INA219 DC 전류 센서 사용하기

지구빵집 2021. 7. 25. 20:26
반응형

 

 

아두이노 DC 전류 측정 INA219 전류 센서 사용하기(INA219 High Side DC Current Sensor Breakout - 26V ±3.2A Max -) 

 

INA219B 브레이크아웃 보드와 INA219 FeatherWing은 모든 전력 모니터링 문제를 해결합니다. 2개의 멀티미터로 어려움을 겪는 대신 이 브레이크아웃을 사용하여 1% 정밀도로 I2C를 통한 높은 측 전압 및 DC 전류 소모를 모두 측정할 수 있습니다.  

 

INA219B 브레이크아웃 보드

 

왜 하이사이드인가?

 

당사의 전류 패널 미터와 같은 대부분의 전류 측정 장치는 로우 사이드 측정에만 적합합니다. 즉, 배터리를 사용하지 않으려면 대상 접지와 실제 접지 사이에 측정 저항을 붙여야 합니다. 저항 양단의 전압 강하는 전류 소모에 비례하기 때문에 접지 기준이 전류 변화에 따라 변한다는 것을 의미합니다. 접지 기준을 변경하면 많은 회로에 문제가 발생할 수 있습니다. INA219B의 칩은 매우 현명하다 - 그것은 3 또는 5V로 구동되더라도, + 26 VDC까지, 하이 측 전류 측정을 처리할 수 있다. 또한 배터리 수명이나 태양 전지판을 추적하는 데 유용한 높은 측 전압을 다시 보고합니다.  

 

 

어떻게 작동합니까?

 

정밀 증폭기는 0.1옴, 1% 감지 저항의 전압을 측정합니다. 증폭기의 최대 입력 차이는 ±320mV이므로 최대 ±3.2A까지 측정할 수 있습니다. 내부 12비트 ADC의 경우 ±3.2A 범위의 분해능은 0.8mA입니다. 내부 이득을 최소 div8로 설정하면 최대 전류는 ±400mA이고 분해능은 0.1mA입니다. 고급 해커는 0.1옴 전류 감지 저항을 제거하고 자체 저항으로 교체하여 범위를 변경할 수 있습니다(8mA의 분해능으로 최대 32A를 측정하려면 0.01옴).  

 

어셈블리 

 

이 보드는 사전 납땜된 모든 표면 실장 구성 요소와 함께 제공됩니다. INA219 브레이크아웃 보드를 프로젝트에 통합하는 데 도움이 되는 추가 부품이 포함되어 있습니다. 

 

INA219B 브레이크아웃 보드

 

 

와이어는 보드 가장자리의 구멍에 직접 납땜할 수 있습니다. 그러나 브레드보드를 ​​사용하려면 포함된 6핀 헤더에 납땜을 하고 싶을 것입니다. 

 

6핀 헤더

 

부하는 헤더를 통해 연결하거나 포함된 2핀 나사 단자를 사용하여 연결할 수 있습니다. 

 

2핀 나사 단자

 

 

둘 이상의 INA219 브레이크아웃 보드를 사용하는 경우 각 보드에 고유한 주소를 할당해야 합니다. 이것은 보드의 오른쪽 가장자리에 있는 주소 점퍼로 수행됩니다. 각 보드의 I2C 기본 주소는 0x40입니다. 주소 점퍼로 프로그래밍한 이진 주소가 기본 I2C 주소에 추가됩니다.

 

주소 오프셋을 프로그래밍하려면 솔더 한 방울을 사용하여 주소의 각 바이너리 '1'에 해당하는 주소 점퍼를 연결합니다. 

 

주소 점퍼를 연결

 

최대 4개의 보드를 연결할 수 있습니다. 주소 지정은 다음과 같습니다.

  • 보드 0 : 주소 = 0x40 오프셋 = 바이너리 00000(점퍼 필요 없음)
  • 보드 1 : 주소 = 0x41 오프셋 = 바이너리 00001(위 사진과 같이 브리지 A0)
  • 보드 2 : 주소 = 0x44 오프셋 = 바이너리 00100( 브리지 A1)
  • 보드 3 : 주소 = 0x45 오프셋 = 바이너리 00101(브리지 A0 & A1) 

 

배선 

 

INA219 브레이크아웃 보드는 Arduino의 5V 또는 3V 핀으로 전원을 공급받을 수 있으며 I2C를 통해 통신합니다. 

 

INA219 브레이크아웃 보드

 

마이크로프로세서에 연결

  • GND를 GND에 연결
  • VCC를 5v에 연결 그런 다음
  • SDA를 SDA에 연결합니다(R3 이전 Arduino의 아날로그 핀 4).
  • SCL을 SCL에 연결합니다(R3 이전 Arduino의 아날로그 핀 5) 

 

R3 이상 Arduinos에서는 AREF 핀 옆에 있는 새로운 전용 SDA 및 SCL 핀에 연결할 수 있습니다. R3 이전 Megas에서 SDA 및 SCL은 핀 20 및 21에 있습니다.

 

다음으로 측정하려는 회로에 INA219 전류 센서를 삽입해야 합니다. 

 

 

DC 모터와 같이 급격한 전류 소모를 유발할 수 있는 노이즈가 있는 부하를 삽입할 경우 전원 라인에 문제를 일으킬 수 있고 INA219가 재설정되는 등의 원인이 될 수 있으므로 주의하십시오. DC 모터 또는 유사한 장치를 사용할 때는 다음을 확인하십시오. 전원 공급 장치에서 모터를 분리하는 큰 커패시터를 포함하고 유도 스파이크로부터 보호하기 위해 스너버 다이오드를 사용합니다. 

 

회로에 연결

 

  • 테스트 중인 회로에 대한 전원 공급 장치의 양극 단자에 V+를 연결합니다.
  • V-를 부하의 양극 단자 또는 리드에 연결합니다. 이렇게 하면 감지 저항이 회로와 인라인됩니다.
  • 마지막으로 전원 공급 장치의 음극 단자에서 GND로 와이어를 연결합니다. 이를 통해 센서는 부하 전압과 부하 전류를 측정할 수 있습니다.
  • 아래 사진은 Adafruit 모터 실드에서 모터 공급 전류를 측정하도록 구성된 INA219 브레이크아웃 보드를 보여줍니다. 

 

아두이노 코드

 

Adafruit INA219 브레이크아웃 보드 프로그래밍은 라이브러리를 사용하여 간단합니다. 라이브러리 설치 Arduino 라이브러리 관리자를 엽니다. 

 

 

Adafruit INA219 라이브러리를 검색하여 설치하십시오. 

 

 

또한 Arduino 라이브러리 설치에 대한 훌륭한 자습서가 있습니다. 

 

예제 로드 " 파일 -> 예 -> Adafruit_INA219 -> getcurrent "를 선택하십시오. "getcurrent" 예제 코드는 새 IDE 창에서 열려야 합니다. 아래 코드를 나타냅니다.

 

#include <Wire.h>
#include <Adafruit_INA219.h>

Adafruit_INA219 ina219;


void setup(void) 
{
  Serial.begin(115200);
  while (!Serial) {
      // will pause Zero, Leonardo, etc until serial console opens
      delay(1);
  }

  uint32_t currentFrequency;
    
  Serial.println("Hello!");
  
  // Initialize the INA219.
  // By default the initialization will use the largest range (32V, 2A).  However
  // you can call a setCalibration function to change this range (see comments).
  if (! ina219.begin()) {
    Serial.println("Failed to find INA219 chip");
    while (1) { delay(10); }
  }
  // To use a slightly lower 32V, 1A range (higher precision on amps):
  //ina219.setCalibration_32V_1A();
  // Or to use a lower 16V, 400mA range (higher precision on volts and amps):
  //ina219.setCalibration_16V_400mA();

  Serial.println("Measuring voltage and current with INA219 ...");
}

void loop(void) 
{
  float shuntvoltage = 0;
  float busvoltage = 0;
  float current_mA = 0;
  float loadvoltage = 0;
  float power_mW = 0;

  shuntvoltage = ina219.getShuntVoltage_mV();
  busvoltage = ina219.getBusVoltage_V();
  current_mA = ina219.getCurrent_mA();
  power_mW = ina219.getPower_mW();
  loadvoltage = busvoltage + (shuntvoltage / 1000);
  
  Serial.print("Bus Voltage:   "); Serial.print(busvoltage); Serial.println(" V");
  Serial.print("Shunt Voltage: "); Serial.print(shuntvoltage); Serial.println(" mV");
  Serial.print("Load Voltage:  "); Serial.print(loadvoltage); Serial.println(" V");
  Serial.print("Current:       "); Serial.print(current_mA); Serial.println(" mA");
  Serial.print("Power:         "); Serial.print(power_mW); Serial.println(" mW");
  Serial.println("");

  delay(2000);
}

 

 

 

실행! IDE에서 업로드 버튼을 클릭합니다. "업로드 완료"되면 직렬 모니터를 열고 속도를 115200 보드로 설정하십시오. 출력은 아래 샘플과 유사하게 나타나야 합니다. 

 

출력

 

사용자 정의 프로젝트 요구 사항에 맞게 예제 코드를 조정, 확장 또는 수정할 수 있습니다. 사용 가능한 라이브러리 기능에 대한 자세한 설명은 다음 페이지의 라이브러리 참조를 참조하십시오. 

 

 

참고

Adafruit INA219 Current Sensor Breakout: 이미지 참고

마이크로 펀 INA219 실습 설명

마이크로펀-INA219 DC 전류 측정

 

 

 

 

반응형