Мини-обзор монитора тока INA219 с выходом I2C

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

полюбому под капорт возле шунта, это не наша хотелка чтобы тебе сложнее было, просто так надо, и провода я бы поставил толстые между микрухой и шунтом, никак не тонкие 0,1-0,2мм

Serg-Zmuh
Offline
Зарегистрирован: 11.08.2014

jeka_tm пишет:

полюбому под капорт возле шунта, это не наша хотелка чтобы тебе сложнее было, просто так надо, и провода я бы поставил толстые между микрухой и шунтом, никак не тонкие 0,1-0,2мм

да уже понял , просто не знал (

а в скетче можно как-то градацию занизить , сотых было бы достаточно ?

каюсь - это был последний вопрос ) 

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

а чем тебе они мешают? если не нужны не выводи их и все, или тебе принципиально несколько знаков убрать?

Serg-Zmuh
Offline
Зарегистрирован: 11.08.2014

jeka_tm пишет:

а чем тебе они мешают? если не нужны не выводи их и все, или тебе принципиально несколько знаков убрать?

эти показания выводятся виджетом на экран планшета в оверлее  ,места много занимают 

да и при delay(700) смысла в них нету , если же ускорить , в сериал порте не проходит ...

как-то так )

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

если ты через serial выводишь можно почитать тут:

https://www.arduino.cc/en/Serial/Print

вот пример 

Serial.println(1.23456, 0) gives "1"
Serial.println(1.23456, 2) gives "1.23"
Serial.println(1.23456, 4) gives "1.2346"

количество знаков после запятой

 

Serg-Zmuh
Offline
Зарегистрирован: 11.08.2014

jeka_tm пишет:

если ты через serial выводишь можно почитать тут:

https://www.arduino.cc/en/Serial/Print

вот пример 

Serial.println(1.23456, 0) gives "1"
Serial.println(1.23456, 2) gives "1.23"
Serial.println(1.23456, 4) gives "1.2346"

количество знаков после запятой

 

Да через serial вывожу
Почитал,спасибо ... завтра продолжу ,а то у нас уже 22:30 ,
Пошел я домой )

Gummi_bear
Offline
Зарегистрирован: 23.11.2014

Для Serg-Zmuh:

Раз вы автоэлектрик, есть датчик тока АКБ, бесконтактный, TOYOTA 28850-23020

Сам датчик Denso 131400-0011

Толком инфы не нашел, но по схеме похож на датчик серии ACS, с аналоговым выходом.

Пока руки не дошли его испытать, зима, в гараже дубак :-(

 

 

Serg-Zmuh
Offline
Зарегистрирован: 11.08.2014

Хммм.. интересно , с такими датчиками не сталкивался ...,

а по-поводу ИНА , оно работает и на планшет все выводит - но нестабильно , особенно бешенные наводки от

включенного ксенона ...., и экранировал уже и...., короче пока забросил

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Serg-Zmuh пишет:

... ксенона ...

хоть родной ксенон? или правильно установлен? с линзами?

Serg-Zmuh
Offline
Зарегистрирован: 11.08.2014

jeka_tm

да нет конечно же ,ксенон не родной ,билинзы сам ставил ,это уже второй комплект

видать с балластами не повезло ,менять буду

 

сам терпеть ненавижу колхозный ксенон )

Gummi_bear
Offline
Зарегистрирован: 23.11.2014

Serg-Zmuh пишет:

Хммм.. интересно , с такими датчиками не сталкивался ...,

а по-поводу ИНА , оно работает и на планшет все выводит - но нестабильно , особенно бешенные наводки от

включенного ксенона ...., и экранировал уже и...., короче пока забросил

 

Я думаю что вам как-раз надо ACS использовать, т.к. они бесконтактные, на датчике холла.

Стартер им конечно не померяешь, но 30 ампер можно, может и больше есть, не копал.

Делал проект, для управления поворотом и складыванием сидений, вот на такой двуполярной

ацс, сама ацс была модулем к дуньке прилеплена, и реле тоже там-же, а длина проводов до движков

была 1.5 - 2 метра. Все работало как часы.

Двуполярную взял чтобы с фазировкой нагрузки не париться, потом только сообразил, что можно было

ацс в цепь земли включить, и на однополярной сделать, разрешение больше было-бы.

Но было уже поздно, ацс были уже закуплены, хорошая мысля ... как говорится :-)

Serg-Zmuh
Offline
Зарегистрирован: 11.08.2014

надо погуглить ,почитать ..., спасибо за идею

 

Gummi_bear
Offline
Зарегистрирован: 23.11.2014

Serg-Zmuh пишет:

надо погуглить ,почитать ..., спасибо за идею

Незачт.  :-)

 

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

Я так понимаю на таком вольт-ампер метр для двух полярного БП не соберёшь? Напругу ведь меряет с полярностью, к тому же земля общая.

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

Ясно, с новым годом всех! Эмбеддеры.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Serg-Zmuh пишет:

dimax пишет:

Serg-Zmuh, я не знаю чем вам помочь. Куда включать модуль в вашем автомобиле, какие токи там текут, как выбрать шунт -это к специалистам по авто-электрике. На том-же pccar.ru  этот вопрос было бы уместнее задать.  А про програмнную часть подключения в верхних сообщения всё разжевано, ссылки на библиотеки даны.

 да вроде как сам автоэлектрик немного ,автосигналками занимаюсь

а тут как-то в тупике .... как это реализовать 

в идеале хотелось бы сделать мониторинг токов авто при заботающем двигателе 

ну там фары ,генератор 

это реально ,или лучше не заморачиваться?

В классике (ГАЗ-51) весь потребляемый авто ток шёл через амперметр (за исключением стартерного)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Помогите поправить скетч для работы с этим датчиком INA219, по описанию до 3.2 ампера, в реальных измерениях на этом скетче упёрся в 800 попугаев, дальнейшее наращивание тока до 1 ампера упирается в эту цифру

 

#include <Wire.h>
#include "ina219.h"

INA219 monitor;

void setup() {
  Serial.begin(9600);
  monitor.begin(64); // i2c address 64=0x40
  monitor.configure(0, 1, 3, 3, 7);
 
  /*  конфигурируем режим датчика тока INA219
   *  range, gain, bus_adc, shunt_adc, mode
   *  range = 1 (0-32V bus voltage range)
   *  gain = 3 (1/8 gain - 320mV range)
   *  bus adc = 3 (12-bit, single sample, 532uS conversion time)
   *  mode = 7 (continuous conversion)
   */

  monitor.calibrate(0.100, 0.075, 16, 3); 
 //R_шунта, напряж_шунта, макc_напряж, макс_ток
  }

  
void loop() {

 for (int i=1; i<16; i++){
 delay(300);
 Serial.print(monitor.busVoltage()); Serial.println(" - v");
 Serial.print(monitor.shuntCurrent() * 1000,0);Serial.print(" - ");
}
Serial.println();
}




Изменил строку калибровки установив напряжение шунта 320 милливольт, ничего не поменялось, упираюсь в 800 попугаев
Это в порту


v_bus_max:    16.00000000
v_shunt_max:    0.31999998
i_max_possible:    3.19999980
i_max_expected: 3.00000000
min_lsb:    0.000091555528
max_lsb:    0.000732421875
current_lsb:    0.000091560001
power_lsb:    0.00183120
 
cal:        4473
r_shunt:    0.10
ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Пробую библиотеку от adafruit - работает, а вот как воспользоваться другими возможностями этой библиотеки, а именно получение средних значей:
 

 I2C ADDRESS/BITS
    -----------------------------------------------------------------------*/
    #define INA219_ADDRESS                         (0x40)    // 1000000 (A0+A1=GND)
    #define INA219_READ                            (0x01)
/*=========================================================================*/

/*=========================================================================
    CONFIG REGISTER (R/W)
    -----------------------------------------------------------------------*/
    #define INA219_REG_CONFIG                      (0x00)
    /*---------------------------------------------------------------------*/
    #define INA219_CONFIG_RESET                    (0x8000)  // Reset Bit
	
    #define INA219_CONFIG_BVOLTAGERANGE_MASK       (0x2000)  // Bus Voltage Range Mask
    #define INA219_CONFIG_BVOLTAGERANGE_16V        (0x0000)  // 0-16V Range
    #define INA219_CONFIG_BVOLTAGERANGE_32V        (0x2000)  // 0-32V Range
	
    #define INA219_CONFIG_GAIN_MASK                (0x1800)  // Gain Mask
    #define INA219_CONFIG_GAIN_1_40MV              (0x0000)  // Gain 1, 40mV Range
    #define INA219_CONFIG_GAIN_2_80MV              (0x0800)  // Gain 2, 80mV Range
    #define INA219_CONFIG_GAIN_4_160MV             (0x1000)  // Gain 4, 160mV Range
    #define INA219_CONFIG_GAIN_8_320MV             (0x1800)  // Gain 8, 320mV Range
	
    #define INA219_CONFIG_BADCRES_MASK             (0x0780)  // Bus ADC Resolution Mask
    #define INA219_CONFIG_BADCRES_9BIT             (0x0080)  // 9-bit bus res = 0..511
    #define INA219_CONFIG_BADCRES_10BIT            (0x0100)  // 10-bit bus res = 0..1023
    #define INA219_CONFIG_BADCRES_11BIT            (0x0200)  // 11-bit bus res = 0..2047
    #define INA219_CONFIG_BADCRES_12BIT            (0x0400)  // 12-bit bus res = 0..4097
    
    #define INA219_CONFIG_SADCRES_MASK             (0x0078)  // Shunt ADC Resolution and Averaging Mask
    #define INA219_CONFIG_SADCRES_9BIT_1S_84US     (0x0000)  // 1 x 9-bit shunt sample
    #define INA219_CONFIG_SADCRES_10BIT_1S_148US   (0x0008)  // 1 x 10-bit shunt sample
    #define INA219_CONFIG_SADCRES_11BIT_1S_276US   (0x0010)  // 1 x 11-bit shunt sample
    #define INA219_CONFIG_SADCRES_12BIT_1S_532US   (0x0018)  // 1 x 12-bit shunt sample
    #define INA219_CONFIG_SADCRES_12BIT_2S_1060US  (0x0048)	 // 2 x 12-bit shunt samples averaged together
    #define INA219_CONFIG_SADCRES_12BIT_4S_2130US  (0x0050)  // 4 x 12-bit shunt samples averaged together
    #define INA219_CONFIG_SADCRES_12BIT_8S_4260US  (0x0058)  // 8 x 12-bit shunt samples averaged together
    #define INA219_CONFIG_SADCRES_12BIT_16S_8510US (0x0060)  // 16 x 12-bit shunt samples averaged together
    #define INA219_CONFIG_SADCRES_12BIT_32S_17MS   (0x0068)  // 32 x 12-bit shunt samples averaged together
    #define INA219_CONFIG_SADCRES_12BIT_64S_34MS   (0x0070)  // 64 x 12-bit shunt samples averaged together
    #define INA219_CONFIG_SADCRES_12BIT_128S_69MS  (0x0078)  // 128 x 12-bit shunt samples averaged together
	
    #define INA219_CONFIG_MODE_MASK                (0x0007)  // Operating Mode Mask
    #define INA219_CONFIG_MODE_POWERDOWN           (0x0000)
    #define INA219_CONFIG_MODE_SVOLT_TRIGGERED     (0x0001)
    #define INA219_CONFIG_MODE_BVOLT_TRIGGERED     (0x0002)
    #define INA219_CONFIG_MODE_SANDBVOLT_TRIGGERED (0x0003)
    #define INA219_CONFIG_MODE_ADCOFF              (0x0004)
    #define INA219_CONFIG_MODE_SVOLT_CONTINUOUS    (0x0005)
    #define INA219_CONFIG_MODE_BVOLT_CONTINUOUS    (0x0006)
    #define INA219_CONFIG_MODE_SANDBVOLT_CONTINUOUS (0x0007)	

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ua6em пишет:

Помогите поправить скетч для работы с этим датчиком INA219, по описанию до 3.2 ампера, в реальных измерениях на этом скетче упёрся в 800 попугаев, дальнейшее наращивание тока до 1 ампера упирается в эту цифру

 

#include <Wire.h>
#include "ina219.h"

INA219 monitor;

void setup() {
  Serial.begin(9600);
  monitor.begin(64); // i2c address 64=0x40
  monitor.configure(0, 1, 3, 3, 7);
 
  /*  конфигурируем режим датчика тока INA219
   *  range, gain, bus_adc, shunt_adc, mode
   *  range = 1 (0-32V bus voltage range)
   *  gain = 3 (1/8 gain - 320mV range)
   *  bus adc = 3 (12-bit, single sample, 532uS conversion time)
   *  mode = 7 (continuous conversion)
   */

  monitor.calibrate(0.100, 0.075, 16, 3); 
 //R_шунта, напряж_шунта, макc_напряж, макс_ток
  }

  
void loop() {

 for (int i=1; i<16; i++){
 delay(300);
 Serial.print(monitor.busVoltage()); Serial.println(" - v");
 Serial.print(monitor.shuntCurrent() * 1000,0);Serial.print(" - ");
}
Serial.println();
}




Изменил строку калибровки установив напряжение шунта 320 милливольт, ничего не поменялось, упираюсь в 800 попугаев
Это в порту


v_bus_max:    16.00000000
v_shunt_max:    0.31999998
i_max_possible:    3.19999980
i_max_expected: 3.00000000
min_lsb:    0.000091555528
max_lsb:    0.000732421875
current_lsb:    0.000091560001
power_lsb:    0.00183120
 
cal:        4473
r_shunt:    0.10

Если на клетке с буйволом написано тигр - не верь глазам своим...
Заработало, когда поправил инициализацию как у DIMAX

 

#include <Wire.h>
#include "ina219.h"

INA219 monitor;

void setup() {
  Serial.begin(9600);
  monitor.begin(64); // i2c address 64=0x40
  monitor.configure(0, 2, 11, 11, 7);
 
  /*  конфигурируем режим датчика тока INA219
   *  range, gain, bus_adc, shunt_adc, mode
   *  range = 1 (0-32V bus voltage range)
   *  gain = 3 (1/8 gain - 320mV range)
   *  bus adc = 3 (12-bit, single sample, 532uS conversion time)
   *  mode = 7 (continuous conversion)
   */

  monitor.calibrate(0.100, 0.32, 16, 3); 
 //R_шунта, напряж_шунта, макc_напряж, макс_ток
  }

  
void loop() {

 for (int i=1; i<16; i++){
 delay(300);
 int j = monitor.shuntCurrent() * 1000;
 Serial.print(j);Serial.print(" - ");
// Serial.print(monitor.shuntCurrent() * 1000,2);Serial.print(" - ");
 Serial.print(monitor.busVoltage()); Serial.println(" - v");
}
Serial.println();
}

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016
  lcd.begin(16, 2); // initialize the lcd
  monitor.begin(64); // i2c address 64=0x40
 // monitor.configure(0, 2, 10, 10, 7); // 4S -2.13ms
 // monitor.configure(0, 2, 11, 11, 7); // 8S -4.26ms
  monitor.configure(0, 2, 12, 12, 7); // 16S -8.51ms
 // monitor.configure(0, 2, 13, 13, 7); // 32S -17.02ms
 // monitor.configure(0, 2, 14, 14, 7); // 64S -34.05ms
 // monitor.configure(0, 2, 15, 15, 7);  // 128S - 68.10ms
 // monitor.configure(0, 2, 8, 8, 7);
                           // range, gain, bus_adc, shunt_adc, mode
                           // range = 1 (0-32V bus voltage range)
                           // gain = 3 (1/8 gain - 320mV range)
                           // bus adc = 3 (12-bit, single sample, 532uS conversion time)
                           // shunt adc = 3 (12-bit, single sample, 532uS conversion time)
                           // mode = 7 (continuous conversion)
   monitor.calibrate(0.100, 0.32, 16, 3.2); 
                           // R_шунта, напряж_шунта, макcнапряж, максток
/

 

Да, режимы от 1 до 7 я не использую ввиду особенностей конструкции, в даташите смотрите страницу 20

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

https://github.com/jarzebski/Arduino-INA219 в копилку библиотек, думаю тут будет всё куда понятнее.

 

/*
    INA219 Zero-Drift, Bi-directional Current/Power Monitor. Simple Example.
    Read more: http://www.jarzebski.pl/arduino/czujniki-i-sensory/cyfrowy-czujnik-pradu...
    GIT: https://github.com/jarzebski/Arduino-INA219
    Web: http://www.jarzebski.pl
    (c) 2014 by Korneliusz Jarzebski
*/

#include <Wire.h>
#include <INA219.h>

INA219 ina;

void checkConfig()
{
  Serial.print("Mode:                 ");
  switch (ina.getMode())
  {
    case INA219_MODE_POWER_DOWN:      Serial.println("Power-Down"); break;
    case INA219_MODE_SHUNT_TRIG:      Serial.println("Shunt Voltage, Triggered"); break;
    case INA219_MODE_BUS_TRIG:        Serial.println("Bus Voltage, Triggered"); break;
    case INA219_MODE_SHUNT_BUS_TRIG:  Serial.println("Shunt and Bus, Triggered"); break;
    case INA219_MODE_ADC_OFF:         Serial.println("ADC Off"); break;
    case INA219_MODE_SHUNT_CONT:      Serial.println("Shunt Voltage, Continuous"); break;
    case INA219_MODE_BUS_CONT:        Serial.println("Bus Voltage, Continuous"); break;
    case INA219_MODE_SHUNT_BUS_CONT:  Serial.println("Shunt and Bus, Continuous"); break;
    default: Serial.println("unknown");
  }
  
  Serial.print("Range:                ");
  switch (ina.getRange())
  {
    case INA219_RANGE_16V:            Serial.println("16V"); break;
    case INA219_RANGE_32V:            Serial.println("32V"); break;
    default: Serial.println("unknown");
  }

  Serial.print("Gain:                 ");
  switch (ina.getGain())
  {
    case INA219_GAIN_40MV:            Serial.println("+/- 40mV"); break;
    case INA219_GAIN_80MV:            Serial.println("+/- 80mV"); break;
    case INA219_GAIN_160MV:           Serial.println("+/- 160mV"); break;
    case INA219_GAIN_320MV:           Serial.println("+/- 320mV"); break;
    default: Serial.println("unknown");
  }

  Serial.print("Bus resolution:       ");
  switch (ina.getBusRes())
  {
    case INA219_BUS_RES_9BIT:         Serial.println("9-bit"); break;
    case INA219_BUS_RES_10BIT:        Serial.println("10-bit"); break;
    case INA219_BUS_RES_11BIT:        Serial.println("11-bit"); break;
    case INA219_BUS_RES_12BIT:        Serial.println("12-bit"); break;
    default: Serial.println("unknown");
  }

  Serial.print("Shunt resolution:     ");
  switch (ina.getShuntRes())
  {
    case INA219_SHUNT_RES_9BIT_1S:    Serial.println("9-bit / 1 sample"); break;
    case INA219_SHUNT_RES_10BIT_1S:   Serial.println("10-bit / 1 sample"); break;
    case INA219_SHUNT_RES_11BIT_1S:   Serial.println("11-bit / 1 sample"); break;
    case INA219_SHUNT_RES_12BIT_1S:   Serial.println("12-bit / 1 sample"); break;
    case INA219_SHUNT_RES_12BIT_2S:   Serial.println("12-bit / 2 samples"); break;
    case INA219_SHUNT_RES_12BIT_4S:   Serial.println("12-bit / 4 samples"); break;
    case INA219_SHUNT_RES_12BIT_8S:   Serial.println("12-bit / 8 samples"); break;
    case INA219_SHUNT_RES_12BIT_16S:  Serial.println("12-bit / 16 samples"); break;
    case INA219_SHUNT_RES_12BIT_32S:  Serial.println("12-bit / 32 samples"); break;
    case INA219_SHUNT_RES_12BIT_64S:  Serial.println("12-bit / 64 samples"); break;
    case INA219_SHUNT_RES_12BIT_128S: Serial.println("12-bit / 128 samples"); break;
    default: Serial.println("unknown");
  }

  Serial.print("Max possible current: ");
  Serial.print(ina.getMaxPossibleCurrent());
  Serial.println(" A");

  Serial.print("Max current:          ");
  Serial.print(ina.getMaxCurrent());
  Serial.println(" A");

  Serial.print("Max shunt voltage:    ");
  Serial.print(ina.getMaxShuntVoltage());
  Serial.println(" V");

  Serial.print("Max power:            ");
  Serial.print(ina.getMaxPower());
  Serial.println(" W");
}

void setup() 
{
  Serial.begin(115200);

  Serial.println("Initialize INA219");
  Serial.println("-----------------------------------------------");

  // Default INA219 address is 0x40
  ina.begin();

  // Configure INA219
  ina.configure(INA219_RANGE_32V, INA219_GAIN_320MV, INA219_BUS_RES_12BIT, INA219_SHUNT_RES_12BIT_1S);

  // Calibrate INA219. Rshunt = 0.1 ohm, Max excepted current = 2A
  ina.calibrate(0.1, 2);

  // Display configuration
  checkConfig();

  Serial.println("-----------------------------------------------");
}

void loop()
{
  Serial.print("Bus voltage:   ");
  Serial.print(ina.readBusVoltage(), 5);
  Serial.println(" V");

  Serial.print("Bus power:     ");
  Serial.print(ina.readBusPower(), 5);
  Serial.println(" W");


  Serial.print("Shunt voltage: ");
  Serial.print(ina.readShuntVoltage(), 5);
  Serial.println(" V");

  Serial.print("Shunt current: ");
  Serial.print(ina.readShuntCurrent(), 5);
  Serial.println(" A");

  Serial.println("");
  delay(1000);
}

 

Dmitriyxz
Offline
Зарегистрирован: 17.08.2017

Здравствуйте. мне не удалось найти информации по максимальному току который может пройти через готтовый модуль на основе такой микросхемы. 

хотел замерять зарядку автомобильного аккумулятора.

устройства на руках нет.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Dmitriyxz,  нужно внимательнее читать материал. По ссылке из топика на готовые шилдики были все параметры. Максимальный ток стандартного модуля 3,2А. Для бОльшего тока нужно менять шунт.

yucan
Offline
Зарегистрирован: 20.04.2015

Здравствуйте! Заказал у китайца Модуль на основе ina219 для одного проекта. Решил протестировать. Подключил к Ардуино, загнал тестовый скетч - не идут показания тока. Через монитор порта смотрю - напряжение на шунте есть, а тока нет. Может это указывать на на неисправность модуля? Опробовал обе библиотеки, ссылки на которые даны в начальном топике.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

yucan пишет:

Здравствуйте! Заказал у китайца Модуль на основе ina219 для одного проекта. Решил протестировать. Подключил к Ардуино, загнал тестовый скетч - не идут показания тока. Через монитор порта смотрю - напряжение на шунте есть, а тока нет. Может это указывать на на неисправность модуля? Опробовал обе библиотеки, ссылки на которые даны в начальном топике.

вверху есть кусок рабочего скетча правильно выводящего значение тока в порт )))

#include <Wire.h>
#include "ina219.h"

INA219 monitor;

void setup() {
  Serial.begin(9600);
  monitor.begin(64); // i2c address 64=0x40
  monitor.configure(0, 2, 11, 11, 7);
 
  /*  конфигурируем режим датчика тока INA219
   *  range, gain, bus_adc, shunt_adc, mode
   *  range = 1 (0-32V bus voltage range)
   *  gain = 3 (1/8 gain - 320mV range)
   *  bus adc = 3 (12-bit, single sample, 532uS conversion time)
   *  mode = 7 (continuous conversion)
   */

  monitor.calibrate(0.100, 0.32, 16, 3); 
 //R_шунта, напряж_шунта, макc_напряж, макс_ток
  }

  
void loop() {

 for (int i=1; i<16; i++){
 delay(300);
 int j = monitor.shuntCurrent() * 1000;
 Serial.print(j);Serial.print(" - ");
// Serial.print(monitor.shuntCurrent() * 1000,2);Serial.print(" - ");
 Serial.print(monitor.busVoltage()); Serial.println(" - v");
}
Serial.println();
}

 

yucan
Offline
Зарегистрирован: 20.04.2015

Здравствуйте! С этим скетчем значение тока в мониторе порта появляется, но оно не меняется. Напряжение меняю, но ток остается преждним

yucan
Offline
Зарегистрирован: 20.04.2015

До этого китаец мне вместо INA219 прислал по ошибке INA226. Я его сейчас проверил - претензий к нему нет. Точно показывает и ток и напряжение.

А этот модуль на INА219, независимо от тока, в монитор порта выдает 40 мв (падение напряжения на шунте). Ещё заметил, что мощность подсчитывает правильно. Короче полурабочий он какой то.

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

еще раз внимательно посмотрите мой скетч!!!
 monitor.calibrate(0.100, 0.32, 16, 3);

20  //R_шунта, напряж_шунта, макc_напряж, макс_ток

С чего вы решили, что напряжение шунта 40 милливольт?

yucan
Offline
Зарегистрирован: 20.04.2015

В мониторе порта пишет ведь "Shunt voltage". Там постоянная цифра 40мв.  И при изменении тока она не меняется.

Теперь спор открыл, но доказать трудно, что модуль неисправен.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

yucan пишет:

В мониторе порта пишет ведь "Shunt voltage". Там постоянная цифра 40мв.  И при изменении тока она не меняется.

Теперь спор открыл, но доказать трудно, что модуль неисправен.

Практически невозможно, вообще то брак по этим модулям - 30%, но обычно обрыв по цепи питания,

я бы поигрался с установками и посмотрел, что получается

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

yucan, на основании ваших сведений не сделать вывод. Нужно 1) схема включения. 2)фото подключения модуля с источником питания и нагрузкой  в высоком разрешении. 3) фактический ток, измеренный включённым последовательно в цепь миллиамперметром. 3) фактические напряжения, измеренные вольтметром относительно Gnd и входов Vin- и Vin+   5)фактическое напряжение на шунте, измеренное милливольтметром.

yucan
Offline
Зарегистрирован: 20.04.2015

Спасибо, dimax. Сейчас фото не смогу, а схема - такая. На +Vin подаю от регулируемого источника напряжения. В качестве нагрузки - автомобильная лампочка на 12 вольт. Напряжение на шунте меняется при регулировке напряжения с блока питания. По подобной же схеме подключал модуль (шилд)  на INA226, там всё нормально работает.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

yucan пишет:

Спасибо, dimax. Сейчас фото не смогу, а схема - такая. На +Vin подаю от регулируемого источника напряжения. В качестве нагрузки - автомобильная лампочка на 12 вольт. Напряжение на шунте меняется при регулировке напряжения с блока питания. По подобной же схеме подключал модуль (шилд)  на INA226, там всё нормально работает.

А дуину как запитал?

yucan
Offline
Зарегистрирован: 20.04.2015

UNO напитывается от USB разъёма компа.

 

yucan
Offline
Зарегистрирован: 20.04.2015

Вот по быстрому спаял схемку с индикатором из первого поста. И вот три показания индикатора при напряжении 2, 5 и 8 вольт. Напряжение на шунте меняется, а ток - нет. Заметил вот что. При плавном увеличении напряжения от нуля до примерно полтора вольта, показания тока меняются. Далее на отметке 15 ма показания застывают.

yucan
Offline
Зарегистрирован: 20.04.2015

yucan
Offline
Зарегистрирован: 20.04.2015

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

А перемычки на плате с адресом устройства замыкать "дядя" будет ??? )))

yucan
Offline
Зарегистрирован: 20.04.2015

Перемычки на месте. Без них ардуино не видит модуль. Спор открыл, а пока думаю заказать пару шилдов у разных продавцов.  Хотя всё равно остается вероятность попасть на брак

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Там должна быть замкнута (припоем) либо A0 либо А1, в разомкнутом состоянии есть неопределённость, правда  некоторые экземпляры работали и без перемычек, но из последней партии меряли абы что (по току) пришлось замкнуть )))
И зачем было городить городьбу с просволочкой??? )))
Закажите хотя бы 3 шт, при 30% браке есть надежда

Если говорим об этом коде - однозначно не заработает, шунты то разные )))

смотрим строка 16 инициализации INA, на этом датчике шунт 0.1 Ом и должна выглядеть как-то так:
monitor.calibrate(0.1, 0.320, 16, 2);

#include <Wire.h>
#include <ina219.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
INA219 monitor;
void setup() {
lcd.begin(16, 2);
 monitor.begin(64); // i2c address 64=0x40
 monitor.configure(0, 2, 11, 11, 7);
// range, gain, bus_adc, shunt_adc, mode
// range = 1 (0-32V bus voltage range)
// gain = 3 (1/8 gain - 320mV range)
// bus adc = 3 (12-bit, single sample, 532uS conversion time)
// shunt adc = 3 (12-bit, single sample, 532uS conversion time)
// mode = 7 (continuous conversion)
  monitor.calibrate(0.065, 0.16, 16, 2); 
 //R_шунта, напряж_шунта, макcнапряж, максток
  }
void loop() {
delay(300);
lcd.setCursor (0,0);
lcd.print(monitor.busVoltage()); lcd.print("v");
lcd.setCursor (0,1);
lcd.print(monitor.busPower()); lcd.print("W");
lcd.setCursor (8,0);
lcd.print(monitor.shuntCurrent() * 1000,0); lcd.print("mA");
}

 

кусочек универсального кода настройки INA219

/************************** SETUP *************************/ 
void setup() {
  Serial.begin(9600);
 // digitalWrite(8, LOW);
 // myOLED.begin();
 // rtc.begin();
  monitor.begin(64); // i2c address 64=0x40
 // monitor.configure(0, 2, 10, 10, 7); // 4S -2.13ms
 // monitor.configure(0, 2, 11, 11, 7); // 8S -4.26ms
  monitor.configure(0, 2, 12, 12, 7); // 16S -8.51ms
 // monitor.configure(0, 2, 13, 13, 7); // 32S -17.02ms
 // monitor.configure(0, 2, 14, 14, 7); // 64S -34.05ms
 // monitor.configure(0, 2, 15, 15, 7);  // 128S - 68.10ms
 // monitor.configure(0, 2, 8, 8, 7);
                           // range, gain, bus_adc, shunt_adc, mode
                           // range = 1 (0-32V bus voltage range)
                           // gain = 3 (1/8 gain - 320mV range)
                           // bus adc = 3 (12-bit, single sample, 532uS conversion time)
                           // shunt adc = 3 (12-bit, single sample, 532uS conversion time)
                           // mode = 7 (continuous conversion)
   monitor.calibrate(0.100, 0.32, 16, 3.2); 
                           // R_шунта, напряж_шунта, макcнапряж, максток

 

yucan
Offline
Зарегистрирован: 20.04.2015

Там, где стоят надписи А0 и А1 присутствует 5 вольт. Адресные точки находятся слева. Для адреса 40H их нужно заземлить, что я и сделал. Вобщем заказал я модули.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

yucan пишет:

Там, где стоят надписи А0 и А1 присутствует 5 вольт. Адресные точки находятся слева. Для адреса 40H их нужно заземлить, что я и сделал. Вобщем заказал я модули.

"Многие знания многие печали" - не надо ничего придумывать, замкни A0 и проверь сканером порта адрес устройства, поправь, ежели в скетче другой, второе, исправь строку инициализации как привёл выше и "картинко в студио"
 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

"Так и не удалось заслушать начальника транспортного цеха"

 

yucan
Offline
Зарегистрирован: 20.04.2015

Да))) Забил я на этот модуль. Нет смысла экспериментировать с браком. Итак много времени на него потрачено.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

yucan пишет:

Да))) Забил я на этот модуль. Нет смысла экспериментировать с браком. Итак много времени на него потрачено.

не факт, совсем не факт!!!

yucan
Offline
Зарегистрирован: 20.04.2015

Вчера получил оставшиеся 2 модуля на INA219. Оба рабочие. Замечено, что на всех рабочих модулях есть надписи на тыльной стороне. На том, который ток не показвает надписей нет.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Есть вопрос следующего плана:
В библиотеке INA219.H адрес устройства определён жёстко !
Каким образом изменить библиотеку, чтобы адрес устройства можно было определять в скетче?

 

// default values
#define D_I2C_ADDRESS	0x40 // (64)

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

ua6em,   monitor.begin(адрес);

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

dimax пишет:

ua6em,   monitor.begin(адрес);

я так и делал, но пока в ina219.h по дефолту не поставишь такой же - не работает

ЧУ Д ПРИ ТП )))

sadman41
Offline
Зарегистрирован: 19.10.2016

Если точно указание адреса в бегин не работает, то сделайте в INA219.h так:

void begin(uint8_t addr);

Вместо

void begin(uint8_t addr = D_I2C_ADDRESS);