Реклама:
Хочешь стать куратором любимой темы?
0 Пользователи и 2 Гостей просматривают эту тему.
Ну выложи скетч, хоть понять по какой формуле и что ты считаешь, основываясь на просадке напряжения под нагрузкой.
А можете описать алгоритм вашего устройства? Как нагружает, что при этом замеряет и какие выводы на основе измерений делает?
/* INA226 Bi-directional Current/Power Monitor. Alert Example. Read more: http://www.jarzebski.pl/arduino/czujniki-i-sensory/cyfrowy-czujnik-pradu-mocy-ina226.html GIT: https://github.com/jarzebski/Arduino-INA226 Web: http://www.jarzebski.pl (c) 2014 by Korneliusz Jarzebski*/#include <Wire.h>#include <INA226.h>INA226 ina;#include <Tiny4kOLED.h>uint8_t width = 128;uint8_t height = 32;void setup() { oled.begin(width, height, sizeof(tiny4koled_init_128x32br), tiny4koled_init_128x32br); oled.setRotation(1); oled.setFont(FONT6X8); oled.clear(); oled.on(); oled.setCursor(20, 0); //top left oled.print("MilliOhmMeter"); pinMode(13, OUTPUT); digitalWrite(13, LOW); // Default INA226 address is 0x40 ina.begin(); // Configure INA226 ina.configure(INA226_AVERAGES_1, INA226_BUS_CONV_TIME_1100US, INA226_SHUNT_CONV_TIME_1100US, INA226_MODE_SHUNT_BUS_CONT); // Calibrate INA226. Rshunt = 0.01 ohm, Max excepted current = 4A ina.calibrate(0.01, 4); // Enable Bus Over-Voltage Alert // ina.enableBusOvertLimitAlert(); // ina.enableBusUnderLimitAlert(); // ina.setBusVoltageLimit(3.33); // Enable Shunt Over-Voltage Alert // ina.enableShuntOverLimitAlert(); // ina.enableShuntUnderLimitAlert(); // ina.setShuntVoltageLimit(0.0055); // Enable Power Over-Limit Alert ina.enableOverPowerLimitAlert(); ina.setPowerLimit(0.130); // ina.setAlertInvertedPolarity(true)}void clear(int x, int y){ oled.setCursor(x, y); oled.print(" "); oled.setCursor(x, y);}void loop(){// digitalWrite(13, LOW); float shuntVoltage_mV = 0.0; float loadVoltage_V = 0.0; float busVoltage_V = 0.0; float current_mA = 0.0; float busVoltage_uV = 0.0; float loadVoltage = 0.0; float current = 0.0; float dU = 0.0; float r = 0.0; float power_mW = 0.0; int count = 0; clear(1,3); oled.print("Status: unLoad mode!"); busVoltage_uV = 0; for (int t=0; t<20; t++ ){ busVoltage_uV = busVoltage_uV + (1000 * ina.readBusVoltage()); count = t; delay(250); } count = count + 1; busVoltage_uV = busVoltage_uV / count; clear(1,1); oled.setCursor(8, 1); oled.print("UnLoad U = "); oled.print(busVoltage_uV/1000); oled.print("V"); if (busVoltage_uV > 850){ clear(0,2); oled.setCursor(6, 2); oled.print("Unload U > 0.85V"); clear(1,3); oled.print("Status: please wait!"); delay(2000); clear(1,3); oled.print("Status: Load mode!"); delay(200); digitalWrite(13, HIGH); clear(1,1); oled.print("I="); oled.setCursor(1, 2); oled.print("U="); delay(200); for (int t=0; t<50; t++ ){ shuntVoltage_mV = ina.readShuntVoltage(); busVoltage_V = 1000 * ina.readBusVoltage(); current_mA = ina.readShuntCurrent(); power_mW = 1000 * ina.readBusPower(); loadVoltage_V = busVoltage_V + shuntVoltage_mV; loadVoltage = loadVoltage + busVoltage_V; current = current + current_mA; oled.setCursor(15, 1); oled.print(current_mA*1000); oled.print("mA t="); oled.print(t); oled.setCursor(15, 2); oled.print(loadVoltage_V/1000); oled.print("V P="); oled.print(power_mW); oled.print("mW"); delay(200); if (loadVoltage_V < 750){ t=53; } count = t; } digitalWrite(13, LOW); if (count == 49){ count = count + 1; current_mA = current / count; loadVoltage_V = loadVoltage / count; dU = busVoltage_uV - loadVoltage_V; r = dU / current_mA; clear(0,1); oled.setCursor(8, 1); oled.print("r = "); oled.print(r); oled.print(" mOhm"); clear(0,2); clear(0,3); oled.print("Done"); delay(5000); } else { clear(0,1); oled.setCursor(2, 1); oled.print("Stop! Load = "); oled.print(current_mA*1000); oled.print("mA"); clear(0,2); oled.setCursor(8, 2); oled.print("Load U < 0.75V "); clear(0,3); oled.print("Done, battery BAD!"); delay(5000); } } else { clear(0,2); oled.setCursor(8, 2); oled.print("unLoad U < 0.85V "); } }
дифицитный
.. показания с приборами за многотысяч совпадают. ..
родешварц на колёсиках, флюк какой-то, и не знаю что у дядьки было, я у него аккумы лифановские брал, он распечатку присылал, в общем математика и физика одна потому и показания одни
Х все таки хорошо бы знать, что за прибор используется в качестве эталона.. но в принципе, главное чтобы были стабильные показания у данного экземпляра. Попробую собрать и проверить. Можно сделать вариант с встроенным аккумулятором на литии, тогда диапазон можно поднять (без переделки схемы и скетча) до 36 В, а если с делителем то и до 72 или выше, можно будет мерить сборки.. думаю, точность упадет не слишком критично, можно уменьшить фреймы (паузы между замерами) и увеличить число выборок. Полезным дополнением было бы выводить данные в порт юсб, на комп. тогда можно было бы делать дополнительный анализ и сохранение данных типа как тут ссылка...
..Ина 226 может в лоб измерять 26 вольт. ..Нагружать током больше 2А не вижу смысла.
ничего оптимизировать не надо, там датчик программируется и сам всё измеряет и отдаёт по требованию, если выкинуть олед то программа будет в 10 строк кода, можно сделать режим полного теста, на выходе будет начальное напряжение, конечное напряжение, внутреннее сопротивление и ёмкость
не, чета не в кассу, а че на карту писать, и зачем. да и емкость измерять карманным тестером с трудом представляется. это уже не тестер будет, а какой то другой прибор
только разряжать для достоверности нужно существенным током, хотя бы (0.1-03)С а это для 30АЧ минимум 1 -3А, для 36 вольт это больше 100ватт выходит
Точность прибора составляет 8 знаков после запятой
Продолжу второй версией прибора. делитель с коэфф 3,861, но лучше наверное переменник на 100К и подобрать точно на 3 или 4 раза Скрытый текстПока только схема:
Автор iРаздел Источники питания
Автор GrendelРаздел Микроэлектроника
Автор Иван СусанинРаздел Электровелосипеды
Автор tvvРаздел Электромобили
Автор jan4511Раздел Электровелосипеды