SantyagoSantyago
YouTube RSS Google+ Facebook GitHub

Okazje Allegro

Zasilacz impulsowy Mean Well RSP-320-12 / 320W

Zasilacz impulsowy Mean Well RSP-320-12 / 320W
Kup teraz: 115,00 zł

Przycisk wandaloodporny 16mm, LED RGB, S-W-K, 1NO

Przycisk wandaloodporny 16mm, LED RGB, S-W-K, 1NO
Kup teraz: 32,00 zł

Arduino poradnik

Wstęp

Teoria

Biblioteki

Komponenty

Czujniki i sensory

Rozwiązania i algorytmy

Narzędzia

Mikrokontrolery i Arduino IDE

Arduino i klony

Poradniki wideo

Sprzęt dostarczają

Reklama na Blogu

Najnowsze poradniki

Ostatnie komentarze

Popularne wpisy

Facebook

Google+

Ostatnie fotografie

polskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorywieliczka-szyb-danilowicza

Dwukierunkowy cyfrowy czujnik prądu/mocy INA219

INA219 jest miniaturowym, dwukierunkowym czujnikiem prądu i mocy, współpracujący z zewnętrznym rezystorem bocznikującym. Można go znaleźć między innymi w systemach komputerowych, zasilaczach oraz ładowarkach. Jego działanie polega na pomiarze spadku napięcia na rezystorze bocznikującym oraz napięcia zasilającego bocznik. Na podstawie tych dwóch wartości wyznaczana jest wartość prądu oraz mocy pobieranej przez obciążenie.

Układ charakteryzują się dokładnością ±1% oraz 12-bitową rozdzielczością wewnętrznego przetwornika A/C. Takie parametry pozwalają na uzyskanie dużej dokładności pomiaru nawet przy znikomym spadku napięcia na rezystorze bocznikującym. Napięcie szyny może mieć wartość z zakresu od 0V ÷ 26V, natomiast rejestry pozwalają na odczyt natężenia prądu i mocy bezpośrednio w amperach i watach. Napięcie zasilania może mieścić się w zakresie 3V ÷ 5V.

W przypadku pracy w otoczeniu o sporych zakłóceniach elektromagnetycznych możliwe jest uśrednianie 128 próbek pomiarowych. Konfiguracja parametrów oraz odczyt wyników odbywa się za pośrednictwem szyny I2C mogącej pracować z zegarem do 3,4 MHz.

INA219 dostępna jest w dwóch wersjach obudowy, które różnią się wyprowadzeniami.

Dokumentacja techniczna: http://www.jarzebski.pl/datasheets/INA219.pdf

Poniższy wpis będzie dotyczył układu INA219 w wariancie obudowy SOT23-8. Aby ułatwić sobie prototypowanie, możemy przylutować go do przejściówki SOT23-8 na DIP8. Zalecane jest również wykorzystanie rezystora bocznikującego o wartości 0.1Ω, tolerancji 1% oraz mocy 2W ÷ 3W. Ja wykorzystałem rezystor SMD firmy Bourns z dolutowanymi nóżkami.

 

Schemat połączeń

Podłączenie układu jest bardzo proste. Układ zasilamy napięciem 5V z kondensatorem filtrującym 0.1μF. Linie sterujące SCL oraz SDA podłączamy do Arduino, podciągając rezystorami 10kΩ do zasilania. Piny A0 i A1 podłączamy do masy, dzięki czemu INA219 będzie posiadał adres 0x40 na szynie I2C. Stosując różne kombinacje połączeń A0 i A1, możemy uzyskać 16 różnych adresów.

Konfiguracja połączeń A0 i A1

Wreszcie na koniec, do VIN+ oraz VIN- podłączamy rezystor bocznikujący i przepuszczamy przez niego obciążenie (maksymalnie 26V / 3.5A dla rezystora bocznikującego 0.1Ω).

Jeśli chcemy mierzyć większe prądy, wystarczy zmienić rezystor bocznikujący, powiedzmy na 0.01Ω. Pozwoli nam to na mierzenie prądu do 35A w rozdzielczości 0.8mA.

 

Program

Do obsługi modułów z układami INA219 przygotowałem bibliotekę dla Arduino, którą można pobrać z repozytorium Git: https://github.com/jarzebski/Arduino-INA219

  1. #include <Wire.h>
  2. #include <INA219.h>
  3.  
  4. INA219 ina;
  5.  
  6. void checkConfig()
  7. {
  8.   Serial.print("Mode:                 ");
  9.   switch (ina.getMode())
  10.   {
  11.     case INA219_MODE_POWER_DOWN:      Serial.println("Power-Down"); break;
  12.     case INA219_MODE_SHUNT_TRIG:      Serial.println("Shunt Voltage, Triggered"); break;
  13.     case INA219_MODE_BUS_TRIG:        Serial.println("Bus Voltage, Triggered"); break;
  14.     case INA219_MODE_SHUNT_BUS_TRIG:  Serial.println("Shunt and Bus, Triggered"); break;
  15.     case INA219_MODE_ADC_OFF:         Serial.println("ADC Off"); break;
  16.     case INA219_MODE_SHUNT_CONT:      Serial.println("Shunt Voltage, Continuous"); break;
  17.     case INA219_MODE_BUS_CONT:        Serial.println("Bus Voltage, Continuous"); break;
  18.     case INA219_MODE_SHUNT_BUS_CONT:  Serial.println("Shunt and Bus, Continuous"); break;
  19.     default: Serial.println("unknown");
  20.   }
  21.  
  22.   Serial.print("Range:                ");
  23.   switch (ina.getRange())
  24.   {
  25.     case INA219_RANGE_16V:            Serial.println("16V"); break;
  26.     case INA219_RANGE_32V:            Serial.println("32V"); break;
  27.     default: Serial.println("unknown");
  28.   }
  29.  
  30.   Serial.print("Gain:                 ");
  31.   switch (ina.getGain())
  32.   {
  33.     case INA219_GAIN_40MV:            Serial.println("+/- 40mV"); break;
  34.     case INA219_GAIN_80MV:            Serial.println("+/- 80mV"); break;
  35.     case INA219_GAIN_160MV:           Serial.println("+/- 160mV"); break;
  36.     case INA219_GAIN_320MV:           Serial.println("+/- 320mV"); break;
  37.     default: Serial.println("unknown");
  38.   }
  39.  
  40.   Serial.print("Bus resolution:       ");
  41.   switch (ina.getBusRes())
  42.   {
  43.     case INA219_BUS_RES_9BIT:         Serial.println("9-bit"); break;
  44.     case INA219_BUS_RES_10BIT:        Serial.println("10-bit"); break;
  45.     case INA219_BUS_RES_11BIT:        Serial.println("11-bit"); break;
  46.     case INA219_BUS_RES_12BIT:        Serial.println("12-bit"); break;
  47.     default: Serial.println("unknown");
  48.   }
  49.  
  50.   Serial.print("Shunt resolution:     ");
  51.   switch (ina.getShuntRes())
  52.   {
  53.     case INA219_SHUNT_RES_9BIT_1S:    Serial.println("9-bit / 1 sample"); break;
  54.     case INA219_SHUNT_RES_10BIT_1S:   Serial.println("10-bit / 1 sample"); break;
  55.     case INA219_SHUNT_RES_11BIT_1S:   Serial.println("11-bit / 1 sample"); break;
  56.     case INA219_SHUNT_RES_12BIT_1S:   Serial.println("12-bit / 1 sample"); break;
  57.     case INA219_SHUNT_RES_12BIT_2S:   Serial.println("12-bit / 2 samples"); break;
  58.     case INA219_SHUNT_RES_12BIT_4S:   Serial.println("12-bit / 4 samples"); break;
  59.     case INA219_SHUNT_RES_12BIT_8S:   Serial.println("12-bit / 8 samples"); break;
  60.     case INA219_SHUNT_RES_12BIT_16S:  Serial.println("12-bit / 16 samples"); break;
  61.     case INA219_SHUNT_RES_12BIT_32S:  Serial.println("12-bit / 32 samples"); break;
  62.     case INA219_SHUNT_RES_12BIT_64S:  Serial.println("12-bit / 64 samples"); break;
  63.     case INA219_SHUNT_RES_12BIT_128S: Serial.println("12-bit / 128 samples"); break;
  64.     default: Serial.println("unknown");
  65.   }
  66.  
  67.   Serial.print("Max possible current: ");
  68.   Serial.print(ina.getMaxPossibleCurrent());
  69.   Serial.println(" A");
  70.  
  71.   Serial.print("Max current:          ");
  72.   Serial.print(ina.getMaxCurrent());
  73.   Serial.println(" A");
  74.  
  75.   Serial.print("Max shunt voltage:    ");
  76.   Serial.print(ina.getMaxShuntVoltage());
  77.   Serial.println(" V");
  78.  
  79.   Serial.print("Max power:            ");
  80.   Serial.print(ina.getMaxPower());
  81.   Serial.println(" W");
  82. }
  83.  
  84. void setup()
  85. {
  86.   Serial.begin(115200);
  87.  
  88.   Serial.println("Initialize INA219");
  89.   Serial.println("-----------------------------------------------");
  90.  
  91.   // Default INA219 address is 0x40
  92.   ina.begin();
  93.  
  94.   // Configure INA219
  95.   ina.configure(INA219_RANGE_32V, INA219_GAIN_320MV, INA219_BUS_RES_12BIT, INA219_SHUNT_RES_12BIT_1S);
  96.  
  97.   // Calibrate INA219 for Rshunt = 0.1 ohm and max excepted current = 2A
  98.   ina.calibrate(0.1, 2);
  99.  
  100.   // Display configuration
  101.   checkConfig();
  102.  
  103.   Serial.println("-----------------------------------------------");
  104. }
  105.  
  106. void loop()
  107. {
  108.   Serial.print("Bus voltage:   ");
  109.   Serial.print(ina.readBusVoltage(), 5);
  110.   Serial.println(" V");
  111.  
  112.   Serial.print("Bus power:     ");
  113.   Serial.print(ina.readBusPower(), 5);
  114.   Serial.println(" W");
  115.  
  116.  
  117.   Serial.print("Shunt voltage: ");
  118.   Serial.print(ina.readShuntVoltage(), 5);
  119.   Serial.println(" V");
  120.  
  121.   Serial.print("Shunt current: ");
  122.   Serial.print(ina.readShuntCurrent(), 5);
  123.   Serial.println(" A");
  124.  
  125.   Serial.println("");
  126.   delay(1000);
  127. }

Wynik działania programu

Materiały dodatkowe

Biblioteka INA219: https://github.com/jarzebski/Arduino-INA219
Dokumentacja techniczna: http://www.jarzebski.pl/datasheets/INA219.pdf

Udpstępnij dalej!

http://www.jarzebski.pl/arduino/czujniki-i-sensory/cyfrowy-czujnik-pradu-mocy-ina219.html

Reklama

Komentarze Komentarze
Avatar 2
reaper7 Windows / Mozilla Firefox 29.0
04 kwiecień 2014 - 09:00 Warszawa

Jak zwykle świetnie i profesjonalnie przygotowana biblioteka.
Gratulacje!

Avatar 2
Korneliusz Linux x86_64 / Mozilla Firefox 28.0
05 kwiecień 2014 - 03:37 Bytom

Wielkie dzięki :)

Avatar 1
Kamil Maciejewski Windows 7 / Safari 537.36
04 kwiecień 2014 - 13:50 Łódź

Bardzo fajny tekst. Szkoda, że nie obsługuje 230V.

Avatar 1
ja Windows 7 / Mozilla Firefox 39.0
31 lipiec 2015 - 21:10 Brak informacji

Wszystko super, ale gdzie kupić ten układzik??

Avatar 2
Korneliusz Windows / Safari 537.36
02 sierpień 2015 - 12:37 Bytom
Avatar 1
Arch Windows / Safari 537.36
23 wrzesień 2016 - 21:09 Warszawa

Cześć,
Aktualnie walczę z tymi czujnikami i mam dziwny problem. Podłączyłem bocznik za obciążeniem (12V -> load-> shunt -> mosfet -> GND) i INA219 się spalił (zaczął pobierać 100mA prądu, dopiero jego wylutowanie pomogło).
Z innym czujnikiem nic się nie stało oprócz tego, że gdy mosfet jest zablokowany, pobór prądu całego układu wynosi 150mA (normalnie bez obciążenia 60mA), dodatkowo INA zwraca dziwne wartości prądu. Przy otwartym mosfecie wartości zwracane przez INA219 są sensowne. I teraz zastanawiam się czy położenie czujnika (przed czy po obciążeniu) ma aż takie znaczenie, czy może to kwestia wadliwej serii czujników?

Avatar 2
Korneliusz Android 6.0 / Safari 537.36
24 wrzesień 2016 - 22:05 Brak informacji

Pokaż schemat , jaka wartość bocznika, jaki prąd pobiera obciążenie? Jaki mosfet?

Avatar 1
pat_i_mat Linux x86_64 / Safari 537.36
20 lipiec 2017 - 15:07 Katowice

Hej. Poszukując informacji na temat INA219 trafiłem na ten opis-jest super opisany :)
Mam pytanie odnośnie INA219... Buduję sobie urządzenie na AVR i teraz tak, jeden zasilacz dla: AVR, INA219 i odbiornik. Nie wiem czy dobrze zrozumiałem opis połączenia-zrobiłem schemat bo jak to mówią "jeden obraz, tysiąc słów" :)

Oryginalny obraz posiada rozmiar 1218x401

Skomentuj wpis