Оглавление:

Еще один тестер емкости аккумулятора: 6 шагов
Еще один тестер емкости аккумулятора: 6 шагов

Видео: Еще один тестер емкости аккумулятора: 6 шагов

Видео: Еще один тестер емкости аккумулятора: 6 шагов
Видео: Тестер ёмкости аккумулятора 18650 2024, Июль
Anonim
Еще один тестер емкости аккумулятора
Еще один тестер емкости аккумулятора
Еще один тестер емкости аккумулятора
Еще один тестер емкости аккумулятора

Зачем нужен еще один тестер емкости

Я прочитал много разных инструкций по сборке тестеров, но ни одна из них не соответствует моим потребностям. Я хотел иметь возможность тестировать не только одиночные NiCd / NiMH или Lion-элементы. Я хотел иметь возможность протестировать аккумулятор электроинструмента, не разбирая его предварительно. Итак, я решил разобраться в этом вопросе и разработать свой собственный. Одно ведет к другому, и я, наконец, решил сам написать инструкцию. Я также решил не вдаваться во все подробности того, как на самом деле построить тестер, потому что каждый может решить определенные варианты, например, какой размер резистора использовать, нужна ли печатная плата или достаточно ли Veroboard, а также есть тонна инструкций, как это сделать. установить орел или как сделать печатную плату. Другими словами, я сконцентрируюсь на схеме и коде, а также на том, как откалибровать тестер.

Шаг 1. История - версия 1

История - Версия 1
История - Версия 1

Выше первая версия с указанной ниже добавленной поддержкой входа более 10 В (R12 & R17 & Q11 & Q12).

Первая версия была более или менее взята из инструкций от deba168 (к сожалению, я не могу найти его инструкции для предоставления ссылки). Были внесены лишь незначительные изменения. В этой версии у меня был нагрузочный резистор 10 Ом, управляемый МОП-транзистором. Однако это принесло некоторые проблемы. При тестировании одного NiCd или NiMH элемента необходимое время легко измерялось часами, если не днями. Аккумулятор на 1500 мАч занял более 12 часов (ток всего 120 мА). С другой стороны, первая версия могла тестировать только батареи до 10 В. А полностью заряженная батарея на 9,6 В может фактически обеспечивать напряжение до 11,2 В, что не может быть проверено из-за ограничения в 10 В. Что-то нужно было сделать. Во-первых, я просто добавил пару МОП-транзисторов и резисторов, чтобы делители напряжения выдерживали напряжение более 10 В. Но это, с другой стороны, подняло другую проблему. Полностью загруженная батарея на 14,4 В может иметь до 16,8 В, что с резистором 10 Ом означает ток 1,68 А и, конечно, рассеиваемая мощность нагрузочного резистора почти 30 Вт. Таким образом, при низком напряжении слишком долгое время испытания и при высоком напряжении - слишком большой ток. Ясно, что это не подходящее решение, и необходимо дальнейшее развитие.

Шаг 2: Версия 2

Мне нужно было решение, в котором ток оставался бы в определенных пределах независимо от напряжения батареи. Одним из решений было бы использовать ШИМ и только один резистор, но я предпочел иметь решение без пульсирующего тока или необходимости рассеивать тепло МОП-транзистора. Таким образом, я создал решение с 10 слотами напряжения, каждый шириной 2 В, используя 10 резисторов 3,3 Ом и МОП-транзистор для каждого резистора.

Шаг 3: вот как все вышло

Вот как это оказалось
Вот как это оказалось

Комментарии к схеме Можно утверждать, что потеря напряжения на МОП-транзисторе незначительна, потому что сопротивление МОП-транзистора настолько низкое, но я оставил выбор МОП-транзистора считывателю, и, таким образом, сопротивление может превышать 1 Ом, где оно начинает снижаться. иметь значение. В первой версии выбор правильного МОП устранит необходимость измерения нижней точки, но в версии 2 я решил измерять напряжение только на одном резисторе, что делает важным наличие двух точек измерения. Причиной выбора стала простота подключения Veroboard. Это добавляет некоторую погрешность в точности, поскольку измеренное напряжение на одном резисторе значительно меньше, чем измеренное на всех резисторах. При выборе компонентов я решил использовать то, что у меня уже было под рукой, или то, что я мог легко получить. Это привело к следующей спецификации:

  • Arduino Pro Mini 5V! ВАЖНО! Я использовал версию на 5В и все на ней основано
  • 128x64 I2C OLED-дисплей
  • Резисторы 10 x 5 Вт 3,3 Ом
  • 3 x 2n7000 МОП-транзисторов
  • 10 МОП-транзисторов IRFZ34N
  • 6 резисторов по 10 кОм
  • 2 резистора по 5 кОм
  • Конденсатор 16V 680uF
  • 1 старый вентилятор процессора

Я не добавил в схемы следующее

  • подтягивающие резисторы на линиях I2C, которые, как я заметил, сделали дисплей более стабильным
  • линии электропередач
  • конденсатор в линии 5V, который также стабилизировал дисплей

Во время тестирования я заметил, что нагрузочные резисторы сильно нагреваются, особенно если все они используются. Температура поднялась до более чем 100 градусов по Цельсию (что составляет более 212 градусов по Фаренгейту), и если вся система должна быть закрыта в коробке, должно быть предусмотрено какое-то охлаждение. Резисторы, которые я использовал, имеют сопротивление 3,3 Ом / 5 Вт, а максимальный ток должен быть около 2 В на резистор, что дает 2 В / 3,3 = 0,61 А, что дает 1,21 Вт. Я закончил тем, что добавил в коробку простой вентилятор. В основном потому, что у меня случайно оказался старый вентилятор для процессора.

Схема функциональности

Это довольно просто и не требует пояснений. Тестируемая батарея подключается к серии резисторов и заземления. Точки измерения напряжения - это подключение аккумулятора и первый резистор. Затем делители напряжения используются для понижения напряжения до уровня, который лучше подходит для Arduino. Один цифровой выход используется для выбора диапазона делителей 10 В или 20 В. Каждый резистор в нагрузке можно отдельно заземлить с помощью МОП-транзисторов, которые управляются напрямую от Arduino. И, наконец, дисплей подключается к контактам Arduino I2C. Немногое сказать о схеме J

Шаг 4: Код

Код
Код

Выше можно увидеть приблизительную функциональность кода. Тогда давайте более подробно рассмотрим код (ino-файлы arduino прилагаются). Есть несколько функций, а затем основной цикл.

Основной цикл

Когда измерения готовы, результаты отображаются, и на этом выполнение заканчивается. Если измерение еще не выполнено, сначала проверяется, какой тип батареи выбран, а затем проверяется напряжение на входе. Если напряжение превышает 0,1 В, должна быть подключена хотя бы какая-то батарея. В этом случае вызывается подпрограмма, чтобы попытаться выяснить, сколько ячеек в батарее, чтобы решить, как тестировать. Количество ячеек - это более или менее информация, которую можно было бы лучше использовать, но в этой версии она передается только через последовательный интерфейс. Если все в порядке, запускается процесс разряда и на каждом цикле основного контура рассчитывается емкость аккумулятора. В конце основного цикла дисплей заполняется известными значениями.

Порядок показа результатов

Функция showResults просто устанавливает строки, которые будут отображаться на дисплее, а также строку, которая будет отправлена в последовательный интерфейс.

Порядок измерения напряжений

В начале функции измеряется Vcc Arduino. Это необходимо для расчета напряжений, измеренных с помощью аналоговых входов. Затем измеряется напряжение батареи с использованием диапазона 20 В, чтобы можно было решить, какой диапазон использовать. Затем рассчитывается как напряжение батареи, так и напряжение резистора. При измерении напряжения батареи используется класс DividerInput, который имеет методы чтения и напряжения для получения необработанных показаний или рассчитанного напряжения соответствующего аналогового входа.

Процедура выбора используемых значений

В функции selectUsedValues угадывается количество ячеек, и устанавливаются верхний и нижний пределы для батареи, которые будут использоваться с процедурой разряда. Также измерение помечается как начатое. Пределы для этой процедуры устанавливаются в начале как глобальные переменные. Хотя они могут быть постоянными, и они также могут быть определены внутри процедуры, поскольку они не используются глобально. Но ведь всегда есть что улучшить:)

Порядок расчета емкости аккумулятора

Функция разряда заботится о фактическом подсчете емкости батареи. В качестве параметров он получает нижний и верхний пределы напряжений для тестируемой батареи. Высокое значение не используется в этой версии, но низкое значение используется, чтобы решить, когда остановить тестирование. В начале функции количество используемых резисторов определяется с помощью функции, созданной для этой цели. Функция возвращает номер резистора и одновременно запускает разряд и сбрасывает счетчик. Затем измеряются напряжения и используются вместе с известным значением резистора для расчета тока. Теперь, когда мы знаем напряжение и ток, а также время, прошедшее с момента последнего измерения, мы можем рассчитать емкость. В конце процесса разрядки напряжение батареи сравнивается с нижним пределом, и если оно упало ниже предела, фаза разрядки прекращается, МОП-транзисторы закрываются, и измерение помечается как готовое.

Порядок определения количества используемых резисторов

В функции selectNumOfResistors выполняется простое сравнение напряжения с заданными значениями, и по результатам определяется количество используемых резисторов. Соответствующий МОП-транзистор открывается для пропуска некоторых резисторов. Слоты напряжения выбраны таким образом, чтобы максимальный ток в любой момент во время разряда был немного выше 600 мА (2 В / 3,3 Ом = 606 мА). Функция возвращает количество используемых резисторов. Поскольку вентилятор приводится в действие от той же линии, что и первый МОП-транзистор, он должен всегда открываться, когда происходит разряд.

Шаг 5: калибровка измерителя

Калибровка измерителя
Калибровка измерителя

Для калибровки глюкометра я создал другое приложение (прилагается). Он использует то же оборудование. Вначале все значения делителя коррекции установлены на 1000.

const int divCorrectionB10V = 1000; // множитель коррекции делителя в диапазоне 10V const int divCorrectionR10V = 1000; // множитель коррекции делителя в диапазоне 10V const int divCorrectionB20V = 1000; // множитель коррекции делителя в диапазоне 20V const int divCorrectionR20V = 1000; // множитель коррекции делителя в диапазоне 20В

в функции readVcc () результирующее напряжение Vcc зависит от установки значения в последней строке функции перед возвратом. Обычно в Интернете можно найти значение 1126400L, которое будет использоваться в расчетах. Я заметил, что результат неправильный.

Процесс калибровки:

  1. Загрузите приложение для измерения в Arduino.
  2. Вы можете увидеть в Arduino (и на последовательном выходе, и если вентилятор вращается), включена ли нагрузка. Если это так, поверните переключатель выбора типа батареи.
  3. Отрегулируйте значение в readuVCC (), чтобы получить правильный результат. Возьмите значение, которое дает функция (в милливольтах), и разделите на него длинное значение. Вы получите исходное значение внутренней ссылки. Теперь измерьте фактическое напряжение питания в милливольтах с помощью мультиметра и умножьте его на ранее рассчитанное значение, и вы получите новое скорректированное длинное значение. В моем случае функция вернула 5288 мВ, когда фактическое напряжение Vcc было 5,14 В. Вычисление 1126400/5288 * 5140 = 1094874, которое я точно настроил пробным путем. Поместите новое значение в код и снова загрузите его в Arduino.
  4. Регулировка значений коррекции делителя аналогового входного резистора происходит с помощью регулируемого источника питания, который используется для питания входа измерителя. Самый простой - использовать напряжения от 1 В до 20 В с шагом 1 В и записывать результаты в электронную таблицу. В таблице взято среднее значение. Скорректированные значения вычисляются по следующей формуле: «raw_value * range * Vcc / Vin», где raw_value - это значение в 10VdivB, 10VdivR, 20VdivB или 20VdivR в зависимости от того, какая поправка должна быть рассчитана.

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

Нравится

const int divCorrectionB10V = 998; // делитель коррекции делитель в диапазоне 10V const int divCorrectionR10V = 1022; // делитель коррекции делитель в диапазоне 10V const int divCorrectionB20V = 1044; // делитель коррекции делитель в диапазоне 20V const int divCorrectionR20V = 1045; // делитель корректирующий делитель в диапазоне 20В

Регулировка номинала резистора может быть выполнена путем подачи некоторого напряжения на вход (например, 2 В), переключения переключателя типа «летучая мышь» (для включения нагрузки) и измерения входящего тока и напряжения на первом резисторе и деления напряжения на ток.. Для меня 2 В дает 607 мА, что дает 2 / 0,607 = 3,2948 Ом, которые я округлил до 3,295 Ом. Итак, калибровка завершена.

Шаг 6: Последнее ПРИМЕЧАНИЕ

Одно важное замечание. Крайне важно, чтобы все соединения от батареи до резисторов были в исправном состоянии. У меня было одно плохое соединение, и я задавался вопросом, почему я получил на резисторной сетке на 0,3 В меньше вольт, чем на батарее. Это означало, что процесс измерения почти сразу завершился с использованием никель-кадмиевых ячеек 1,2 В, поскольку нижний предел 0,95 В был достигнут быстро.

Рекомендуемые: