Прибор для измерения емкости аккумулятора. Основные способы

Каждый автовладелец задается вопросом, какой необходим прибор для измерения емкости аккумулятора. Измерение данной величины зачастую проводится при прохождении планового ТО, однако будет полезным научиться самому ее определять.

Прибор для измерения емкости аккумулятора

Емкость аккумулятора - это параметр, который определяет объем энергии, отдаваемый батареей при определенном напряжении за один час. Измеряется он в А/ч (Ампер в час), и зависит от которую определяют специальным устройством - ареометром. При покупке новой батареи все технические параметры производитель указывает на корпусе. Но эту величину можно определить и самому. Для этого существуют специальные приборы и методы.

Самый простой способ - это взять специальный тестер, например "Кулон". Это современный прибор для измерения емкости автомобильного аккумулятора, а также его напряжения. В этом случае вы затратите минимальное количество времени и получите достоверный результат. Для проверки необходимо подключить прибор к клеммам батареи и в течение нескольких секунд он определит не только емкость, а также напряжение аккумулятора и состояние пластин. Однако существуют и другие емкости АКБ.

Первый метод (классический)

К примеру, мультиметр можно использовать, как прибор для измерения емкости аккумулятора автомобиля, но с его помощью точных показаний вы не получите. Обязательным условием для данного метода (его называют методом контрольной разрядки) является полный заряд батареи. Для начала необходимо подключить к аккумулятору мощный потребитель (вполне подойдет обычная лампочка мощностью 60Вт).


После необходимо собрать цепь, которая состоит из мультиметра, АКБ, потребителя, и подать нагрузку. Если лампочка в течение 2 минут не меняет своей яркости (в противном случае аккумулятор восстановлению не подлежит), снимаем показания прибора в определенные интервалы времени. Как только показатель упадет ниже стандартного напряжения батареи (под нагрузкой она составляет 12В), начнется ее разряд. Теперь, зная промежуток времени, который потребовался на полное опустошение запаса энергии и ток нагрузки потребителя, необходимо перемножить эти значения. Произведение этих величин и является реальной емкостью АКБ. Если полученные значения отличаются от паспортных данных в меньшую сторону, необходима замена батареи. Этот метод дает возможность определить емкость любой АКБ. Недостатком данного метода являются большие затраты времени.

Второй метод

Также можно воспользоваться методом, при котором аккумулятор разряжают через резистор, применяя специальную схему. Используя секундомер определяем время, затраченное на разряд. Так как энергия будет теряться при напряжении в пределах 1 Вольта, мы с легкостью определим воспользовавшись формулой I=UR, где I - сила тока, U - напряжение, R - сопротивление. При этом необходимо избежать полной разрядки батареи, используя, например, специальное реле.

Как сделать прибор самостоятельно

При отсутствии возможности приобретения готового устройства, всегда можно собрать прибор для измерения емкости аккумулятора своими руками.

Для определения степени заряда и емкости АКБ можно воспользоваться В продаже имеется много моделей уже готовых вилок, однако можно собрать ее собственноручно. Далее рассматривается один из вариантов.

В данной модели используется расширенная шкала, благодаря чему достигается высокая точность измерений. Имеется встроенное нагрузочное сопротивление. Шкала разделена на два диапазона (0-10 В и 10-15 В), что дает дополнительное снижение погрешности измерений. Устройство также имеет 3-х вольтовую шкалу и другой вывод измерительного приспособления, давая возможность проверки отдельных банок АКБ. Шкала на 15В достигается благодаря снижению на диоде и стабилитроне напряжения. Величина тока устройства возрастает, если значение напряжения превышает уровень открытия стабилитрона. При подаче напряжения ошибочной полярности защитную функцию выполняет диод.

На схеме: R1- передает стабилитрону требуемый ток; R2 и R3 - резисторы, подобранные для микроамперметра М3240; R4 - определяет ширину узкого диапазона шкалы; R5 - нагрузочное сопротивление, включается тумблером SB1.

Сила тока нагрузки определяется по закону Ома. В расчет принимается нагрузочное сопротивление.

Прибор для измерения емкости аккумулятора АА

Емкость аккумуляторов типа АА измеряется в мА/ч (миллиампер в час). Для измерения таких батарей можно применять специальные зарядные устройства, которые определяют ток, напряжение и емкость батареи. Примером такого устройства является прибор для измерения емкости аккумулятора AccuPower IQ3, который имеет блок питания с диапазоном напряжения от 100 до 240 Вольт. Для измерения потребуется вставить аккумуляторы в устройство, и на дисплее появятся все необходимые параметры.

Определение емкости с помощью зарядного устройства

Также емкость можно определить и с помощью обычного зарядного устройства. Определив величину силы тока заряда (она указывается в характеристиках прибора), необходимо полностью зарядить аккумулятор и засечь затраченное на это время. После, перемножив эти два значения, получаем приблизительную емкость.

Более точные показания можно получить, воспользовавшись еще одним методом, для которого вам потребуется полностью заряженный АКБ, секундомер, мультиметр и потребитель (можно использовать, например, фонарик). Подключаем потребитель к аккумулятору, и при помощи мультиметра определяем ток потребления (чем он меньше, тем более достоверны результаты). Засекаем время, в течение которого светил фонарик, и полученный результат умножаем на ток потребления.

Этот измеритель емкости может измерять емкость конденсаторов с разрешением 1 пФ в нижнем конце диамазона. Максимальная измеряемая емкость - 10000 мкФ. Реальная точность не известна, но линейная ошибка лежит в пределах максимум 0.5 % , и обычно меньше 0.1% (получено измерением параллельно подключенных нескольких конденсаторов). Наибольшие затруднения возникают при измерении электролитических конденсаторов большой емкости.

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

Измеритель емкости имеет систему меню, которая в том числе позволяет откалибровать нулевое значение и емкость в 1 мкФ. Калибровка сохраняется в EEPROM.

Для проекта был выбран один из самых маленьких чипов - Атмега8. Схема питается от 9-вольтовой батарейки через линейный регулятор 7805.

Прибор может работать в трех режимах: измерение в нижнем диапазоне, в верхнем диапазоне, и в режиме разрядки. Эти режимы определяются состоянием выводов PD5 и PD6 контроллера. Во время разрядки PD6 имеет лог. 0 и кондерсатор разряжается через резистор R7 (220 Ом). В верхнем диапазоне измерений PD5 имеет лог. 1, заряжая конденсатор через R8 (1.8K) и PD6 находится в Z-состоянии чтобы позволить аналоговому компаратору сравнивать напряжение. В нижнем диапазоне измерений PD5 также находится в Z-состоянии, и конденсатор заряжается только через R6 (1.8MОм).

В качестве индикатора может использоваться любой дисплей на контроллере HD44780 размером 16x2 символов. Разводка коннектора дисплея показана на этом рисунке:

Устройство собрано на макетной плате и размещено в простом прямоугольном пластиковом корпусе. В крышке корпуса вырезаны отверстия под индикатор, кнопку и светодиод, которые закреплены термоклеем:

Программа измерителя емкости

В устройстве можно использовать контроллера atmega8 и atmega48/88/168 семейства. При замене контроллера в программе нужно изменить строку, отвечающую за конфигурацию таймера конкретного контроллера.

Для того, что бы измерить ёмкость какого-нибудь аккумулятора, обычно поступают так: подключают к этому аккумулятору резистор определённого номинала, который разряжает этот аккумулятор, и записывая величины тока, протекающего через резистор и напряжение на нём, дожидаются полной разрядки аккумулятора. По полученным данным строится график разряда, из которого и выясняют ёмкость. Проблема только в том, что по мере снижения напряжения на аккумуляторе ток через резистор так же будет уменьшаться, так что данные придётся интегрировать во времени, поэтому точность такого способа измерения ёмкости аккумулятора оставляет желать лучшего.

Если же разряжать аккумулятор не через резистор, а через источник стабильного тока, то это позволит определить ёмкость аккумулятора с очень большой точностью. Но здесь есть одна проблема - напряжение на аккумуляторе (1,2..3,7 В) недостаточно для работы источника стабильного тока. Но эту проблему можно обойти, добавив в схему измерения дополнительный источник напряжения.

Рис. 1. Схема для измерения ёмкости аккумулятора
V1 - исследуемый аккумулятор; V2 - вспомогательный источник напряжения; PV1 - вольтметр;
LM7805 и R1 - источник стабильного тока; VD1 - защитный диод.

На рисунке 1 изображена принципиальная схема установки для измерения ёмкости аккумулятора. Здесь видно, что измеряемый аккумулятор V1 включён последовательно с источником тока (его образуют интегральный стабилизатор LM7805 и резистор R1) и вспомогательным источником питания V2. Поскольку V1 и V2 соединены последовательно, то сумма их напряжений оказывается достаточной для работы источника тока. Так как минимальное напряжение, необходимое для работы источника тока составляет 7 В (из них 5 В - это напряжение на выходе микросхемы LM7805, т.е. в данном случае это падение напряжения на резисторе R1, и 2 В - это минимально допустимое падение напряжения между входом и выходом LM7805), то для работы источника тока суммы напряжений V1 и V2 хватает с некоторым запасом.

Вместо стабилизатора LM7805 можно использовать другой интегральный стабилизатор, например, LM317 с выходным напряжением 1,25 В и минимальным падением напряжения 3 В. Так как минимальное рабочее напряжение источника тока будет равно 4,25 В, то напряжение второго источника напряжения V2 можно снизить до 5 В. В случае использования стабилизатор LM317 величина тока стабилизации будет определяться по формуле I = 1,25/R1

Тогда для разрядного тока 100 мА величина сопротивления R1 должна быть примерно 12,5 Ом.

Как производить измерение ёмкости аккумулятора

Вначале подбором резистора R1 нужно установить разрядный ток - обычно величину разрядного тока выбирают равной рабочему току разряда аккумулятора. Следует так же иметь в виду, что некоторые модели интегральных стабилизаторов напряжения 7805 могут потреблять небольшой управляющий ток порядка 2...8 мА, так что величину тока в схеме рекомендуется проверять амперметром. Далее полностью заряженный аккумулятор V1 устанавливают в схему, и замкнув выключатель SA1 начинают отсчёт времени до того момента, когда напряжение на аккумуляторе снизится до минимальной величины - для разных типов аккумуляторных батарей эта величина различна, например, для никель-кадмиевых (NiCd) - 1,0 В, для никель-металлогидридных (NiMH) - 1,1 В, для литий-ионных (Li-ion) - 2,5...3 В, для каждой конкретной модели аккумулятора эти данные нужно смотреть в соответствующей документации.

После достижения минимального напряжения на аккумуляторе выключатель SA1 размыкают. Следует помнить, что разряд аккумулятора ниже минимального напряжения может вывести его из строя. Перемножив величину разрядного тока (в Амперах) на время разряда (в часах) получаем ёмкость аккумулятора (А*ч):

C = I * t

Рассмотрим практическое применение этого способа измерения ёмкости аккумулятора на конкретном примере.

Измерение ёмкости аккумулятора NB-11L

Аккумулятор NB-11L (рис. 2.) был приобретён в интернет-магазине DealeXtreme за 3,7 доллара (SKU: 169532). На корпусе аккумулятора указана его ёмкость - 750 мА*ч. На сайте его ёмкость указана уже скромнее - 650 мА*ч. Какая же реальная ёмкость этого аккумулятора?

Рис. 2. Li-ion аккумулятор NB-11L ёмкостью якобы 750 мА*ч
Fits CAN.NB-11L 3.7V 750mAh
Use specified charger only

Что бы подключить проводники к контактам аккумулятора потребуются две скрепки, которые следует изогнуть так, как показано на рисунке 3, и подключить их к "+" и "-" выводам аккумулятора (рис. 4.). Необходимо избегать замыкания контактов, лучше их заизолировать.

Для измерения ёмкости аккумулятора NB-11L его разрядный ток был принят равным 100 мА. Для этого величина резистора R1 была выбрана чуть больше 50 Ом. Мощность, рассеиваемая на резисторе R1 определяется по формуле P = V 2 /R1 , где V - напряжение на резисторе R1. В данном случае P=5 2 /50=0,5 Вт. Стабилизатор LM7805 следует установить на радиатор, если же под рукой нет подходящего радиатора, то микросхему можно частично погрузить в стакан с холодной водой, но так, что бы выводы остались сухими (в случае корпуса TO-220).

После установки полностью заряженного аккумулятора NB-11L в схему и замыкания выключателя SA1 начался отсчёт времени с периодическим контролем напряжения по вольтметру PV1. Данные заносились в таблицу, по которой был построен график разряда аккумулятора NB-11L (рис. 5).

Рис. 5. График напряжения на аккумуляторе NB-11L в процессе его разряда током 100 мА

Отсюда видно, что за 5 часов разряда током 0,1 А напряжение на аккумуляторе снизилось до 3 вольт и стало быстро падать дальше.

C = I * t = 0,1 * 5 = 0,5 А = 500 мА*ч.

Так что реальная же ёмкость аккумулятора NB-11L оказалась в 1,5 раза ниже указанной на нём.

Это устройство предназначено для измерения ёмкости аккумуляторов Li-ion и Ni-Mh , а также для заряда Li-ion аккумуляторов с выбором начального тока заряда.

Управление

Подключаем устройство к стабилизированному блоку питания 5в и током 1А (например от сотового телефона). На индикаторе в течении 2 сек отображается результат предыдущего измерения емкости "ххххmA/c" а на второй строке значение регистра OCR1A "S.xxx". Вставляем аккумулятор. Если нужно зарядить аккумулятор то кратко жмём кнопку ЗАРЯД, если нужно измерить ёмкость то кратко жмём кнопку ТЕСТ. Если нужно изменить ток заряда (значение регистра OCR1A) то долго(2 сек) жмем кнопку ЗАРЯД. Заходим в окно регулировки регистра. Отпускаем кнопку. Кратко нажимая на кнопку ЗАРЯД меняем по кругу значения (50-75-100-125-150-175-200-225) регистра, в первой строке показывается ток заряда пустого аккумулятора при выбранном значении (при условии что у вас в схеме стоит резистор 0,22 Ом). Кратко жмём кнопку ТЕСТ значение регистра OCR1A запоминаются в энергонезависимой памяти.
Если вы проделывали разные манипуляции с устройством и вам надо сбросить показания часов, измеренной ёмкости то долго жмём кнопку ТЕСТ (значение регистра OCR1A не сбрасываются). Как только заряд окончен подсветка дисплея отключается, для включения подсветки кратко нажмите кнопку ТЕСТ или ЗАРЯД.

Логика работы устройства следующая:

При подаче питания, на индикаторе отображается результат предыдущего измерения ёмкости аккумулятора и значение регистра OCR1A, хранящееся в энергонезависимой памяти. Через 2 секунды устройство переходит в режим определения типа аккумулятора по величине напряжения на клемах.

Если напряжение более 2В то это Li-ion аккумулятор и напряжение полного разряда составит 2,9В, иначе это Ni-MH аккумулятор и напряжение полного разряда составит 1В. Только после подключения аккумулятора доступны кнопки управления. Далее устройство ожидает нажатия кнопок Тест или Заряд. На дисплее отображается "_STOP". При нажатии кратко кнопки Тест подключается нагрузка через MOSFET.

Величина тока разряда определяется по напряжению на резисторе 5,1Ом и, каждую минуту суммируется с предыдущим значением. В устройстве используется кварц 32768Гц для работы часов.

На дисплее отображается текущая величина емкости аккумулятора "ххххmA/c" и тора разряда "А.ххх", а также время "хх:хх:хх"с момента нажатия кнопки. Показывается также анимированный значок разряда аккумулятора. По окончании теста для Ni-MH аккумулятора появляется надпись "_STOP", результат измерения отображается на дисплее "ххххmA/c" и запоминается.

Если аккумулятор Li-ion, то также результат измерения отображается на дисплее "ххххmA/c" и запоминается, но сразу включается режим заряда. На дисплее отображается содержимое регистра OCR1A "S.xxx". Показывается также анимированный значок заряда аккумулятора.

Регулировка тока заряда осуществляется с помощью ШИМ и ограничивается резистором 0,22Ом. Апаратно ток заряда можно уменьшить увеличив сопротивление 0,22Ом до 0,5-1Ом. В начале заряда ток плавно нарастает до значения регистра OCR1A или до достижения напряжения на клемах аккумулятора 4,22В (если аккумулятор был заряжен).

Величина тока заряда зависит от значения регистра OCR1A - больше значение - больше ток заряда. При превышении напряжения на клемах аккумулятора 4,22В значение регистра OCR1A уменьшается. Процесс дозаряда продолжается до величины регистра OCR1A равного 33, что соответствует току около 40 mA. На этом заряд заканчивается. Подсветка дисплея отключается.

Настройка

1. Подключаем питание.
2. Подключаем аккумулятор.
3. Подключаем вольтметр к аккумулятору.
4. Временными кнопками + и - (PB4 и PB5)добиваемся совпадения показания вольтметра на дисплее и на эталонном вольтметре.
5. Длительно нажимаем на кнопку ТЕСТ (2 сек), происходит запоминание.
6. Извлекаем аккумулятор.
7. Подключаем вольтметр к резистору 5,1Ом (по схеме около транзистора 09N03LA).
8. Подключаем регулируемый БП к клемам аккумулятора, выставляем на БП 4В.
9. Нажимаем кратко кнопку ТЕСТ.
10. Измеряем напряжение на резисторе 5,1Ом - U.
11. Высчитываем ток разряда I=U/5,1
12. Временными кнопками + и - (PB4 и PB5) устанавливаем на индикаторе"А.ххх" рассчитанный ток разряда I.
13. Длительно нажимаем на кнопку ТЕСТ (2 сек), происходит запоминание.

Устройство питается от стабилизированного источника напряжением 5 Вольт и током 1А. Кварц на 32768Гц предназначен для точного отсчета времени. Контроллер ATmega8 тактируется от внутреннего генератора частотой 8 МГц, также необходимо установить защиту от стирания EEPROM соответствующими битами конфигурации. При написании управляющей программы были использованы обучающие статьи с данного сайта.

Текущие значения коэффициентов напряжения и тока (Ukof . Ikof) можно увидеть если подключить дисплей 16х4 (16х4 предпочтительно для отладки) на третьей строке. Или в Ponyprog если открыть файл прошивки EEPROM (считать с контроллера EEPROM).
1 байт - OCR1A , 2 байт - I_kof, 3 байт - U_kof, 4 и 5 байт результат предыдущего измерения емкости.

Видео работы прибора:

В последнее время я начал замечать, что мой смартфон стал разряжаться быстрее. Поиски программного «пожирателя» энергии плодов не принесли, поэтому стал задумываться, не пришло ли время заменить АКБ. Но абсолютной уверенности в том, что причина в батарее не было. Поэтому прежде чем заказывать новый аккумулятор решил попробовать измерить реальную емкость старого. Для этого было решено собрать простой измеритель емкости АКБ, тем более что идея эта вынашивалась уже давно – уж очень много батареек и аккумуляторов окружает нас в повседневной жизни, и было бы неплохо иметь возможность время от времени тестировать их.

Сама идея, лежащая в основе работы устройства, крайне проста: есть заряженный аккумулятор и нагрузка в виде резистора, нужно лишь измерять ток, напряжение и время в ходе разряда АКБ, и по полученным данным рассчитать его емкость. В принципе, можно обойтись вольтметром и амперметром, но сидеть за приборами несколько часов удовольствие сомнительное, поэтому намного проще и точнее можно сделать это используя регистратор данных. Я в качестве такого регистратора использовал платформу Arduino Uno.

1. Схема

С измерением напряжения и времени в Arduino проблем нет – есть АЦП, но чтобы измерить ток нужен шунт. У меня появилась идея использовать сам нагрузочный резистор в качестве шунта. То есть, зная на нем напряжение и предварительно измерив сопротивление, мы всегда можем рассчитать ток. Поэтому простейший вариант схемы будет состоять лишь из нагрузки и АКБ, с подключением к аналоговому входу Arduino. Но было бы неплохо предусмотреть отключение нагрузки по достижению порогового напряжение на батарее (для Li-Ion это обычно 2,5-3В). Поэтому я предусмотрел в схеме реле, управляемое цифровым пином 7 через транзистор. Конечный вариант схемы на рисунке ниже.

Все элементы схемы я разместил на кусочке макетной платы, которая устанавливается прямо на Uno. В качестве нагрузки использовал спираль из нихромовой проволоки толщиной 0,5мм, имеющей сопротивление около 3 Ом. Это дает расчетное значение тока разряда 0,9-1,2А.

2. Измерение тока

Как было сказано выше ток рассчитывается исходя из напряжения на спирали и её сопротивления. Но стоит учесть, что спираль нагревается, а сопротивление нихрома довольно сильно зависит от температуры. Чтобы компенсировать ошибку я просто снял вольт-амперную характеристику спирали, используя лабораторный блок питания и давая ей прогреться перед каждым измерением. Далее вывел в Excel уравнение линии тренда (график ниже), которое дает довольно точную зависимость i(u) с учетом нагрева. Видно, что линия не прямая.

3. Измерение напряжения

Поскольку точность данного тестера напрямую зависит от точности измерения напряжения, я решил уделить этому особое внимание. В других статьях уже неоднократно упоминали метод, позволяющих наиболее точно измерять напряжение контроллерами Atmega. Повторю лишь вкратце – суть состоит в определении внутреннего опорного напряжения средствами самого контроллера. Я пользовался материалами данной статьи.

4. Программа

Код не представляет из себя ничего сложного:

Текст программы

#define A_PIN 1 #define NUM_READS 100 #define pinRelay 7 const float typVbg = 1.095; // 1.0 -- 1.2 float Voff = 2.5; // напряжение выключения float I; float cap = 0; float V; float Vcc; float Wh = 0; unsigned long prevMillis; unsigned long testStart; void setup() { Serial.begin(9600); pinMode(pinRelay, OUTPUT); Serial.println("Press any key to start the test..."); while (Serial.available() == 0) { } Serial.println("Test is launched..."); Serial.print("s"); Serial.print(" "); Serial.print("V"); Serial.print(" "); Serial.print("mA"); Serial.print(" "); Serial.print("mAh"); Serial.print(" "); Serial.print("Wh"); Serial.print(" "); Serial.println("Vcc"); digitalWrite(pinRelay, HIGH); testStart = millis(); prevMillis = millis(); } void loop() { Vcc = readVcc(); //считывание опорного напряжения V = (readAnalog(A_PIN) * Vcc) / 1023.000; //считывание напряжения АКБ if (V > 0.01) I = -13.1 * V * V + 344.3 * V + 23.2; //расчет тока по ВАХ спирали else I=0; cap += (I * (millis() - prevMillis) / 3600000); //расчет емкости АКБ в мАч Wh += I * V * (millis() - prevMillis) / 3600000000; //расчет емкости АКБ в ВтЧ prevMillis = millis(); sendData(); // отправка данных в последовательный порт if (V < Voff) { //выключение нагрузки при достижении порогового напряжения digitalWrite(pinRelay, LOW); Serial.println("Test is done"); while (2 > 1) { } } } void sendData() { Serial.print((millis() - testStart) / 1000); Serial.print(" "); Serial.print(V, 3); Serial.print(" "); Serial.print(I, 1); Serial.print(" "); Serial.print(cap, 0); Serial.print(" "); Serial.print(Wh, 2); Serial.print(" "); Serial.println(Vcc, 3); } float readAnalog(int pin) { // read multiple values and sort them to take the mode int sortedValues; for (int i = 0; i < NUM_READS; i++) { delay(25); int value = analogRead(pin); int j; if (value < sortedValues || i == 0) { j = 0; //insert at first position } else { for (j = 1; j < i; j++) { if (sortedValues <= value && sortedValues[j] >= value) { // j is insert position break; } } } for (int k = i; k > < (NUM_READS / 2 + 5); i++) { returnval += sortedValues[i]; } return returnval / 10; } float readVcc() { // read multiple values and sort them to take the mode float sortedValues; for (int i = 0; i < NUM_READS; i++) { float tmp = 0.0; ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); ADCSRA |= _BV(ADSC); // Start conversion delay(25); while (bit_is_set(ADCSRA, ADSC)); // measuring uint8_t low = ADCL; // must read ADCL first - it then locks ADCH uint8_t high = ADCH; // unlocks both tmp = (high << 8) | low; float value = (typVbg * 1023.0) / tmp; int j; if (value < sortedValues || i == 0) { j = 0; //insert at first position } else { for (j = 1; j < i; j++) { if (sortedValues <= value && sortedValues[j] >= value) { // j is insert position break; } } } for (int k = i; k > j; k--) { // move all values higher than current reading up one position sortedValues[k] = sortedValues; } sortedValues[j] = value; //insert current reading } //return scaled mode of 10 values float returnval = 0; for (int i = NUM_READS / 2 - 5; i < (NUM_READS / 2 + 5); i++) { returnval += sortedValues[i]; } return returnval / 10; }

Каждые 5 секунд данные о времени, напряжении батареи, токе разряда, текущей емкости в мАч и ВтЧ, а также напряжении питания передаются в последовательный порт. Ток рассчитывается по полученной в п. 2 функции. По достижении порогового напряжения Voff тест прекращается.
Единственным, на мой взгляд, интересным моментом в коде я бы выделил использование цифрового фильтра. Дело в том, что при считывании напряжения значения неизбежно «пляшут» вверх-вниз. Сначала я пытался уменьшить этот эффект просто сделав 100 измерений за 5 секунд и взяв среднее. Но результат по-прежнему меня не удовлетворил. В ходе поисков я наткнулся на такой программный фильтр. Работает он похожим образом, но вместо усреднения он сортирует все 100 значений измерений по возрастанию, выбирает центральные 10 и высчитывает среднее из них. Результат меня впечатлил – флуктуации измерений полностью прекратились. Я решил использовать его и для измерения внутреннего опорного напряжения (функция readVcc в коде).

5. Результаты

Данные из монитора последовательного порта в несколько кликов импортируются в Excel и выглядят следующим образом:

В случае с моим Nexus 5 заявленная ёмкость аккумулятора BL-T9 – 2300 мАч. Измеренная мной – 2040 мАч при разряде до 2,5 В. В реальности контроллер вряд ли позволяет сесть батарее до такого низкого напряжения, скорее всего пороговое значение 3В. Ёмкость в этом случае 1960 мАч. Полтора года службы телефона привели к просадке емкости примерно на 15%. С покупкой новой АКБ было решено повременить.
С помощью данного тестера было разряжено уже несколько других Li-Ion аккумуляторов. Результаты выглядят очень реалистично. Измеренная емкость новых АКБ совпадает с заявленной с отклонением менее 2%.
Данный тестер подойдет и для металл-гидридных пальчиковых аккумуляторов. Ток разряда в этом случае составит около 400 мА.