Easyelectronics.ru

Электроника для всех
Текущее время: 25 авг 2019, 18:44

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 30 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Алгоритм индикации "емкости" аккумулятора
СообщениеДобавлено: 04 июн 2019, 11:40 
Старожил
Аватара пользователя

Зарегистрирован: 13 дек 2010, 23:15
Сообщения: 2013
Откуда: Киев
Всем привет. Тема наверное звучит слишком обще поэтому постараюсь пояснить ниже.
Дано:
Есть МК + Дисплей+ Li-ion + датчик (MH-z19b).

Я хочу выводить "значение емкости" аккумулятора на дисплей в виде классической пиктограммы батарейки и 3х кубиков. Так-как реальное значение емкости меня не особо интересует, то мне в принципе достаточно и попугаев в виде несложного алгоритма:
Код:
if (voltage >3.8)
indicator_value =3;
else if ((voltage<=3.8)&&(voltage>3.6)
indicator_value =2;
else if ((voltage<=3.6)&&(voltage>3.4)
indicator_value =1;
else
indicator_value =0;

Напряжение береться с батареи с помощью АЦП контроллера где-то раз в 0.5 сек. Но есть одна проблема, этот датчик (MH-z19b) очень жручий. Точнее после запуска в нем загорается примерно раз в 10 сек лампочка где-то на 0.5 сек и при этом он потребляет около 300мА.
Из-за этого напряжение на батарейке естественно проседает, где-то на 0.2-0.25 В. Ну и если юзать алгоритм выше, то на дисплее видно как значок аккума мигает этими кубиками.
Попробовал медианную фильтрацию, но из-за того что датчик сам решает когда и как ему зажигать лампочку, перемигивание на 1 позицию все равно осталось.
Попробовал добавить среднее арифметическое на 10 значений, стало лучше теперь колебания не больше 0,05 вольт. Но все равно это не решает проблему осцилляций вблизи граничных значений.
Понимаю что надо некий гистерезис добавить, но прежде чем изобретать велосипед, решил спросить может кто-то знает как реализовать не применяя замороченного ЦОС. А то в гугле ничего толкового не нашел.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм индикации "емкости" аккумулятора
СообщениеДобавлено: 04 июн 2019, 11:49 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 21 ноя 2011, 18:51
Сообщения: 199
Откуда: Тула
Это все фуфел.
Лично я ввел функцию калибровки, т.е. заряжаем АКБ на 100%, отключаем от зарядки, включаем все-все потребители чтобы АКБ разрядился за 12-24ч, ждем пока разрядится до нужного напряжения. А тем временем МК составляет табличку время-напряжениие. Все.
Имея такую табличку можно легко провести обратную мат. операцию по вычислению процента АКБ от напряжения. Охрененно точная методика, и сама адаптируется к конкретному АКБ.

Если напруга так проседает от датчика - акб фуфел, в топку!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм индикации "емкости" аккумулятора
СообщениеДобавлено: 04 июн 2019, 12:17 
Здравствуйте!

Зарегистрирован: 29 май 2019, 12:26
Сообщения: 4
Может, хранить и индицировать не фактическое значение, а минимальное увиденное с момента зарядки?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм индикации "емкости" аккумулятора
СообщениеДобавлено: 04 июн 2019, 12:45 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2139
Цитата:
Если напруга так проседает от датчика - акб фуфел, в топку!

Смотря какой ёмкости АКБ.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм индикации "емкости" аккумулятора
СообщениеДобавлено: 04 июн 2019, 12:48 
Старожил
Аватара пользователя

Зарегистрирован: 13 дек 2010, 23:15
Сообщения: 2013
Откуда: Киев
shodan писал(а):
Если напруга так проседает от датчика - акб фуфел, в топку!

АКБ, вроде как от телефона, конечно китайская подделка, но другой у меня нет. Более того в датчике похоже реально лампа накаливания, которая как известно жрет значительный ток при старте, так что ничего удивительно в проседании напряжения акб я не вижу.
А за алгоритм спасибо, постараюсь применить там где реально нужно знать сколько емкости еще осталось.
Тут же мне фактически нужен индикатор типа "остался один кубик, пора заряжать", то есть в пределе мне бы и
простой надписи battery low хватило, и одного порога, но хочется не много красоты. A так 95% времени я буду питать девайс от сети, а батарейка тут типа полезная опция.
mivlad писал(а):
Может, хранить и индицировать не фактическое значение, а минимальное увиденное с момента зарядки?

Мысль хорошая, но когда на батарее 3.81 вольт ~100%, из-за дропа напряжения на 0.25 В легко можно попасть в 3.56 и индикатор букет показывать что заряда мало, а на самом деле он может еще работать и работать.
Так что нужен фильтр.
UPD
shodan забыл спросить, а как быть в вашем алгоритме с постепенной деградацией емкости?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм индикации "емкости" аккумулятора
СообщениеДобавлено: 04 июн 2019, 12:55 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 21 ноя 2011, 18:51
Сообщения: 199
Откуда: Тула
Signaller писал(а):
shodan забыл спросить, а как быть в вашем алгоритме с постепенной деградацией емкости?

Никак - только рекалибровка. Тоесть зарядка снова на 100%, пара кликов в сервисном меню прибора, и через сутки можно спокойно заряжать и продолжать использование, и снова все точно как в аптеке.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм индикации "емкости" аккумулятора
СообщениеДобавлено: 04 июн 2019, 15:01 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 3538
Так выпаяйте ту лампочку, если проблема в ней. Китайцы вечно не умеют считать резисторы для саетодиодов.
Ну и да, подобрать аккум под потребление.
АА, пардон, это датчик СО2 оказывается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм индикации "емкости" аккумулятора
СообщениеДобавлено: 04 июн 2019, 15:14 
Старожил
Аватара пользователя

Зарегистрирован: 13 дек 2010, 23:15
Сообщения: 2013
Откуда: Киев
Вообщем пока у меня родилась такая идея (псевдокод):
Код:
void setBatteryLevel()
{
static float current_level=3;
float voltage= avgADC(); //возвращает среднее за 10 последних отсчетов
if (voltage >3.8)
indicator_value =3;
else if ((voltage<=3.8)&&(voltage>3.6)
indicator_value =2;
else if ((voltage<=3.6)&&(voltage>3.4)
indicator_value =1;
else
indicator_value =0;

if ((indicator_value <current_level)&&!charging)
current_level=indicator_value;
else if (charging) // проверяем что подключена зарядка
current_level=3;

drawBatteryLevel(current_level);


}


Таким образом, если функция усреднения даст мне макс отклонение не более 0,05-0.1 V, то индикатор не будет прыгать момент перехода. Спасибо mivlad натолкнули на идею.
Костыль конечно, да и потестить надо, но попробую добавить.


Последний раз редактировалось Signaller 04 июн 2019, 15:29, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм индикации "емкости" аккумулятора
СообщениеДобавлено: 04 июн 2019, 15:26 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 6026
Signaller, только не забывайте фильтровать "Vbat" перед выводом.
И еще, напряжение надо измерять в момент простоя, или, если нельзя, брать максимальное из считанного (а потом усреднять).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм индикации "емкости" аккумулятора
СообщениеДобавлено: 04 июн 2019, 15:35 
Старожил
Аватара пользователя

Зарегистрирован: 13 дек 2010, 23:15
Сообщения: 2013
Откуда: Киев
u37,
Так уже беру среднее по 10 отсчетам через 0.5 сек. Но оно все равно прыгает типа 3,89, 3,91, 3,93,3,90.
Опора у меня с того же LDO что и сам МК питается, так что я даже не надеюсь получить идеальные значения.
И момент простоя сложно, датчик умеет мерят CO2 и отдавать значения, когда и по какому алгоритму он зажигает эту свою лампу неизвестно. Примерно раз в 10 сек, но оно явно плывет.
Можно конечно, прилепить логику, которая будет проверять когда он не работает, но это все равно не отменяет дрейф показаний из-за неидеальности цепи измерения, помех от step-up и переменного характера прочей нагрузки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм индикации "емкости" аккумулятора
СообщениеДобавлено: 04 июн 2019, 15:39 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 6026
Значит брать 3.93


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм индикации "емкости" аккумулятора
СообщениеДобавлено: 04 июн 2019, 15:52 
Старожил

Зарегистрирован: 21 мар 2016, 01:19
Сообщения: 410
Может так:
Берем 10 штук отсчетов, отбросим экстремумы (или только минимумы - поскольку просадка), остальное - усреднить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм индикации "емкости" аккумулятора
СообщениеДобавлено: 04 июн 2019, 16:24 
Старожил
Аватара пользователя

Зарегистрирован: 13 дек 2010, 23:15
Сообщения: 2013
Откуда: Киев
Хех, как знать где начинается просадка, а где просто дрейф?


Последний раз редактировалось Signaller 04 июн 2019, 16:37, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм индикации "емкости" аккумулятора
СообщениеДобавлено: 04 июн 2019, 16:26 
Старожил
Аватара пользователя

Зарегистрирован: 13 дек 2010, 23:15
Сообщения: 2013
Откуда: Киев
u37 писал(а):
Значит брать 3.93

Ну это стратегия брать всегда макс, так тоже не сработает. Потому что в серии последовательных усреденений может быть 3.93, 3.95, 3.89 - это всего 15 сек.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм индикации "емкости" аккумулятора
СообщениеДобавлено: 04 июн 2019, 16:46 
Старожил

Зарегистрирован: 21 мар 2016, 01:19
Сообщения: 410
Signaller писал(а):
Хех, как знать где начинается просадка, а где просто дрейф?

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм индикации "емкости" аккумулятора
СообщениеДобавлено: 04 июн 2019, 17:12 
Старожил
Аватара пользователя

Зарегистрирован: 13 дек 2010, 23:15
Сообщения: 2013
Откуда: Киев
Вообщем доберусь до дома, добавлю вывод значений в ком порт, посмотрю что оно там реально измеряет.
Оттуда и буду думать как их чистить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм индикации "емкости" аккумулятора
СообщениеДобавлено: 04 июн 2019, 17:36 
Старожил

Зарегистрирован: 02 май 2015, 16:16
Сообщения: 1993
от эхсперта поступило мудрое предложение выпаять лампочку ?
Изображение

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм индикации "емкости" аккумулятора
СообщениеДобавлено: 04 июн 2019, 18:08 
Старожил

Зарегистрирован: 21 мар 2016, 01:19
Сообщения: 410
Прогнозирование в качестве цели не ставилось.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм индикации "емкости" аккумулятора
СообщениеДобавлено: 04 июн 2019, 18:21 
Заглядывает иногда

Зарегистрирован: 28 сен 2018, 00:25
Сообщения: 127
ЯП эти выбросы потребления просто не использовал для индикации. Точнее использовал, но только для минимального порога.
Т.е. если напряжение резко и сильно просело - значит включилась ламочка и просто игнорируем. Кроме одного случая - напряжение просело ниже 3,0В и пора заряжаться.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм индикации "емкости" аккумулятора
СообщениеДобавлено: 04 июн 2019, 18:31 
Старожил
Аватара пользователя

Зарегистрирован: 13 дек 2010, 23:15
Сообщения: 2013
Откуда: Киев
Я так пробовал в метеостанции, выходит примерно так: "ой ну пол часа ещё есть", а реально хопа и девайс уже отрубился.


Последний раз редактировалось Signaller 05 июн 2019, 00:22, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм индикации "емкости" аккумулятора
СообщениеДобавлено: 04 июн 2019, 19:05 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2139
Ну тогда берите минимум, во время работы "лампочки" и его и показывайте, не морочайте голову. Если у вас датчик сам включается - толку? Ну будет еще заряд, а тут датчик включится - питание просядет и всё вырубится или акк в защиту уйдет, если она есть.
Цитата:
Мысль хорошая, но когда на батарее 3.81 вольт ~100%, из-за дропа напряжения на 0.25 В легко можно попасть в 3.56 и индикатор букет показывать что заряда мало, а на самом деле он может еще работать и работать.

Что у вас за батарея такая, что 3.81В - 100%, а 3.56В уже "мало"? Li-Ion от 4.2 до 2.5В работает. Защита обычно вроде на 3В вырубает.

Ну или в конце-концов купите за пару долларов нормальный акк уже.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм индикации "емкости" аккумулятора
СообщениеДобавлено: 04 июн 2019, 19:57 
Старожил
Аватара пользователя

Зарегистрирован: 13 дек 2010, 23:15
Сообщения: 2013
Откуда: Киев
NStorm писал(а):
Цитата:
Мысль хорошая, но когда на батарее 3.81 вольт ~100%, из-за дропа напряжения на 0.25 В легко можно попасть в 3.56 и индикатор букет показывать что заряда мало, а на самом деле он может еще работать и работать.

Что у вас за батарея такая, что 3.81В - 100%, а 3.56В уже "мало"? Li-Ion от 4.2 до 2.5В работает. Защита обычно вроде на 3В вырубает.

Ну или в конце-концов купите за пару долларов нормальный акк уже.

При 3,81 не 100 % гляньте мой "алгоритм" выше, более того на разных участках разряда, понижение напряжения разное. Я то же думал, что он не должен так проседать, но факт остается фактом.
У меня есть банка купленная под шурик, возможно она будет просаживаться меньше (протестирую если найду). Кстати у меня есть еще отдельно шурик с li-ion акб. И там китайцы тоже не заморачивались, так что под нагрузкой и без он тоже показывает разное кол-во попугаев. Но если на дисплее будут постоянно мигать сигменты иконки это не красиво.
Но с другой стороны, какая разница на сколько он проседает, задача вообщем то алгоритмическая - показать тренд некой колеблющейся величины, причем не конкретное ее значение, а прохождение порогов.

P.S. В процессе гугления нашел как надо делать профессионально:
https://www.compel.ru/lib/ne/2016/11/7-tochnoe-opredelenie-urovnya-zaryada-algoritm-modelgauge вдруг кому пригодиться.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм индикации "емкости" аккумулятора
СообщениеДобавлено: 04 июн 2019, 20:25 
Старожил

Зарегистрирован: 21 мар 2016, 01:19
Сообщения: 410
Ключница статью писала? То бишь, менеджер по продажам. Не иначе.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм индикации "емкости" аккумулятора
СообщениеДобавлено: 05 июн 2019, 00:02 
Старожил
Аватара пользователя

Зарегистрирован: 13 дек 2010, 23:15
Сообщения: 2013
Откуда: Киев
Вообщем решил я еще раз все перепроверить.
Первым делом решил узнать, а действительно ли напряжение на АКБ так сильно проседает, или это глюки АЦП/Опоры, мультиметра.
Show "Скрин осцилла"

Из скрина увидел что глюков нет, напряжение на АКБ действительно сильно падает в момент включения датчика, минимум на 200 мВ, ток при этом под 300мА.
Вторым пунктом дописал пару строк кода, и вывел UART значение с АЦП и с усреднением:
Show "График значений"

Как видно из графика, даже если убрать выбросы, и усреднять только более менее правильные данные, то из-за других помех график все равно будет колебаться в пределах 50мВ что для такого простого алгоритма приведет хоть и не к частым но подмигиваниям значка батареи.
Вообщем пока накодил, как написал в своем комментарии выше:
Цитата:
Вообщем пока у меня родилась....

Посмотрю че выйдет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм индикации "емкости" аккумулятора
СообщениеДобавлено: 05 июн 2019, 00:47 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2139
Battery Gas Gauge / Coulomb Counter, типа LTC4150 считают еще ток через шунт.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 30 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB