Ток стабилизируется ОУ, регулируется через MCP4727. Также хардварная защита от обрыва (так как ОУ будет пытаться стабилизировать ток, при обрыве откроет на полную полевик, и при восстановлении контакта будет КЗ с возможно печальными последствиями).
Жека, будь ласка, схемку скинь, как наваял (именно защиту), тоже интересует.
Последний офтоп. R14 на самом деле там подстроечник. А защита очень простая: как только входное напряжение станет меньше чем на делителе R8R10 откроется VT2 и закоротит вход ОУ управляющего VT1. На схеме ошибка
Шунт в схему включен? Ток по нему бежит? Если нет, то может закоротить оба конца на землю и попробовать? 0.03 мВ / 10 Ом = 3 микроампера. Где такому току взяться как не из наводки по воздуху?
но меня еще другой вопрос беспокоит все таки - - есть ли связь между номиналом шунта на плате INA219 и либой из https://github.com/adafruit/Adafruit_INA219?
он там как-то захардкоджен или нет?
а то на всех фотках R100, а у меня R010 и какието странные значения получаю для getShuntVoltage_mV();
Поэтому я и использовал библиотеки, где всё понятно, у фрута если мне не изменяет память всего три тимплета
да и DIMAX в начале темы пишет:
В инете для этого чипа можно найти 2 библиотеки под ардуино, одна от adafruit -неплохая, но в ней нет возможности что-то настроить под свои нужды, даже элементарно сопротивление шунта не изменить. И вторая, более-менее полноценная http://www.johngineer.com/blog/?p=1178, в ней уже можно почти всё настроить, правда авторы библы поленились все это описать.
Робяты уважаемый dimax уже все давно написал читайте внимательно форум. Не нужны здесь библиотеки.
void setup() {
}
void loop()
{
int busvolt = ina219_read(0x02);
int Padenie_V_Synt = ina219_read(0x01);
busvolt >>=3;// избавится от лишних (вышеописанных) информационных бит. Стр.30 даташита
}
}
// функция записи в конфигурационные регистры INA219
void ina219_write(byte adr, int cfg) {
Wire.beginTransmission(0x40);
Wire.write(adr);
Wire.write((cfg >> 8) & 0xFF);
Wire.write(cfg & 0xFF);
Wire.endTransmission();
}
//функция чтения данных из регистров INA219
int ina219_read(byte adr) {
Wire.beginTransmission(0x40);
Wire.write(adr);
Wire.endTransmission();
Wire.requestFrom(0x40,2);
int value = ((Wire.read() << 8) | Wire.read());
return value;
}
Как-то так код выдернул из рабочего примера может что и обрезал невзначай. Один попугай падения напряжения на шунте равно 10 микровольт. Но это по памяти все работает четко и точно шунты можете перепаивать на любые в зависимости от того какие токи измеряете.
Робяты уважаемый dimax уже все давно написал читайте внимательно форум. Не нужны здесь библиотеки.
void setup() {
}
void loop()
{
int busvolt = ina219_read(0x02);
int Padenie_V_Synt = ina219_read(0x01);
busvolt >>=3;// избавится от лишних (вышеописанных) информационных бит. Стр.30 даташита
}
}
// функция записи в конфигурационные регистры INA219
void ina219_write(byte adr, int cfg) {
Wire.beginTransmission(0x40);
Wire.write(adr);
Wire.write((cfg >> 8) & 0xFF);
Wire.write(cfg & 0xFF);
Wire.endTransmission();
}
//функция чтения данных из регистров INA219
int ina219_read(byte adr) {
Wire.beginTransmission(0x40);
Wire.write(adr);
Wire.endTransmission();
Wire.requestFrom(0x40,2);
int value = ((Wire.read() << 8) | Wire.read());
return value;
}
Как-то так код выдернул из рабочего примера может что и обрезал невзначай. Один попугай падения напряжения на шунте равно 10 микровольт. Но это по памяти все работает четко и точно шунты можете перепаивать на любые в зависимости от того какие токи измеряете.
в первом сообщении от dimax в пр имере кода есть
02
#include <ina219.h>
я вашего примера я не нахожу..
можете подсказать, что мне нужно сделать, чтобы проверить модуль с шунтом R010 и убедиться что он работает нормально с моей ардуиной?
какойто тестовый пример..
мне показался удачным вариантом для проверки - функция getShuntVoltage_mV();
из библиотеки Adafruit
я так понял она проверяет напряжение на бортовом шунте.
но в моем случае, при правильном подключении, на вывод поступают странные значения(выше есть)
но в итоге - мне нужно измерять напряжение с шины (4-20mA) с промышленного датчика - анемометра.
Поэтому я и использовал библиотеки, где всё понятно, у фрута если мне не изменяет память всего три тимплета
да и DIMAX в начале темы пишет:
В инете для этого чипа можно найти 2 библиотеки под ардуино, одна от adafruit -неплохая, но в ней нет возможности что-то настроить под свои нужды, даже элементарно сопротивление шунта не изменить. И вторая, более-менее полноценная http://www.johngineer.com/blog/?p=1178, в ней уже можно почти всё настроить, правда авторы библы поленились все это описать.
угу..читал. кстати второй линк дает 404.. не нашел ничего и в гугле.
но основной вопрос у меня - значит можно забить на adafruit либу раз у меня стоит не R100, а R010?
Робяты надо читать тему целиком а не отдельные сообщения. Уважаемый dimax начинал свой обзор с использованием библиотек но в результате более глубокого изучения вопроса пришел к выводу что библиотеки не нужны и проще самому читать регистры.
Приведенный мной код это в принципе его код приведенный им в 2 темах я в принципе собрал только все в кучу.
Поясняю код если кому то надо intPadenie_V_Synt зная величину падения и сопротивление шунта по закону Ома находим ток протекающий в шунте (одна единица Padenie_V_Synt равна 10 микровольт).
вывод напряжения в цепи dataFile.print("Напряжение " ); dataFile.print(busvolt*4); dataFile.println("mV");
Вопрос не в чтении, а в формировании правильного конфигурационного байта. Библиотеки именно этим и занимаются. А так-то да - один раз посчитать и потом оперировать сенсором.
Так и не надо ничего формировать код используя значения по умолчанию (а они фактически максимальные из возможных) все считает сам с максимальным разрешением. Смотрите даташид значения по умолчанию.
Робяты надо читать тему целиком а не отдельные сообщения. Уважаемый dimax начинал свой обзор с использованием библиотек но в результате более глубокого изучения вопроса пришел к выводу что библиотеки не нужны и проще самому читать регистры.
Приведенный мной код это в принципе его код приведенный им в 2 темах я в принципе собрал только все в кучу.
Поясняю код если кому то надо intPadenie_V_Synt зная величину падения и сопротивление шунта по закону Ома находим ток протекающий в шунте (одна единица Padenie_V_Synt равна 10 микровольт).
вывод напряжения в цепи dataFile.print("Напряжение " ); dataFile.print(busvolt*4); dataFile.println("mV");
увы, ваш код совем не понятен, даже после этих объяснений..
в лупе у вас вызывается только ina219_read
но сам код содержит объвление ina219_write
когда и зачем ее нужно использовать - не ясно.
но главное это "Wire."
что это за объект? откуда он? видимо прощен какойто include.. #include <OneWire.h> может быть?
хотя врядли, там же I2С
короче надо читать тему еще раз.
ибо вопрос прежний - "почему у меня такой разброс значений при измерении на шунте?"
тут далеко не у всех уровень познаний DIMAX, проще с либой, что я привёл, фрутовскую правил под требуемые мне параметры, не одолел )))
Хочется простоты использования и красивостей, а это использование библиотеки
тут далеко не у всех уровень познаний DIMAX, проще с либой, что я привёл, фрутовскую правил под требуемые мне параметры, не одолел )))
Хочется простоты использования и красивостей, а это использование библиотеки
при использовании вашей библиотеки нужно делать begin, configure как вот тут? :
Измерять такие токи INA219 милое дело перепаяйте шут на 10 Ом это повысит падение напряжения на нем а стало быть точность измерений так как токи весьма маленькие. Но вроде по памяти падение напряжения не должно превышать 800 мв (дальше плата просто не считает при ваших токах это превышение недолжно произойти). В случае с шунтом 10 Ом вам даже ничего перещитывать не надо по закону Ома в переменной Padenie_V_Synt = ina219_read(0x01) будет ток который вы хотите измерить.
В лупе переменные через соответствующие функции считывают значения регистров платы но для того что бы иметь возможность считывать с платы должна быть возможность и записывать на плату поэтому там две функции.
Красивей и проще чем код dimax не получится. Вообщем если не хотите дальше ломать голову понапрасну закачайте приведенный код, перепаяйте шунт на 10 ом включите в цепь амперметр и наслаждайтесь разницей показаний того и другого устройства ана составит до 10 микроампер.
Communication test with with INA219 ...
v_bus_max: 32.00000000
v_shunt_max: 0.31999998
i_max_possible: 32.00000000
i_max_expected: 3.20000004
min_lsb: 0.000097659225
max_lsb: 0.000781250000
current_lsb: 0.000097659988
power_lsb: 0.00195320
cal: 41941
r_shunt: 0.01
V = -8.68, A = 12
V = -8.68, A = 12
V = -8.68, A = 12
V = -8.68, A = 13
V = -8.68, A = 11
V = -8.68, A = 12
V = -8.68, A = 11
V = -8.68, A = 9
V = -8.68, A = 11
V = -8.68, A = 11
V = -8.68, A = 11
V = -8.69, A = 12
V = -8.68, A = 11
V = -8.68, A = 12
V = -8.68, A = 12
V = -8.68, A = 9
V = -8.68, A = 12
V = -8.68, A = 9
V = -8.68, A = 12
подключено все точно так как на этой картинке (только у меня Arduino, а не Raspberry)
на вход подается 24в с DC-DC бустера XL6009
GND общий у всех.
если измерять обычным мультиметром - то ток в этих точках подключения INA219 - 4mA стабильно.
С библиотеками я не работал так- как так и не понял что там за коэффициенты и за что они отвечают и что там вообще наворочено. Перепайка шунта нужна для более точного измерения проходящего тока INNA219 измеряет разницу напряжений до шунта и после шунта относительно земли. Чем меньше шунт тем меньше разница тем сложней её оценить. Я не совсем понимаю если в чем сложность если у вас цепь собрана залить приведенную мной программу и посмотреть что она покажет. Не хотите перепаивать шунт проверьте на том что есть только пересчитайте значения по закону Ома. Я решал задачу аналогичную вашей только токи еще меньше. Средняя разница с обычным бытовым аперметром состовляла примерно 4-5 микро ампер. У меня качестве шунта припаяно советское военное сопротивление на 10 Ом повышенного класса точности. По схеме вроде все правильно если есть еще одна плата INNA219 проверьте что ана показывает.
jeka_tm, я уже детали стал подзабывать, но кажется макс. измеряемое напряжение действительно ни на что не влияет. Там 2 варианта допустимы 16 или 32. Ток и напряжение шунта -да, максимальные. Причём напряжение шунта ставятся не от балды, а выбирается из нескольких вариантов по даташиту.
перечитываю тему с самого начала, чтобы разобраться как же конфигурировать этот модуль для моих целей.
и уже который час пытаюсь найти в даташите информацию про напряжение шунта, как сказано здесь:
>напряжение шунта ставятся не от балды, а выбирается из нескольких вариантов по даташиту.
у меня модуль INA219 должен измерять ток от 4 до 20мА на выходе устройства.
устройство - анемометр, генерит ток в этом диапазоне и мне нужно мониторить его. желательно с шагом в 0.00016А - это 1 м/с
// 4 - 20 mA
// 0 - 100 m/s
// 1 m/s == 0.16 mA == 0.00016 A
// 0.1 m/s == 0.016 mA == 0.004v
штатный шунт был R010, но я перепаял его на 1% резистор 10ом.
получается что для калибровки надо использовать:
ina219.calibrate(10, X, Y, Z);
// R_шунта, напряж_шунта, макcнапряж, максток
где
X - его нужно ВЫЧИСЛИТЬ или все таки выбрать в даташите? я пока не вижу в даташите ничего, что может мне помочь. более того - нумерация страниц ДШ похоже уже не соответствует комментариям в коде на 1 странице темы.
Посмотри в мануале параметр Full-ScaleSenseVoltage. Это максимальное напряжение между входами +- . Резистор шунта должен быть таким, чтобы при максимальном измеряемом токе падение напряжения на шунте его не превосходило .
Посмотри в мануале параметр Full-ScaleSenseVoltage. Это максимальное напряжение между входами +- . Резистор шунта должен быть таким, чтобы при максимальном измеряемом токе падение напряжения на шунте его не превосходило .
спасибо, но зачем мне это макс напряжение?
>Резистор шунта должен быть таким, чтобы при максимальном измеряемом токе падение напряжения на шунте его не превосходило .
у меня резистор счас 10ом. макс измеряемый ток должен быть не больеш 20мА.
по закону ома напряжение на шунте при этом будет 0.2в
и эти 0.2в не должны быть больше чем Full-ScaleSenseVoltage? это как-то можно настроить в коде?
если все так и я все правильно понимаю до этого момента то:
Следующий шаг. 0.2 вольта. Т.е. работать можем только на пределе 320 мВ. , т.е максимальный ток 32 мА. Т.е максимальное выходное значение соответствует 32 мА. Простой пропорций можете посчитать, какое выходное значение в цифре будет для любого друго тока и наооборот. Зачем калибровка? Прямой расчёт.
Следующий шаг. 0.2 вольта. Т.е. работать можем только на пределе 320 мВ. , т.е максимальный ток 32 мА. Т.е максимальное выходное значение соответствует 32 мА. Простой пропорций можете посчитать, какое выходное значение в цифре будет для любого друго тока и наооборот. Зачем калибровка? Прямой расчёт.
совсем я запутался..
значит и калибровку не нужно вызывать в коде?
вообще такое впечатление, что мне говорят совсем разные вещи.
Следующий шаг. 0.2 вольта. Т.е. работать можем только на пределе 320 мВ. , т.е максимальный ток 32 мА. Т.е максимальное выходное значение соответствует 32 мА. Простой пропорций можете посчитать, какое выходное значение в цифре будет для любого друго тока и наооборот. Зачем калибровка? Прямой расчёт.
нижней табличкой посчитал сопротивление шунта для максимального тока в 20 миллиампер на любом допустимом диапазоне напряжения шунта
откуда напряжение шунта 0,2? оно может быть только 40, 80, 160 или 320 милливольт
Нет там такого. Если сами не понимаете - не путайте человека.
2 ALL - не ясно, что вы вообще обсуждаете в теме. Принцип измерения максимально прост - операционник измеряет падение напряжения на шунте. Какой там стоит шунт - для самой микросхемы не имеет ни малейшего значения, его сопротивление можно вообще нигде не указывать, получаете с чипа напряжение и вычисляете ток сами по закону Ома.
Следующий шаг. 0.2 вольта. Т.е. работать можем только на пределе 320 мВ. , т.е максимальный ток 32 мА. Т.е максимальное выходное значение соответствует 32 мА. Простой пропорций можете посчитать, какое выходное значение в цифре будет для любого друго тока и наооборот. Зачем калибровка? Прямой расчёт.
нижней табличкой посчитал сопротивление шунта для максимального тока в 20 миллиампер на любом допустимом диапазоне напряжения шунта
ну вот нижняя табличка мне понятна.
например если использовать шунт в 2ома - то для калибровки нужно указывать
откуда напряжение шунта 0,2? оно может быть только 40, 80, 160 или 320 милливольт
Нет там такого. Если сами не понимаете - не путайте человека.
страница 19 даташита, в табличке выше я привёл значения максимального тока при выбранном им сопротивлении шунта и сопротивление шунта для тока в 20 миллиампер при любом допустимом значении усиления
все очень просто. Можно получать от ИНА только напряжение, а ток считать самому. Тогда сопротивление шунта не важно и калибровка не нужна.
Если вы хотите получать от ИНА219 готовое значение тока - то тогда нужно перенастраивать библиотеку на свой шунт и проводить калибровку.
мне нужно получать ток, как как устройство мое - анемометр, гарантированно дает на выход измерительного блока только ток в диапазоне 4-20мА (это какойто индустриальный стандарт)
а напряжение будет сильно "зашумленно" и не будет показывать точную скорость ветра.
это параметры самого устройства, так что буду измерять именно ток.
но зачем менять код в самой библиотеке?
ведь есть функция калибровки и конфигурирования, разве ими нельзя указать мои диапазоны измерения?
именно в этом мой вопрос. я читал тему с самого начала и даже Dimax указывал:
Ток стабилизируется ОУ, регулируется через MCP4727. Также хардварная защита от обрыва (так как ОУ будет пытаться стабилизировать ток, при обрыве откроет на полную полевик, и при восстановлении контакта будет КЗ с возможно печальными последствиями).
Жека, будь ласка, схемку скинь, как наваял (именно защиту), тоже интересует.
Ласка?))
Да нету схемы, надо печатке рисовать. Нарисую выложу
Понятно! Благодарю!
Последний офтоп. R14 на самом деле там подстроечник. А защита очень простая: как только входное напряжение станет меньше чем на делителе R8R10 откроется VT2 и закоротит вход ОУ управляющего VT1. На схеме ошибка
извиняюсь, что поднимаю эту тему.
заказал INA219 для проверки, подойдет ли модуль в моем проекте.
на приехавшем модуле установлен шунт R010, а не R100.
все мануалы и гайды по подключению и работе этого модуля с ардуино используют вариант с R100.
например тут:
https://openhomeautomation.net/power-monitoring-arduino-ina219
есть первый тестовый пример, где выводится результат shuntvoltage = ina219.getShuntVoltage_mV();
подключил вроде все правильно - Vcc и GND взял с ардуино, SDA - A4, SCL - A5
написано, что должен выводиться 0, а у меня выводится совсем другое:
Шунт в схему включен? Ток по нему бежит? Если нет, то может закоротить оба конца на землю и попробовать? 0.03 мВ / 10 Ом = 3 микроампера. Где такому току взяться как не из наводки по воздуху?
3 микроампера. Где такому току взяться как не из наводки по воздуху?
Может не надо фантазировать, ага? Цифра для наводок на пяток децибелл меньше.
Это просто ошибка измерения, вполне в пределах описанной в даташите.
что значит "шунт в схему включен" ?
я подключил модуль к ардуино 4 проводниками и все.
пока никакой схемы нету.
я просто не пойму - должно ли в моем случае выводиться 0, или все таки проблема в том, что другой шунт стоит?
вообще - есть ли связь этого номинала шунта и библиотеки? чтото мне подсказывает, что не должно быть связи.
ведь даже тут на форуме есть темы где обсуждают подключение внешнего шунта..
прошу подсказать, в правильном ли направлении я рассуждаю на этом начальном этапе.
может есть другой способ проверки моего модуля?
если использовать альтернативную библиотеку, то можно любой шунт, или ручками если, то тоже
если использовать альтернативную библиотеку, то можно любой шунт, или ручками если, то тоже
то есть все таки либа от Adafruit "заточена" на R100?
я поиском прошелся по cpp и хедер файлу на слово shunt
ничего внятного не нашел, только закомментированные строки.
а что за другая либа, которую можно использовать?
а что за другая либа, которую можно использовать?
Вот
3 микроампера. Где такому току взяться как не из наводки по воздуху?
Может не надо фантазировать, ага? Цифра для наводок на пяток децибелл меньше.
Это просто ошибка измерения, вполне в пределах описанной в даташите.
Давай ты будешь отвечать за свои слова? Обоснуй пяток децибелл? Знаешь напряженность электрического поля в месте где лежит плата?
а что за другая либа, которую можно использовать?
Вот
спасибо. теперь надо понять как ею пользоваться)
но меня еще другой вопрос беспокоит все таки - - есть ли связь между номиналом шунта на плате INA219 и либой из https://github.com/adafruit/Adafruit_INA219?
он там как-то захардкоджен или нет?
https://github.com/adafruit/Adafruit_INA219?
он там как-то захардкоджен или нет?
а что за другая либа, которую можно использовать?
Вот
спасибо. теперь надо понять как ею пользоваться)
я просто не пойму - должно ли в моем случае выводиться 0, или все таки проблема в том, что другой шунт стоит?
Не должно. Любой прибор содержит в себе неточности. Цифра в 30мкВ в пределах заявленной производителем ошибки.
https://github.com/adafruit/Adafruit_INA219?
он там как-то захардкоджен или нет?
спасибо, я вижу там куча коментов есть.
но я не пойму - почему там есть НЕСКОЛЬКО функций для калибровки.
как этим нужно пользоваться? нужно вызывать функцию в начале своей программы для инициализации модуля в нужном режиме?
и в моем случае нужно создать новую или подправить существующую функцию под номинал моего шунта?
но все это было бы понятно если бы в этом руководстве, что я нашел:
https://openhomeautomation.net/power-monitoring-arduino-ina219
в примерах кода были такие вызовы функций setCalibration
но их там нет.. то есть не понятно как выбирается дефолтная калибровка..
там достаточно свежая статья, и значит и библиотека используется уже с калибровками этими.
но почему тогда они не используют их.
ничего не понятно пока..
Поэтому я и использовал библиотеки, где всё понятно, у фрута если мне не изменяет память всего три тимплета
да и DIMAX в начале темы пишет:
В инете для этого чипа можно найти 2 библиотеки под ардуино, одна от adafruit -неплохая, но в ней нет возможности что-то настроить под свои нужды, даже элементарно сопротивление шунта не изменить. И вторая, более-менее полноценная http://www.johngineer.com/blog/?p=1178, в ней уже можно почти всё настроить, правда авторы библы поленились все это описать.
Робяты уважаемый dimax уже все давно написал читайте внимательно форум. Не нужны здесь библиотеки.
Как-то так код выдернул из рабочего примера может что и обрезал невзначай. Один попугай падения напряжения на шунте равно 10 микровольт. Но это по памяти все работает четко и точно шунты можете перепаивать на любые в зависимости от того какие токи измеряете.
Робяты уважаемый dimax уже все давно написал читайте внимательно форум. Не нужны здесь библиотеки.
Как-то так код выдернул из рабочего примера может что и обрезал невзначай. Один попугай падения напряжения на шунте равно 10 микровольт. Но это по памяти все работает четко и точно шунты можете перепаивать на любые в зависимости от того какие токи измеряете.
в первом сообщении от dimax в пр имере кода есть
02
#include <ina219.h>
я вашего примера я не нахожу..
можете подсказать, что мне нужно сделать, чтобы проверить модуль с шунтом R010 и убедиться что он работает нормально с моей ардуиной?
какойто тестовый пример..
мне показался удачным вариантом для проверки - функция getShuntVoltage_mV();
из библиотеки Adafruit
я так понял она проверяет напряжение на бортовом шунте.
но в моем случае, при правильном подключении, на вывод поступают странные значения(выше есть)
но в итоге - мне нужно измерять напряжение с шины (4-20mA) с промышленного датчика - анемометра.
вот ссылка на его описание
http://s.campbellsci.com/documents/ca/manuals/05103l_man.pdf
на 4 странице есть схема - вот мне нужно ВМЕСТО Measuring instrument получить данные с датчика в код ардуино.
вот и хочу проверить как их снимать их оттуда через INA219.
но для начала - надо понять, почему такие странные значения получаю на шунте..
Поэтому я и использовал библиотеки, где всё понятно, у фрута если мне не изменяет память всего три тимплета
да и DIMAX в начале темы пишет:
В инете для этого чипа можно найти 2 библиотеки под ардуино, одна от adafruit -неплохая, но в ней нет возможности что-то настроить под свои нужды, даже элементарно сопротивление шунта не изменить. И вторая, более-менее полноценная http://www.johngineer.com/blog/?p=1178, в ней уже можно почти всё настроить, правда авторы библы поленились все это описать.
угу..читал. кстати второй линк дает 404.. не нашел ничего и в гугле.
но основной вопрос у меня - значит можно забить на adafruit либу раз у меня стоит не R100, а R010?
я правильно понял?
если так - буду сразу проверять ваш вариант.
Можно не забивать. Полученный результат можно помножить на 10 и получить точный ответ.
Робяты надо читать тему целиком а не отдельные сообщения. Уважаемый dimax начинал свой обзор с использованием библиотек но в результате более глубокого изучения вопроса пришел к выводу что библиотеки не нужны и проще самому читать регистры.
Приведенный мной код это в принципе его код приведенный им в 2 темах я в принципе собрал только все в кучу.
Поясняю код если кому то надо
int
Padenie_V_Synt зная величину падения и сопротивление шунта по закону Ома находим ток протекающий в шунте (одна единица
Padenie_V_Synt равна 10 микровольт).вывод напряжения в цепи dataFile.print("Напряжение " ); dataFile.print(busvolt*4); dataFile.println("mV");
Вопрос не в чтении, а в формировании правильного конфигурационного байта. Библиотеки именно этим и занимаются. А так-то да - один раз посчитать и потом оперировать сенсором.
Так и не надо ничего формировать код используя значения по умолчанию (а они фактически максимальные из возможных) все считает сам с максимальным разрешением. Смотрите даташид значения по умолчанию.
Робяты надо читать тему целиком а не отдельные сообщения. Уважаемый dimax начинал свой обзор с использованием библиотек но в результате более глубокого изучения вопроса пришел к выводу что библиотеки не нужны и проще самому читать регистры.
Приведенный мной код это в принципе его код приведенный им в 2 темах я в принципе собрал только все в кучу.
Поясняю код если кому то надо
int
Padenie_V_Synt зная величину падения и сопротивление шунта по закону Ома находим ток протекающий в шунте (одна единица
Padenie_V_Synt равна 10 микровольт).вывод напряжения в цепи dataFile.print("Напряжение " ); dataFile.print(busvolt*4); dataFile.println("mV");
увы, ваш код совем не понятен, даже после этих объяснений..
в лупе у вас вызывается только ina219_read
но сам код содержит объвление ina219_write
когда и зачем ее нужно использовать - не ясно.
но главное это "Wire."
что это за объект? откуда он? видимо прощен какойто include.. #include <OneWire.h> может быть?
хотя врядли, там же I2С
короче надо читать тему еще раз.
ибо вопрос прежний - "почему у меня такой разброс значений при измерении на шунте?"
или так и должно быть?
тут далеко не у всех уровень познаний DIMAX, проще с либой, что я привёл, фрутовскую правил под требуемые мне параметры, не одолел )))
Хочется простоты использования и красивостей, а это использование библиотеки
тут далеко не у всех уровень познаний DIMAX, проще с либой, что я привёл, фрутовскую правил под требуемые мне параметры, не одолел )))
Хочется простоты использования и красивостей, а это использование библиотеки
при использовании вашей библиотеки нужно делать begin, configure как вот тут? :
https://github.com/RG22EM/ua6em/blob/master/mishin.ino#L258
если можете - покажите пример как ее использовать в простейшем случае..
upd:
вероятно в моем случае ina219.begin(0x44);
надо менять на ina219.begin(0x40);
так как у меня по идее дефолтный адрес - я никакие перемычки на плате не запаивал для изменения адреса.
но вот что делать с калибровкой..
upd2:
у меня на шунте написано R010 - полагаю это и будет 0.1ом
напряжение, которое подается на датчик - 24 вольта.
но в документации указан только ток на выходе - минимально из моего датчика приходит 4mA, максимально - 20mA
как же калибровать правильно?
у меня на шунте написано R010 - полагаю это и будет 0.1ом
0,01 Ом
у меня на шунте написано R010 - полагаю это и будет 0.1ом
0,01 Ом
дада.. уже понял. для шунта нужно указывать 0.01
но остальное то как вычислить.
посмотрите мои параметры, Дмитрия, всё же понятно, код закомментирован достаточно
PS Причём напряжение шунта ставятся не от балды, а выбирается из нескольких вариантов по даташиту.
так
походу дела выяснилось, что мне нужно измерять ток.
по идее INA219 это тоже умеет делать.
границы тока от 4 до 20мА
Измерять такие токи INA219 милое дело перепаяйте шут на 10 Ом это повысит падение напряжения на нем а стало быть точность измерений так как токи весьма маленькие. Но вроде по памяти падение напряжения не должно превышать 800 мв (дальше плата просто не считает при ваших токах это превышение недолжно произойти). В случае с шунтом 10 Ом вам даже ничего перещитывать не надо по закону Ома в переменной Padenie_V_Synt = ina219_read(0x01) будет ток который вы хотите измерить.
В лупе переменные через соответствующие функции считывают значения регистров платы но для того что бы иметь возможность считывать с платы должна быть возможность и записывать на плату поэтому там две функции.
Красивей и проще чем код dimax не получится. Вообщем если не хотите дальше ломать голову понапрасну закачайте приведенный код, перепаяйте шунт на 10 ом включите в цепь амперметр и наслаждайтесь разницей показаний того и другого устройства ана составит до 10 микроампер.
перепаивать шунт надо обязательно?
я пока проверяю на текущем шунте и с
получаю какие-то очень странные значения..
подключено все точно так как на этой картинке (только у меня Arduino, а не Raspberry)
на вход подается 24в с DC-DC бустера XL6009
GND общий у всех.
если измерять обычным мультиметром - то ток в этих точках подключения INA219 - 4mA стабильно.
а код мне пишет какието разные значение.
причем странно то, что значения тока очень сильно гуляют, пусть они даже и не близко с 4 находятся, а на мультиметре 4ma стабильно.
ну и напряжение тоже странное.
что я сделал не так. подскажите плиз.
С библиотеками я не работал так- как так и не понял что там за коэффициенты и за что они отвечают и что там вообще наворочено. Перепайка шунта нужна для более точного измерения проходящего тока INNA219 измеряет разницу напряжений до шунта и после шунта относительно земли. Чем меньше шунт тем меньше разница тем сложней её оценить. Я не совсем понимаю если в чем сложность если у вас цепь собрана залить приведенную мной программу и посмотреть что она покажет. Не хотите перепаивать шунт проверьте на том что есть только пересчитайте значения по закону Ома. Я решал задачу аналогичную вашей только токи еще меньше. Средняя разница с обычным бытовым аперметром состовляла примерно 4-5 микро ампер. У меня качестве шунта припаяно советское военное сопротивление на 10 Ом повышенного класса точности. По схеме вроде все правильно если есть еще одна плата INNA219 проверьте что ана показывает.
jeka_tm, я уже детали стал подзабывать, но кажется макс. измеряемое напряжение действительно ни на что не влияет. Там 2 варианта допустимы 16 или 32. Ток и напряжение шунта -да, максимальные. Причём напряжение шунта ставятся не от балды, а выбирается из нескольких вариантов по даташиту.
перечитываю тему с самого начала, чтобы разобраться как же конфигурировать этот модуль для моих целей.
http://arduino.ru/forum/apparatnye-voprosy/mini-obzor-monitora-toka-ina219-s-vykhodom-i2c?page=3#comment-504311
и уже который час пытаюсь найти в даташите информацию про напряжение шунта, как сказано здесь:
>напряжение шунта ставятся не от балды, а выбирается из нескольких вариантов по даташиту.
у меня модуль INA219 должен измерять ток от 4 до 20мА на выходе устройства.
устройство - анемометр, генерит ток в этом диапазоне и мне нужно мониторить его. желательно с шагом в 0.00016А - это 1 м/с
штатный шунт был R010, но я перепаял его на 1% резистор 10ом.
получается что для калибровки надо использовать:
где
X - его нужно ВЫЧИСЛИТЬ или все таки выбрать в даташите? я пока не вижу в даташите ничего, что может мне помочь. более того - нумерация страниц ДШ похоже уже не соответствует комментариям в коде на 1 странице темы.
http://www.ti.com/lit/ds/symlink/ina219.pdf
Y - я так понял этот парметр может быть или 16 или 32 и судя по коду в библиотеке https://github.com/RG22EM/ua6em
этот параметр не исльзуется в вычислениях.
Z - это максимальный ток, в моем случае, полагаю это 20мА
и если ВЫЧИСЛЯТЬ X - напряжение шунта, то выходит X === 20mA*10 == 0.02*10 == 0.2v?
и значит:
но и тут непонятки - функция вычисления тока, судя по коменту - выводит значение в Амперах.
но в 1 сообщении темы:
lcd.print(monitor.shuntCurrent() * 1000,0); lcd.print(
"mA"
);
значение умножается на 1000 и это почемуто миллиамперы!
у меня же почемуто код в лупе:
выводит: A = 4
что вероятно похоже на 0м/c так как ветряк анемометра не крутится.
если крутануть сильно получаю A = 5
поменял тим переменной на volatile float Data_ina219_A = 0;
Посмотри в мануале параметр Full-ScaleSenseVoltage. Это максимальное напряжение между входами +- . Резистор шунта должен быть таким, чтобы при максимальном измеряемом токе падение напряжения на шунте его не превосходило .
Посмотри в мануале параметр Full-ScaleSenseVoltage. Это максимальное напряжение между входами +- . Резистор шунта должен быть таким, чтобы при максимальном измеряемом токе падение напряжения на шунте его не превосходило .
спасибо, но зачем мне это макс напряжение?
>Резистор шунта должен быть таким, чтобы при максимальном измеряемом токе падение напряжения на шунте его не превосходило .
у меня резистор счас 10ом. макс измеряемый ток должен быть не больеш 20мА.
по закону ома напряжение на шунте при этом будет 0.2в
и эти 0.2в не должны быть больше чем Full-ScaleSenseVoltage? это как-то можно настроить в коде?
если все так и я все правильно понимаю до этого момента то:
0.2в == 200мв
судя по коду библиотеки:
https://github.com/RG22EM/ua6em/blob/master/INA219.cpp#L97
в дефолтной конфигурации этот параметр у меня 320мв, что удовлетворяет условию.
так?
откуда напряжение шунта 0,2? оно может быть только 40, 80, 160 или 320 милливольт, это напряжение задаёт режим работы (усиление) операционника
откуда напряжение шунта 0,2? оно может быть только 40, 80, 160 или 320 милливольт, это напряжение задаёт режим работы (усиление) операционника
спасибо, но где это указано?
вот старая pdf с даташитом:
https://cdn-shop.adafruit.com/datasheets/ina219.pdf
я думал, что значения 40, 80 и т.д. - это значения с 26 страницы - параметр RANGE - для функции void INA219::configure
https://github.com/RG22EM/ua6em/blob/master/INA219.cpp#L94
но выходит и в функцию калибровки надо задавать (ВЫБИРАТЬ) эти значения тоже?
какой же в моем случае врвиант нужен..
а 0.2 у меня получилось просто же - макс ток у меня 20мА, шунт - 10ом
вот и макс. напряжение на шунте == 20мА*10 == 0.02*10 == 0.2в
Следующий шаг. 0.2 вольта. Т.е. работать можем только на пределе 320 мВ. , т.е максимальный ток 32 мА. Т.е максимальное выходное значение соответствует 32 мА. Простой пропорций можете посчитать, какое выходное значение в цифре будет для любого друго тока и наооборот. Зачем калибровка? Прямой расчёт.
Следующий шаг. 0.2 вольта. Т.е. работать можем только на пределе 320 мВ. , т.е максимальный ток 32 мА. Т.е максимальное выходное значение соответствует 32 мА. Простой пропорций можете посчитать, какое выходное значение в цифре будет для любого друго тока и наооборот. Зачем калибровка? Прямой расчёт.
совсем я запутался..
значит и калибровку не нужно вызывать в коде?
вообще такое впечатление, что мне говорят совсем разные вещи.
или я не понимаю как они связаны.
Следующий шаг. 0.2 вольта. Т.е. работать можем только на пределе 320 мВ. , т.е максимальный ток 32 мА. Т.е максимальное выходное значение соответствует 32 мА. Простой пропорций можете посчитать, какое выходное значение в цифре будет для любого друго тока и наооборот. Зачем калибровка? Прямой расчёт.
нижней табличкой посчитал сопротивление шунта для максимального тока в 20 миллиампер на любом допустимом диапазоне напряжения шунта
откуда напряжение шунта 0,2? оно может быть только 40, 80, 160 или 320 милливольт
Нет там такого. Если сами не понимаете - не путайте человека.
2 ALL - не ясно, что вы вообще обсуждаете в теме. Принцип измерения максимально прост - операционник измеряет падение напряжения на шунте. Какой там стоит шунт - для самой микросхемы не имеет ни малейшего значения, его сопротивление можно вообще нигде не указывать, получаете с чипа напряжение и вычисляете ток сами по закону Ома.
Следующий шаг. 0.2 вольта. Т.е. работать можем только на пределе 320 мВ. , т.е максимальный ток 32 мА. Т.е максимальное выходное значение соответствует 32 мА. Простой пропорций можете посчитать, какое выходное значение в цифре будет для любого друго тока и наооборот. Зачем калибровка? Прямой расчёт.
нижней табличкой посчитал сопротивление шунта для максимального тока в 20 миллиампер на любом допустимом диапазоне напряжения шунта
ну вот нижняя табличка мне понятна.
например если использовать шунт в 2ома - то для калибровки нужно указывать
совсем я запутался..
значит и калибровку не нужно вызывать в коде?
все очень просто. Можно получать от ИНА только напряжение, а ток считать самому. Тогда сопротивление шунта не важно и калибровка не нужна.
Если вы хотите получать от ИНА219 готовое значение тока - то тогда нужно перенастраивать библиотеку на свой шунт и проводить калибровку.
откуда напряжение шунта 0,2? оно может быть только 40, 80, 160 или 320 милливольт
Нет там такого. Если сами не понимаете - не путайте человека.
страница 19 даташита, в табличке выше я привёл значения максимального тока при выбранном им сопротивлении шунта и сопротивление шунта для тока в 20 миллиампер при любом допустимом значении усиления
ua6em - я имею в виду, что напряжение на шунте может быть любым, а не "только 40, 80, 160 или 320 милливольт". как это по ошибке написано у вас
совсем я запутался..
значит и калибровку не нужно вызывать в коде?
все очень просто. Можно получать от ИНА только напряжение, а ток считать самому. Тогда сопротивление шунта не важно и калибровка не нужна.
Если вы хотите получать от ИНА219 готовое значение тока - то тогда нужно перенастраивать библиотеку на свой шунт и проводить калибровку.
мне нужно получать ток, как как устройство мое - анемометр, гарантированно дает на выход измерительного блока только ток в диапазоне 4-20мА (это какойто индустриальный стандарт)
а напряжение будет сильно "зашумленно" и не будет показывать точную скорость ветра.
это параметры самого устройства, так что буду измерять именно ток.
но зачем менять код в самой библиотеке?
ведь есть функция калибровки и конфигурирования, разве ими нельзя указать мои диапазоны измерения?
именно в этом мой вопрос. я читал тему с самого начала и даже Dimax указывал:
http://arduino.ru/forum/apparatnye-voprosy/mini-obzor-monitora-toka-ina219-s-vykhodom-i2c#comment-208810
что для функции калибровки, второй параметр - напряж_шунта
по идее - ВЫЧИСЛЯЕТСЯ, а не ВЫБИРАЕТСЯ из даташита, тем более из этих 4 вариантов - 40, 80, 160 и 320..
но тут камрад говорит иное.. и это меня сбивет с толку.
я не пойму какой шунт мне взять лучше в итоге под мои диапазоны измерения.
10ом взял для проверки, так как штатный шунт R010 - 10мОм - вообще был неподходящий.