среда, 2 июля 2014 г.

Устройство для измерения емкости аккумуляторов

В последнее приходится использовать блоки Li-ion аккумуляторов напряжением 8.4В. Поскольку такие штуки, особенно купленных в Китае, зачастую имеют емкость значительно ниже  заявленной, то появилась идея собрать из подручных средств устройство для измерения их емкости.

Требования к устройству были такие:
Обязательно
  • поддержание заданного тока разряда из диапазона 100-1000мА при напряжении на блоке 5-8.5В;
  • отключение тока разряда при напряжении на блоке ниже определенного (5-7В);
  • измерение времени разряда заданным током (фактически, емкости в А*ч).
Желательно
  • запись в файл уровня напряжения на блоке не реже 1 раз в минуту;
  • возможность разряда с фиксированной мощностью (ток*напряжение=константа);

Схема и принцип работы

И все это, естественно, должно быть достигнуто с использованием простой и дешевой схемотехники и желательно с питанием только от USB.
В качестве основы устройства выбран дешевый Arduino Pro Micro с внутренним напряжением питания 5В (бывают 3.3В). Схема устройства показана на рисунке.

Нагрузку батареи обеспечивает мощное сопротивление R2. Подойдет сопротивление в диапазоне 3-5Ом и мощностью не менее 10Вт.
Управляемый ток разряда обеспечивается ключом на мощном МДП транзисторе. Транзистор управляется сигналом с одного из выходов Arduino с широтно-импульсной модуляцией (ШИМ). Скважность ШИМ управляется программно путем записи в специальный регистр процессора числа в диапазоне x=0..255. Значение x=0 соответствует постоянно закрытому ключу, 255 - постоянно открытому, при котором ток разряда равен Iмакс=R2/(U-Uнас). Промежуточные значения x  задают средний ток разряда по формуле Iразр=Iмакс*x/255.
Подходящий полевой транзистор не сложно найти на материнской плате компьютера. Нужно посмотреть Datasheet транзистора и убедиться что он N-типа и что “Gate Threshold Voltage” не превышает 3.5В.
Для ключа также можно использовать мощный биполярный n-p-n транзистор, например КТ819Г. Ток базы транзистора автоматически ограничивается максимальным током выхода Arduino, но лучше дополнительно поставить резистор 100 Ом. Полевой транзистор предпочтительнее из-за малой мощности управления и меньшего падения напряжения на открытом транзисторе.
Транзистор работает в ключевом режиме и соответственно рассеивает незначительную мощность, так что необходимость в радиаторе отсутствует.
Конденсатор C2 сглаживает импульсы напряжения U, вызванные бросками тока при работе ШИМ.Чтобы уменьшить необходимую емкость C2, частота ШИМ в Arduino увеличена в 64 раза по сравнению со стандартной настройкой. Это сделано путем уменьшения до 1 делителя частоты внутреннего таймера timer0. Примечание: повышение частоты оказывает влияние на работу функции delay и прочих, зависящих от timer0, что нужно компенсировать умножением параметра функции delay на 64. Подходящий конденсатор также можно найти на материнских платах.
Напряжение разряда уменьшается делителем на транзисторах R3 и R4 до допустимого диапазона и измеряется на одном из входов Arduino. При первых экспериментах с прямым измерением напряжения разряда выяснилось, что поскольку Arduino измеряет напряжение относительно напряжения питания, а при питании от USB оно может заметно меняться, то результат измерения получается нестабильным. Эта проблема актуальна для Arduino с внутренним напряжением питания 5В. Arduino с внутренним напряжением 3.3В питается стабилизированным пониженным напряжением USB от внутреннего стабилизатора и проблема плавающего напряжения, скорее всего, будет не актуальна. Стабилизировать внутреннее напряжение питания для Arduino 5В можно было бы использовав отдельный стабилизированный источник питания 5В, либо не стабилизированный 6-12В (с задействованием внутреннего стабилизатора Arduino), но это удорожало бы устройство. Вместо этого используется схема измерения напряжения относительно опорного, получаемого от простейшего стабилизатора опорного напряжения на двух кремниевых диодах и резисторе. Опорное напряжение подается на второй вход Arduino и используется в программе для вычисления усредненного отношения U/Uоп. Настоящее U находится умножением усредненного значения на известное Uоп. Вместо пары диодов можно использовать стабилитрон с напряжением стабилизации меньше 4В или специализированные микросхемы-стабилизаторы.
Прилагаемая программа для Arduindo 100 раз за секунду усредненное отношение U/Uоп. Затем вычисляет U и по нему рассчитывает Iмакс. Далее для требуемого Iтреб вычисляет x=Iтреб/Iмакс*255. Если x>255, то Iтреб не может быть достигнут при данном U и R2, тогда x=255, а Iразр=Iмакс. В противном случае, Iразр=Iтреб. Значения U, Iразр, x передаются на компьютер через виртуальный COM-порт. Через этот же порт с компьютера передается установка Iтреб.

Настройка

После сборки устройства необходимо определить некоторые константы в программе. Константы следует измерять при установленной константе debug=true, которая деактивирует логику отключения тока при достижении минимального напряжения. Вместо батареи лучше использовать регулируемый источник постоянного напряжения. Измерения проводятся при открытом окне “Монитор порта” Arduino IDE, в которое будут выводиться строки со следующими значениями: измеренное напряжение, рассчитанный ток, рассчитанное значение x (см. выше. x выводится не всегда если  debug=false).
Первым делом измеряем напряжение Uоп и записываем его в константу V0. Затем выставляем V_COEF=1.0 и R=R2, загружаем программу, открываем в Arduido IDE окно “Монитор порта”. Подключаем батарею или источник питания 8В, смотрим в окне значение напряжения (первое число слева) и измеренное вольтметром напряжение U. Положим U=8.1В, а выводится 3.85, тогда V_COEF=8.1 / 3.85. Исправляем константу и проверяем, что теперь выводится правильное напряжение U.
Через окно “Монитор порта” шлем строку “5000 “ (без кавычек, но с пробелом в конце), что соответствует требуемому току 5А. Поскольку такой ток недостижим для заданного U и R2, то выводится значение x равное 255, и при этом ключ будет постоянно открыт. Замеряем напряжение Uнас. Делать это лучше быстро, поскольку в этом режиме нагрузка на R2 может превышать допустимую. Снять нагрузку можно передав “0 ”. Измеренное значение должно быть не более 0.3В (зависит от транзистора), пишем его в константу V_FALL.
Далее подключаем амперметр для измерения тока Iразр. Передаем “500 “ и смотрим показания прибора. Если показания отличаются от 0.5А более чем на несколько процентов, значит сопротивление R2 заметно отличается от номинала и нужно скорректировать константу R. Передавая в Arduino другие значения токов и желательно при разных значениях напряжения батареи, убеждаемся, что реальное значение тока не отклоняется от требуемого более чем на 3%.
Выставляем debug=false. На этом настройка закончена.

Использование

Запись измерений во времени в файл удобнее всего делать с помощью прилагаемой программы (исходный код на Delphi, использует компоненту CPort для работы с COM-портом). Программа получает строки через COM-порт, фильтрует их (отбрасывает, если напряжение изменилось менее чем на 0.05В по сравнению с предыдущим измерением), и пишет строки с указанием времени в файл discharger.txt в текущей директории. Файл можно импортировать в Excel, рассчитать измеренную емкость, построить график и т.п.

Файлы

Arduino Sketch
Delphi Sources
Delphi compiled EXE

1 комментарий:

  1. можно исключить резистор и два диода если в качестве опорника использовать внутренний путем добавления в setup строчки analogReference(INTERNAL). у Меги328 он 1.1в.

    ОтветитьУдалить