SantyagoSantyago
Avatar

Witaj!
Blog archiwalny. Już niebawem nowy serwis!

YouTube RSS Facebook GitHub

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

Reklama na Blogu

Najnowsze poradniki

Ostatnie komentarze

Ostatnie fotografie

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

Dwukierunkowy cyfrowy czujnik prądu/mocy INA226

INA226 jest kolejnym, miniaturowym, dwukierunkowym czujnikiem prądu i mocy, współpracujący z zewnętrznym rezystorem bocznikującym. Można go znaleźć w systemach komputerowych, zasilaczach oraz ładowarkach. Jego działanie polega na pomiarze spadku napięcia na rezystorze bocznikującym, napięcia zasilającego bocznik oraz napięcia zasilania szyny. Na podstawie tych trzech wartości wyznaczana jest wartość prądu oraz mocy pobieranej przez obciążenie. Jest to pierwsza różnica w metodzie pomiaru pomiędzy INA226 a poprzednio opisywanym INA219.

Układ w odróżnieniu od INA219 charakteryzuje się zwiększoną dokładnością ±0.1% oraz 16-bitową rozdzielczością wewnętrznego przetwornika A/C. Parametry te pozwalają na uzyskanie znacznie większej dokładności pomiaru bardzo małych spadków napięcia na rezystorze bocznikującym. Zwiększone jest również dopuszczalne napięcie szyny, które  może mieścić się w zakresie od 0V ÷ 36V. Podobnie jak w INA219, 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.

INA226 posiada również dodatkowe specjalne rejestry, za pomocą których możemy sterować pinem ALERT do sygnalizacji przekroczenia (lub niedobori) ustawionych wartości granicznych takich jak: pobierana moc, napięcie na rezystorze bocznikującym oraz napięcie szyny.

W przypadku pracy w otoczeniu o sporych zakłóceniach elektromagnetycznych możliwe jest uśrednianie aż 1024 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.

Zasadniczą różnicą pomiędzy INA219 a INA226 jest sposób wykonywania pomiarów. Jak pamiętamy, INA219 pozwalał na wybór rozdzielczości pomiaru napięcia szyny oraz ilości próbek napięcia na rezystorze bocznikującym. INA226 natomiast pozwala na określenie indywidualnych czasów trwania pomiarów tych wartości w przedziale 140μS ÷ 8.244mS, które wykonuje w żądanej ilości próbek pomiarowych.

INA226 dostępna jest jedynie w obudowie MSOP-10.

Dokumentacja techniczna: https://www.jarzebski.pl/datasheets/INA226.pdf

Dla ułatwienia testowania możemy przylutować układ do przejściówki MSOP-10 na DIP10. Ponieważ INA226 dopuszcza maksymalne napięcie na boczniku do 81.92mV, więc do pomiaru większych wartości prądu musimy skorzystać z nieco mniejszej jego rezystancji. Ja użyłem rezystora bocznikującego o wartości 0.01Ω, tolerancji 1% oraz mocy 3W. W takiej konfiguracji jest możliwy pomiar natężenia prądu do 8A (przy zastosowaniu bocznika 0.1Ω, będzie to 800mA).

Schemat połączeń

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 INA226 będzie posiadała adres 0x40 na szynie I2C. W odróżnieniu od INA219, dodatkowy pin VBUS mostkujemy z VIN-. Opcjonalnie, możemy wykorzystać wyjście ALERT o którym nieco później.

Oczywiście do VIN+ oraz VIN- podłączamy rezystor bocznikujący i przepuszczamy przez niego obciążenie (maksymalnie 36V / 8A dla rezystora bocznikującego 0.01Ω).

Program

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

  1. #include <Wire.h>
  2. #include <INA226.h>
  3.  
  4. INA226 ina;
  5.  
  6. void checkConfig()
  7. {
  8.   Serial.print("Mode:                  ");
  9.   switch (ina.getMode())
  10.   {
  11.     case INA226_MODE_POWER_DOWN:      Serial.println("Power-Down"); break;
  12.     case INA226_MODE_SHUNT_TRIG:      Serial.println("Shunt Voltage, Triggered"); break;
  13.     case INA226_MODE_BUS_TRIG:        Serial.println("Bus Voltage, Triggered"); break;
  14.     case INA226_MODE_SHUNT_BUS_TRIG:  Serial.println("Shunt and Bus, Triggered"); break;
  15.     case INA226_MODE_ADC_OFF:         Serial.println("ADC Off"); break;
  16.     case INA226_MODE_SHUNT_CONT:      Serial.println("Shunt Voltage, Continuous"); break;
  17.     case INA226_MODE_BUS_CONT:        Serial.println("Bus Voltage, Continuous"); break;
  18.     case INA226_MODE_SHUNT_BUS_CONT:  Serial.println("Shunt and Bus, Continuous"); break;
  19.     default: Serial.println("unknown");
  20.   }
  21.  
  22.   Serial.print("Samples average:       ");
  23.   switch (ina.getAverages())
  24.   {
  25.     case INA226_AVERAGES_1:           Serial.println("1 sample"); break;
  26.     case INA226_AVERAGES_4:           Serial.println("4 samples"); break;
  27.     case INA226_AVERAGES_16:          Serial.println("16 samples"); break;
  28.     case INA226_AVERAGES_64:          Serial.println("64 samples"); break;
  29.     case INA226_AVERAGES_128:         Serial.println("128 samples"); break;
  30.     case INA226_AVERAGES_256:         Serial.println("256 samples"); break;
  31.     case INA226_AVERAGES_512:         Serial.println("512 samples"); break;
  32.     case INA226_AVERAGES_1024:        Serial.println("1024 samples"); break;
  33.     default: Serial.println("unknown");
  34.   }
  35.  
  36.   Serial.print("Bus conversion time:   ");
  37.   switch (ina.getBusConversionTime())
  38.   {
  39.     case INA226_BUS_CONV_TIME_140US:  Serial.println("140uS"); break;
  40.     case INA226_BUS_CONV_TIME_204US:  Serial.println("204uS"); break;
  41.     case INA226_BUS_CONV_TIME_332US:  Serial.println("332uS"); break;
  42.     case INA226_BUS_CONV_TIME_588US:  Serial.println("558uS"); break;
  43.     case INA226_BUS_CONV_TIME_1100US: Serial.println("1.100ms"); break;
  44.     case INA226_BUS_CONV_TIME_2116US: Serial.println("2.116ms"); break;
  45.     case INA226_BUS_CONV_TIME_4156US: Serial.println("4.156ms"); break;
  46.     case INA226_BUS_CONV_TIME_8244US: Serial.println("8.244ms"); break;
  47.     default: Serial.println("unknown");
  48.   }
  49.  
  50.   Serial.print("Shunt conversion time: ");
  51.   switch (ina.getShuntConversionTime())
  52.   {
  53.     case INA226_SHUNT_CONV_TIME_140US:  Serial.println("140uS"); break;
  54.     case INA226_SHUNT_CONV_TIME_204US:  Serial.println("204uS"); break;
  55.     case INA226_SHUNT_CONV_TIME_332US:  Serial.println("332uS"); break;
  56.     case INA226_SHUNT_CONV_TIME_588US:  Serial.println("558uS"); break;
  57.     case INA226_SHUNT_CONV_TIME_1100US: Serial.println("1.100ms"); break;
  58.     case INA226_SHUNT_CONV_TIME_2116US: Serial.println("2.116ms"); break;
  59.     case INA226_SHUNT_CONV_TIME_4156US: Serial.println("4.156ms"); break;
  60.     case INA226_SHUNT_CONV_TIME_8244US: Serial.println("8.244ms"); break;
  61.     default: Serial.println("unknown");
  62.   }
  63.  
  64.   Serial.print("Max possible current:  ");
  65.   Serial.print(ina.getMaxPossibleCurrent());
  66.   Serial.println(" A");
  67.  
  68.   Serial.print("Max current:           ");
  69.   Serial.print(ina.getMaxCurrent());
  70.   Serial.println(" A");
  71.  
  72.   Serial.print("Max shunt voltage:     ");
  73.   Serial.print(ina.getMaxShuntVoltage());
  74.   Serial.println(" V");
  75.  
  76.   Serial.print("Max power:             ");
  77.   Serial.print(ina.getMaxPower());
  78.   Serial.println(" W");
  79. }
  80.  
  81. void setup()
  82. {
  83.   Serial.begin(115200);
  84.  
  85.   Serial.println("Initialize INA226");
  86.   Serial.println("-----------------------------------------------");
  87.  
  88.   // Default INA226 address is 0x40
  89.   ina.begin();
  90.  
  91.   // Configure INA226
  92.   ina.configure(INA226_AVERAGES_1, INA226_BUS_CONV_TIME_1100US, INA226_SHUNT_CONV_TIME_1100US, INA226_MODE_SHUNT_BUS_CONT);
  93.  
  94.   // Calibrate INA226. Rshunt = 0.01 ohm, Max excepted current = 4A
  95.   ina.calibrate(0.01, 4);
  96.  
  97.   // Display configuration
  98.   checkConfig();
  99.  
  100.   Serial.println("-----------------------------------------------");
  101. }
  102.  
  103. void loop()
  104. {
  105.   Serial.print("Bus voltage:   ");
  106.   Serial.print(ina.readBusVoltage(), 5);
  107.   Serial.println(" V");
  108.  
  109.   Serial.print("Bus power:     ");
  110.   Serial.print(ina.readBusPower(), 5);
  111.   Serial.println(" W");
  112.  
  113.  
  114.   Serial.print("Shunt voltage: ");
  115.   Serial.print(ina.readShuntVoltage(), 5);
  116.   Serial.println(" V");
  117.  
  118.   Serial.print("Shunt current: ");
  119.   Serial.print(ina.readShuntCurrent(), 5);
  120.   Serial.println(" A");
  121.  
  122.   Serial.println("");
  123.   delay(1000);
  124. }

Wynik działania programu

Wykorzystanie sygnału ALERT

INA226 posiada jeszcze bardzo przydatną funkcję jaką jest sygnał ALERT. Możemy określić, czy sygnał na tym wyjściu ma być aktywny po przekroczeniu zadanej wartości (lub kiedy znajduje się poniżej tej wartości). Rodzaj badanej wartości wybiera się za pomocą wybranej funkcji:

  • dla napięcia na szynie:
    • enableBusOvertLimitAlert();
    • enableBusUnderLimitAlert();
    • setBusVoltageLimit(v = float);
  • dla napięcia na boczniku:
    • enableShuntOverLimitAlert();
    • enableShuntUnderLimitAlert();
    • setShuntVoltageLimit(v = float);
  • dla poboru mocy:
    • enableOverPowerLimitAlert();
    • setPowerLimit(p = float);

Możliwe jest również określenie, czy aktywnym sygnałem jest stan wysoki, czy niski za pomocą funkcji: setAlertInvertedPolarity(true / false). W domyślnych ustawieniach, sygnał ALERT jest podawany tak długo, jak długo występują podane warunki pomiarowe. W przykładzie jest to przekroczenie 130mW (w momencie podłączenia drugiej diody do obciążenia, zapali się dioda niebieska)

  1. #include <Wire.h>
  2. #include <INA226.h>
  3.  
  4. INA226 ina;
  5.  
  6. void setup()
  7. {
  8.   Serial.begin(115200);
  9.  
  10.   Serial.println("Initialize INA226");
  11.   Serial.println("-----------------------------------------------");
  12.  
  13.   // Default INA226 address is 0x40
  14.   ina.begin();
  15.  
  16.   // Configure INA226
  17.   ina.configure(INA226_AVERAGES_1, INA226_BUS_CONV_TIME_1100US, INA226_SHUNT_CONV_TIME_1100US, INA226_MODE_SHUNT_BUS_CONT);
  18.  
  19.   // Calibrate INA226. Rshunt = 0.01 ohm, Max excepted current = 4A
  20.   ina.calibrate(0.01, 4);
  21.  
  22.   // Enable Bus Over-Voltage Alert
  23.   // ina.enableBusOvertLimitAlert();
  24.   // ina.enableBusUnderLimitAlert();
  25.   // ina.setBusVoltageLimit(3.33);
  26.  
  27.   // Enable Shunt Over-Voltage Alert
  28.   // ina.enableShuntOverLimitAlert();
  29.   // ina.enableShuntUnderLimitAlert();
  30.   // ina.setShuntVoltageLimit(0.0055);
  31.  
  32.   // Enable Power Over-Limit Alert
  33.   ina.enableOverPowerLimitAlert();
  34.   ina.setPowerLimit(0.130);
  35.  
  36.   // ina.setAlertInvertedPolarity(true)
  37. }
  38.  
  39. void loop()
  40. {
  41.   Serial.print("Bus voltage:   ");
  42.   Serial.print(ina.readBusVoltage(), 5);
  43.   Serial.println(" V");
  44.  
  45.   Serial.print("Bus power:     ");
  46.   Serial.print(ina.readBusPower(), 5);
  47.   Serial.println(" W");
  48.  
  49.   Serial.print("Shunt voltage: ");
  50.   Serial.print(ina.readShuntVoltage(), 5);
  51.   Serial.println(" V");
  52.  
  53.   Serial.print("Shunt current: ");
  54.   Serial.print(ina.readShuntCurrent(), 5);
  55.   Serial.println(" A");
  56.  
  57.   Serial.println("");
  58.   delay(1000);
  59. }

Całości smaku dodaje możliwość ustawienia sygnału ALERT z "zatrzaskiem". Sygnał ALERT będzie tak długo aktywny (nawet po ustaniu warunku pomiarowego), aż do momentu odczytania rejestru za pomocą funkcji isAlert() i ewnetualnego obsłużenia zdarzenia w programie:

  1. #include <Wire.h>
  2. #include <INA226.h>
  3.  
  4. INA226 ina;
  5.  
  6. void setup()
  7. {
  8.   Serial.begin(115200);
  9.  
  10.   Serial.println("Initialize INA226");
  11.   Serial.println("-----------------------------------------------");
  12.  
  13.   // Default INA226 address is 0x40
  14.   ina.begin();
  15.  
  16.   // Configure INA226
  17.   ina.configure(INA226_AVERAGES_1, INA226_BUS_CONV_TIME_1100US, INA226_SHUNT_CONV_TIME_1100US, INA226_MODE_SHUNT_BUS_CONT);
  18.  
  19.   // Calibrate INA226. Rshunt = 0.01 ohm, Max excepted current = 4A
  20.   ina.calibrate(0.01, 4);
  21.  
  22.   // Enable Power Over-Limit Alert
  23.   ina.enableOverPowerLimitAlert();
  24.   ina.setPowerLimit(0.130);
  25.   ina.setAlertLatch(true);
  26. }
  27.  
  28. void loop()
  29. {
  30.   Serial.print("Bus voltage:   ");
  31.   Serial.print(ina.readBusVoltage(), 5);
  32.   Serial.println(" V");
  33.  
  34.   Serial.print("Bus power:     ");
  35.   Serial.print(ina.readBusPower(), 5);
  36.   Serial.println(" W");
  37.  
  38.  
  39.   Serial.print("Shunt voltage: ");
  40.   Serial.print(ina.readShuntVoltage(), 5);
  41.   Serial.println(" V");
  42.  
  43.   Serial.print("Shunt current: ");
  44.   Serial.print(ina.readShuntCurrent(), 5);
  45.   Serial.println(" A");
  46.  
  47.   if (ina.isAlert())
  48.   {
  49.     // Latch will be removed here
  50.     Serial.println("ALERT");
  51.   }
  52.  
  53.   Serial.println("");
  54.   delay(1000);
  55. }

Materiały dodatkowe

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

Reklama

Komentarze Komentarze
Avatar 1
GreeX Windows XP / Mozilla Firefox 32.0
22 October 2014 - 02:01 Jaworzno

Wszystko pieknie tylko gdzie mozna nabyc ina226 w naszym kraju ??

Avatar 2
Korneliusz Linux x86_64 / Mozilla Firefox 31.0
22 October 2014 - 06:06 Bytom

INA226 jedynie chyba na Farnell - ja tam zamawiałem bez problemu: http://pl.farnell.com/texas-instruments/ina226aidgst/current-monitor-10msop/dp/1924807

INA219 znajdziesz na w sklepie ElTy: https://elty.pl/pl/p/INA219AIDR-SOP8-/1010

Avatar 1
GreeX Linux / Mozilla Firefox 33.0
07 November 2014 - 06:00 Jaworzno

Dzieki za info ....

Avatar 1
Jarlath Windows 7 / Mozilla Firefox 38.0
21 June 2015 - 17:56 Zabrze

Cześć,
W ubiegłym tygodniu dotarły do mnie sample INA226 z TI i wszystko ładnie zadziałało. Dzięki za zwrócenie uwagi i opisanie tego scalaka - okazało się, ze jest idealny na potrzeby mojego małego projektu.

Pozdrawiam
Jarlath
http://www.jarlath.net

Avatar 1
Grzegorz Windows 7 / Mozilla Firefox 41.0
21 October 2015 - 18:25 Gdynia

Cześć.

A czy jest jakiś sposób na pomiar prądu oraz mocy dla wyższczego domowego napięcia 240 V.

Pozdrawiam
Grzegirz

Avatar 2
Korneliusz Linux Ubuntu / Mozilla Firefox 41.0
24 October 2015 - 02:41 Bytom

Nie spotkałem się z takimi układami bezpośredniego napięcia, ale pomocny może okazać się ten wpis: http://forum.arduino.cc/index.php/topic,19287.0.html

Avatar 1
Dzięki za super tutorial Mac OS X / Safari 601.2.7
29 January 2016 - 00:28 Brak informacji

Chętnie bym coś takiego wykonał ale skąd wziąć rezystorki current sense ?
Skąd zamówić INA już wiem z poprzednich komentarzy ale takie rezystory to tez problem

Pozdrawiam

Avatar 2
Korneliusz Linux Ubuntu / Mozilla Firefox 43.0
04 February 2016 - 16:32 Bytom

Na http://pl.farnell.com znajdziesz odpowiednie :)

Avatar 1
Sewek Android 4.2 / Safari 537.36
15 February 2016 - 15:19 Katowice

Z kąd wziąść bibliotekę INA226 do eagle?

Avatar 2
Korneliusz Linux Ubuntu / Mozilla Firefox 43.0
21 February 2016 - 23:31 Bytom
Avatar 1
Azdek Windows 7 / Mozilla Firefox 48.0
06 September 2016 - 14:22 Lublin

Hej,
a co z pomiarem prądu przy PWM? Trzeba stosować RC czy będzie działać dobrze bez niego?

Avatar 2
Korneliusz Linux Ubuntu / Mozilla Firefox 49.0
23 September 2016 - 19:50 Bytom

Z zastosowaniem filtra RC czemu nie?

Avatar 1
Marcin Android 4.1 / Safari 537.36
20 September 2016 - 18:14 Warszawa

Przez przypadek kupiłem ina326, czy można go uczuć podobny sposób, chodzi mi o mierzenie aperarzu z pomocą bocznika 60mv 200a, A dzięki arduino zapisywanie tego w jakieś bazie danych

Avatar 2
Korneliusz Linux Ubuntu / Mozilla Firefox 49.0
23 September 2016 - 19:51 Bytom

Pewnie można, ale nota katalogowa INA326 nie da Ci wyników na i2c, tylko wystawi napięcie do pomiaru pinem analogowym

Avatar 1
tstutz Windows / Mozilla Firefox 50.0
21 January 2017 - 04:34 Brak informacji

Thanks for this great Arduino library. This worked on the first try and the data is clearly presented. Great Job.

Avatar 1
Andrejus Windows / Safari 537.36
18 June 2017 - 16:58 Brak informacji

Hello, thank you for great job. I have question. Can I connect few INA226 to arduino. How to set address in program different from default.
Thank you

Avatar 1
slot Windows 7 / Mozilla 11.0
28 July 2017 - 12:32 Brak informacji

Please open INA226.h - Header file and change the address in line #20. To control more than one device you should add typedef enum with all neded addresses.

Avatar 1
lyli Linux x86_64 / Safari 537.36
09 July 2017 - 11:29 Brak informacji

Czy ktoś próbował obsługi tego w bascomie. Chciał bym go dodać ale nie wiem od czego zacząć.

Avatar 1
Kordian Linux Ubuntu / Mozilla Firefox 54.0
12 November 2017 - 20:41 Brak informacji

W opisie podano "dodatkowy pin VBUS mostkujemy z VIN-".

Czy nie powinno być "z VIN+" (przy założeniu że pomiędzy VBUS a VIN+ nic nie mamy wpięte).

Pozdrawiam i dziękuję za świetne opisy i biblioteki
.. do których pojawiają się nawet linki w komentarzach na AliExpress :)

Avatar 1
Kordian Linux Ubuntu / Mozilla Firefox 54.0
17 November 2017 - 22:19 Brak informacji

Chciałbym wykorzystać układ INA216 w popularnym module ładowarki (rozładowarki) dla ogniwa 18650 i dzięki temu uzyskać/potwierdzić charakterystyki prądów i napięć oraz wyliczyć rezystancję wewnętrzną.

http://nowyelektronik.pl/index.php?id_product=88349&controller=product

W instrukcji układu jak i temacie powyższego artykułu jest "Bi-Directional/Dwukierunkowy".

W jaki sposób można uzyskać informację o kierunku prądu ?
Przykładowo w układzie MAX471 jest dodatkowy pin wyjściowy.

1. Czy w tym układzie INA226 mamy jakiś rejestr z bitem kierunku (direction) dostępny przez i2C ?

2. Czy schemat konfiguracji układu (z pierwszej strony instrukcji) będzie poprawny zarówno dla trybu rozładowania (przez LOAD) jak i dla tryby ładowania (bez LOAD) ?

http://www.ti.com/lit/ds/symlink/ina226.pdf

Dziękuję za odpowiedź.

Avatar 1
Kordian Linux x86_64 / Mozilla Firefox 57.0
19 November 2017 - 00:01 Brak informacji

Hura! Udało mi się połączyć te 2 moduły :)
Ogniwo się ładuje a moduł INA226 (z Ebaya) pokazuje co trzeba.

Do bocznika na płytce 0.1Ω dolutowałem równolegle dwa szeregowo połączone rezystory 0.01Ω (wyciągnięte z rozładowanej baterii do laptopa) co daje sumarycznie 0.0167Ω.

Bus voltage: 4.13750 V
Bus power: 1.14000 W
Shunt voltage: -0.00460 V
Shunt current: -0.27520 A

Pytanie o kierunek prądu już nieaktualne bo jak widać powyżej uzyskujemy wartości ze znakiem (minus) :)

Moduł z INA226 można kupić na Ali już za 2$. Szkoda tylko że VBUS nie ma większego zakresu (jest do 36V) to by idealnie pasował do mierzenia napięcia i mocy w obwodzie zasilania e-bike na pakietów większych niż 10s. Ale to nie problem bo można zastosować dzielnik rezystorowy. Tylko w tym przypadku będzie trzeba zmienić lekko program.

Avatar 1
Kordian Linux x86_64 / Mozilla Firefox 57.0
19 November 2017 - 01:07 Brak informacji

No i jeszcze potwierdzenie, że działa również w obwodzie z Load :)

Bus voltage: 3.68750 V
Bus power: 2.46000 W
Shunt voltage: 0.01114 V
Shunt current: 0.66680 A

Jutro przeanalizuję jeszcze wielkość bocznika tak aby pomiar był optymalny, błędy najmniejsze oraz przy założeniu, że spadek na boczniku nie wpływa negatywnie na odczyt napięcia ogniwa przez układu TP4056.

Avatar 1
Wojciech Windows / Mozilla Firefox 59.0
23 April 2018 - 12:52 Warszawa

Do kitu ten wynalazek, biblioteka z przykładowym szkicem pół Atmegi 328P zajmuje. Jeśli głównym zadaniem urządzenia jest pomiar prądu to ok, ale jak ma to być dodatkowa funkcja to tylko Mega :/

Avatar 1
Jarek Windows 7 / Safari 537.36
11 May 2018 - 12:59 Brak informacji

Witam,

Właśnie robię projekt z wykorzystaniem Twojej biblioteki i mam małą sugestię: w obecnej postaci jakikolwiek problem z komunikacją z modułem INA (np. z jakichkolwiek przyczyn nieobecnym) powoduje zawieszenie się programu. Wszystko to za sprawą procedury readRegister16, która zawiera taką oto linijkę:

while(!Wire.available()) {};

Jeśli wire nie jest available, ta pętla będzie się wykonywać bez końca. Proponuję zastąpić ją taką:

while (!Wire.available() && millis() - waittime

Avatar 1
Jarek Windows 7 / Safari 537.36
18 June 2018 - 09:13 Brak informacji

Słuchajcie, pojawił mi się dziwny problem z tymi układami, może ktoś jest w stanie coś podpowiedzieć: robię urządzenie, w którym ma być wykorzystanych szesnaście tych układów, z wykorzystaniem wszystkich dostępnych adresów. Z konieczności (brak miejsca) nie kupowałem gotowych modułów z INA, tylko same układy scalone na aliexpress, ale lutowałem je zgodnie ze sztuką, nie robiłem tego pogrzebaczem ani transformatorówką.

I nie wiem, czy kupiłem jakąś felerną serię od chińczyka, czy jednak te układy są tak bardzo wrażliwe na ESD, ale niemal we wszystkich z kupionych 20 sztuk układów, linia adresowa A1 zachowuje się tak, jakby wisiała w powietrzu. Linią A0 mogę ustawiac adres, ale poruszam się tylko w przestrzeni czterech adresów, A1 obojętnie do czego bym nie podpiął, zachowuje się jak podłączona do Vcc. Na płytce nie ma zwarcia, układy sprawdzałem po kolei i problem występuje właściwie na wszystkich.

Avatar 1
Jakub Windows 7 / Safari 537.36
11 June 2019 - 09:10 Brak informacji

Dziękuję za bibliotekę, działa :)

Mam jeden problem z INA226. Przy braku jakiegokolwiek odbioru wykazuje mi ppobór prądu -0.00020A. Sprawdzałem przy różnym próbkowaniu - przy pojedynczym pomiarze odczyt faluje od 0.00000 do -0.00040. Przy usrednianiu 1024 blad jest chyba staly i wynosi te -0,00020A

Czy to jest kwestia jakiejs kalibracji? Akura chce mierzy male prady i taki blad zakloca mi pomiary :)

Avatar 1
Jakub Windows 7 / Safari 537.36
22 June 2019 - 21:43 Warszawa

Dzień drobny
Mam dziwny problem z INA226 - napięcie mierzy poprawnie, a prąd zawyża prawie 3x. Jako obciążenia użyłem rezystora 100Ohm/5W, zasilanie mały akumulatorek LiPol - w chwili testu 3.9V. Dwa multimetry wskazują jak powinno być czyli około 0.04A, INA około 0.09A!
Używam Pańskich bibliotek i Arduino NANO (to zresztą chyba bez znaczenia).
Próbowałem różnego oversamplingu etc i nic się nie zmienia poza szumem - skala błędu nie zmienia się. Rezystora bocznikowego nie wylutowywałem, próbowałem go zmierzyć i wydaje się mieć poprawną oporność...
Ma Pan może co może być źródłem błędu?

Avatar 1
Jakub Windows 7 / Safari 537.36
22 June 2019 - 21:55 Warszawa

Ps. Update do poprzedniego wpisu.
Żeby otrzymać poprawny pomiar prądu, muszę zdefiniować wartość rezystora ina.calibrate(0.02385, 4);

Avatar 1
hneepy Windows 7 / Safari 537.36
17 August 2019 - 09:02 Brak informacji

Hello,

I have this problem... want to use yours INA226_simple.ino

Arduino: 1.6.3 (Windows 7), Board: "Arduino Nano, ATmega328"
In file included from ina226.ino:10:0:

... fatal error: DWire.h: No such file or directory

#include

...where find dwire.h and dserial.h?

thx
^

Avatar 1
mMuharrem Arslan Windows / Safari 537.36
25 February 2020 - 20:51 Brak informacji

Cześć, jestem Muharrem
Używam rezystora bocznikowego 500 A.
setcalibr A (0.00015,500);
Robię, a maksymalny prąd wynosi 22,9 Co jeszcze muszę zmienić?