Найти тему

Танец без сабель, но на граблях

Я тут запропал на некоторое время. Но это не значит, что бездельничал. Решил я в Мониторе воздуха сделать прогресс заряда и разряда аккумулятора как во взрослых устройствах. Там давно уже не используют линейную аппроксимацию. Кривая разряда литий-полимерных аккумуляторов имеет довольно замысловатый вид:

Это еще я разряд от 4.2В не показал.
Это еще я разряд от 4.2В не показал.

Если использовать линейные зависимости, то будет как в старые добрые времена — было заряда 40%, а потом БАЦ и ноль.

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

Методика примерно такая: на реальных аккумуляторах строятся зарядно-разрадные кривые в привязке к количеству циклов (старение). А потом делается полиномиальная аппроксимация, формула с коэффициентами забивается в программу и наше устройство корректно отображает заряд.

Я решил, что надо попробовать замутиь что-то похожее в своем мониторе воздуха. Пока не уверен, что Ардуино вообще потянет такие сложности. Но попробовать то можно?

Линейный прогресс бар заряда аккумулятора мне что-то не понравился.

Он выглядит примерно так:

int charged_batvoltage = 420; //максимальное напряжение заряженного //аккумулятора умноженное на 100

int low_batvoltage = 300; //минимальное напряжение разряженного //аккумулятора умноженное на 100

int rectlength = map(((batvoltage*100), low_batvoltage, charged_batvoltage, 0, 20);

Здесь функция map() преобразует один диапазон 300-420 в другой 0-20. 0-20 — это длина прямоугольника в пикселях — то бишь наш прогресс бар.

И вот где-то здесь начался тот самый танец без сабель, но на граблях, анонсированный в заголовке статьи. Всё выглядело предельно просто: программируем вывод напряжения на консоль, ставим устройство работать на ночь, утром берем данные, строим графики и играемся с подбором полинома. Потом смотрим - влезет ли это дело в Ардуино.

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

Девайс циклически перезагружался. Расстроился. Естественно сбор логов рязрядки аккумулятора сорвался, а весь предыдущий вечер пошёл коту под хвост. Сделал все нужные для проснувшегося человека дела, сел разбираться.

Померял напряжение на входе повышающего преобразователя — 3 вольта. Включил девайс, напряжение упало до 2,2 вольт. В документации на преобразователь пишут, что работает от 2-х вольт. Ладно, думаю, китайцы. Ставлю другой. Картина та же — преобразователь пытается запустится и отключается. Возможно дело в диодной развязке. Закоротил диод, устройство запустилось. Ура! Оставил работать и ушел пить кофе. Пришёл и опять вижу циклическую перезагрузку. Здесь я понял, что на халяву отделаться не получится.

Решил проверить повышающий преобразователь. Достал из шкафа лобораторник, который я не трогал уже месяцев семь.

Подключил на вход преобразователя и выяснил следующее:

1. Преобразователь устойчиво запускается при напряжении 2.5В, а не как заявлено;

2. Девайс в таком режиме потребляет 2,7А в прыжке;

3. Преобразователь не виноват;

4. Ток в прыжке высокий.

Кто может отрубать питание? Явно китайская плата зарядки аккумулятора. Китайцы же! Эти никогда не могут выдержать заявленные характеристики. Измеряю напряжение на выходе платы. Оно падает до 2,7 вольт, но защита не выключает питание — то есть здесь всё работает. Дальше что? Дальше кнопка с полевым транзистором. Измеряю напряжение на входе кнопки — 2.9 вольт. Измеряю на выходе — 2 вольта. Вот это да. На полевике падает 0,9 вольта? Не может быть. Напряжение хоть и низкое, но не для IRLR8113. Должен работать.

Начал разбираться с кнопкой. Как часто это бывает проблема лежала на поверхности.

В кнопке есть полевик, триггер, кнопка, светодиод, LDO стабилизатор ASM1117 на 3,3 вольта. По документации напряжение питания триггера должно быть не более 6 вольт. У кнопки заявлено питание до 18 вольт. Для этого там и нужен стабилизатор.

-2

Минимальное рабочее напряжение кнопки не указано. Но теперь я знаю, что оно в зависимости от тока, где-то в районе 3,5 — 4 вольта. Собственно те 0,9 вольта падали именно на стабилизаторе. Поскольку у меня не предполагается напряжение выше 5 вольт, стабилизатор я выпаял, а вместо него запаял перемычку.

-3

Теперь устройство работает как положено.

В собирании конструкций из готовых блоков я вижу большой минус. Все эти блоки сделаны для решения универсальных задач, но не моих. Поэтому приходится все обрабатывать напильником. К обработке напильником, например, я отнесу выпаивание всех светодиодов из плат. Лишняя индикация нам ни к чему, а энергию жрать будет. А так, выпаяв 4 светодиода, увеличим время работы устройства от батареи на часок. Впрочем, про выпаивание светодиодов поговорим как ни будь в другой раз.

По традиции: больше устройств вам в ленту, хороших и разных.