avatar_Яков93

Поочередная зарядка ячеек батареи

Автор Яков93, 22 Май 2024 в 17:35

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

usavich

Цитата: Яков93 от 20 Июль 2024 в 22:07... Были у меня сомнения по поводу транзисторов, выдержат/не выдержат. Поставил в качестве ключей AO4826, по даташиту у них Vds 60 В. Но покупал у двух разных продавцов на алиэкспрессе, по внешнему виду они немножко друг от друга отличались. Но вроде похоже обошлось...
Сгоревшие транзисторы из одной партии(продавца)?
ЕздюкЪ на батарейках! Без смс бмс и регистрации. Заряжаюсь от солнца.

Яков93

Цитата: usavich от 23 Июль 2024 в 00:25Сгоревшие транзисторы из одной партии(продавца)?
Не обратил внимания. Вроде из разных.

Яков93

Цитата: sdenis2023 от 22 Июль 2024 в 21:32+

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

Нашел и уже заказал на алиэкспресее интересные транзисторы - AO4892. 2-n, Vds до 100 В, сила тока до 4А при 10 В на затворе.
20 штук обещают за 402 рубля с доставкой  :-) Может и лажа конечно, но вдруг...

sdenis2023

Цитата: Яков93 от 23 Июль 2024 в 08:56до 100 В, сила тока до 4А при 10 В на затворе.
главное чтоб сопротивление канала в открытом состоянии было адекватным  :-)
mxus3k 3витка MTX39 26"(maxxis dhf minion) + kls-7230s 80А/160А + ANT BMS 130A + lipo 10s1p 21Ah 20-25C

Яков93

Цитата: Яков93 от 22 Июль 2024 в 10:25Выявилась техническая проблема.

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

В блоке voltmetr() я вводил переменную byte bat_min (номер самой разряженной ячейки). Но не ставил ей значение по дефолту. Оно должно было присваиваться в ходе измерения всей цепочки от 1 до 13. Вроде все логично, но при реальном измерении напряжений получалось так, что иногда оно могло и не присвоиться, тогда bat_min оставался "0", и это значение "ячейка ноль" шло в модуль переключения ключей. А так как на такое значение никто не рассчитывал к ключам шли совершенно неадекватные инструкции. Как итог два сгоревших ключа 2N-can и также прилетело и на два мостовых ключа N/P-can.

Ключи 2N-can я поменял на AO4892, которые как раз из Китая пришли. Вроде работают, х.з. может и не подделка. Мостовые мосфеты тоже поменял. Скетч переписал

Скетч
int digitPins[] = {16,15,14,13,12,11,10,9,8,7,6,5,4,3};                       // указываю пины для ключей на ячейках
#define DCPower 17                                                            // пин для отключения DC-DC
#define Bridge 2                                                              // пин для переключения моста

void setup() {
  Serial.begin(9600);
  for(int i=0; i < (sizeof(digitPins) / sizeof(digitPins[0]));i++)
  {
    pinMode(digitPins, OUTPUT);                                           // декларирую пины как выходные
    digitalWrite(digitPins, LOW);                                          // устанавливаю на них изначально низкий уровень
     
  }
  pinMode(DCPower, OUTPUT);
  digitalWrite(DCPower, HIGH);
  pinMode(Bridge, OUTPUT);
  digitalWrite(Bridge, LOW);
 }

void loop() {
 
  uint32_t sec = millis() / 1000ul;                                             //полное количество секунд

if(sec % 30 == 0)
  {
    digitalWrite(DCPower, HIGH);                                                //отключаю DC-DC
    delay(300);
    number(voltmetr());
    Serial.println("");
    delay(300);
    digitalWrite(DCPower, LOW);                                                 //включаю DC-DC
  }

}

byte voltmetr()
{
  int vt_old, vt_now, v_min;
  byte bat_min = 1;
  byte h_max=13;         
 for(byte h=1; h <= h_max; h++)
{
    number(h);
    delay(50);
    vt_now = analogRead(A5);
    if(h==1) vt_old = vt_now;
    v_min = min(vt_old, vt_now);
    if(v_min==vt_now) bat_min=h;
    vt_old=v_min;
    Serial.print("ячейка № ");
    Serial.print(h);
    Serial.print(" напряжение vt_now: ");
    Serial.print(vt_now);
    Serial.print(" v_min = ");
    Serial.print(v_min);
    Serial.print(" vt_old = ");
    Serial.print(vt_old);
    Serial.print(" разряженная ячейка № ");
    Serial.println(bat_min);
 }
if(bat_min < 1 || bat_min > 13) bat_min = random(1, 13);                //защита от неправильного номера батарейки
  return bat_min;
}


void number(byte num)                                                    // подключение нужной ячейки
{
  if(num < 1 || num > 13) num = random(1, 13);                          //защита от неправильного номера батарейки
  for(int i=0; i < (sizeof(digitPins) / sizeof(digitPins[0])); i++)     // отключаю все ключи
  {
    digitalWrite(digitPins, LOW);
  }
delay(300);
if (num%2==0) digitalWrite(Bridge, LOW);                                // переключение моста в зависимости от номера ячейки
else digitalWrite(Bridge, HIGH);
delay(300);   
  for(int i=0; i<2; i++)                                                //включаю ключи на нужной ячейке
  {
    digitalWrite(digitPins[num-i], HIGH);
  }
}

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

Лог заряда
16:42:57.317 -> ячейка № 1 напряжение vt_now: 889 v_min = 889 vt_old = 889 разряженная ячейка № 1
16:42:58.033 -> ячейка № 2 напряжение vt_now: 889 v_min = 889 vt_old = 889 разряженная ячейка № 2
16:42:58.753 -> ячейка № 3 напряжение vt_now: 890 v_min = 889 vt_old = 889 разряженная ячейка № 2
16:42:59.442 -> ячейка № 4 напряжение vt_now: 890 v_min = 889 vt_old = 889 разряженная ячейка № 2
16:43:00.166 -> ячейка № 5 напряжение vt_now: 889 v_min = 889 vt_old = 889 разряженная ячейка № 5
16:43:00.883 -> ячейка № 6 напряжение vt_now: 890 v_min = 889 vt_old = 889 разряженная ячейка № 5
16:43:01.588 -> ячейка № 7 напряжение vt_now: 892 v_min = 889 vt_old = 889 разряженная ячейка № 5
16:43:02.309 -> ячейка № 8 напряжение vt_now: 892 v_min = 889 vt_old = 889 разряженная ячейка № 5
16:43:02.999 -> ячейка № 9 напряжение vt_now: 890 v_min = 889 vt_old = 889 разряженная ячейка № 5
16:43:03.720 -> ячейка № 10 напряжение vt_now: 889 v_min = 889 vt_old = 889 разряженная ячейка № 10
16:43:04.449 -> ячейка № 11 напряжение vt_now: 890 v_min = 889 vt_old = 889 разряженная ячейка № 10
16:43:05.132 -> ячейка № 12 напряжение vt_now: 891 v_min = 889 vt_old = 889 разряженная ячейка № 10
16:43:05.851 -> ячейка № 13 напряжение vt_now: 890 v_min = 889 vt_old = 889 разряженная ячейка № 10

Яков93

Хочу приделать к устройству выносной индикатор показывающий номер ячейки с которой происходит работа. Нынешние светодиоды на плате тоже наглядно все показывают, но как выносной индикатор неудобны. Если их просто распаять на отдельной выносной плате придется к ним тянуть сразу 14 проводков...
Есть мысль приладить двухразрядный индикатор
IMG_20240817_142005_1.jpg
Ищу сейчас схему его подключения и скетч для работы, т.к. в своих поделках использовал такие индикаторы всего один раз и очень давно.

sdenis2023

Цитата: Яков93 от 17 Авг. 2024 в 14:25Если их просто распаять на отдельной выносной плате придется к ним тянуть сразу 14 проводков...
:laugh:  ;-)  :kidding:
mxus3k 3витка MTX39 26"(maxxis dhf minion) + kls-7230s 80А/160А + ANT BMS 130A + lipo 10s1p 21Ah 20-25C

sdenis2023

такой не вариант? или пинов не осталось свободных?

с тм1637 все просто
а вот тм1638 не смог пока запустить...

осилил дисплей 64*128 точек - довольно много красивых шрифтов поддерживает - для самоделок самое то!
mxus3k 3витка MTX39 26"(maxxis dhf minion) + kls-7230s 80А/160А + ANT BMS 130A + lipo 10s1p 21Ah 20-25C

Яков93

Цитата: sdenis2023 от 17 Авг. 2024 в 16:28такой не вариант? или пинов не осталось свободных?
TM1637 пока не пробовал, мысль про обычный двухразрядный семисегментный индикатор с прикрученным к нему 74hc595.
Скетч работающий нашел, схему собрал и запустил, все работает на отдельной ардуине. Но требует 5 свободных пинов. А у меня осталось только три, да и то если убрать измерение тока (пока так и не придумал куда его можно применить).
Вроде если использовать не объединенный индикатор, а два одноразрядных и применить два 74hc595, то вроде должно пинов хватить.

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

sdenis2023

Цитата: Яков93 от 17 Авг. 2024 в 18:38все работает на отдельной ардуине.
а если на той основной - убрать вывод инфы в терминал и присобачить 1637?
mxus3k 3витка MTX39 26"(maxxis dhf minion) + kls-7230s 80А/160А + ANT BMS 130A + lipo 10s1p 21Ah 20-25C

Яков93

Цитата: sdenis2023 от 17 Авг. 2024 в 19:12а если на той основной - убрать вывод инфы в терминал и присобачить 1637?
У меня не нашлось 1637, зато нашлось два одноразрядных семисегментных, с двумя 74hc595 все должно работать от 3 пинов, их я найду без отключения терминала.
Я не уверен, что если я попытаюсь переключить RX или TX в моей Arduino Pro mini на что-то другое я смогу потом нормально заливать туда скетчи. Никогда такого не пробовал, необходимости не было.

Яков93

Индикаторы собрал, все работает, циферки скачут как надо, пинов хватает, да только энергопотребление не нравится. Как-то все очень много жрет, до 130-140 мА в зависимости от числа на индикаторе.
У меня сейчас мысль приспособить к этой заряжайке небольшой повербанк чтобы мобильно подзаряжать батарею если поездка длинная.
Да, процедура подзаряда будет небыстрая, зато не нужно искать розетку и сам повербанк может быть гораздо меньшегоо напряжения, чем батарея на велике. Например подзаряжать от автомобильного аккумулятора на 12 В. Или просто от нескольких 18650, соединенных последовательно.
А для такого мобильного варианта тратить 100 мА*час просто на подсветку индикатора жирновато.
Наверное я вместо индикаторов поставлю в линейку маломощные светодиоды подключенные к тем же самым 74hc595, они вполне наглядно покажут, что машинка работает и энергии гораздо меньше будут жрать.

sdenis2023

Цитата: Яков93 от 18 Авг. 2024 в 13:58Наверное я вместо индикаторов поставлю в линейку маломощные светодиоды подключенные к тем же самым 74hc595, они вполне наглядно покажут
+
на блоках Eltek такая реализация
линейка светиков - а сзади мультиплексоры
mxus3k 3витка MTX39 26"(maxxis dhf minion) + kls-7230s 80А/160А + ANT BMS 130A + lipo 10s1p 21Ah 20-25C

Яков93

Вот меня кидает... со светодиодами разобрался но по-моему и их больше не хочу  :facepalm:
А хочу я наверное все-таки экран.  :exactly:

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

Аааа держите меня....  :laugh:  :run:

Яков93

#68
Пока новая версия зарядки еще только в планах тестирую ту которая есть.
Подсоединил ее на ночь к моей батарее у которой типовой разбег между меньше и большей ячейками после окончания заряда был около 0,2 В
Утром отключил, разбег после отключения сильно порадовал - 0,008 В

Screenshot_2024-08-22-06-30-19-693_com.jiabaida.bms.jpg

Яков93

Посмотрел вчерашний разбег по ячейкам после разряда на 30% получилось 0,091 В,
Спойлер
Screenshot_2024-08-22-18-01-41-402_com.jiabaida.bms.jpg
что уже лучше чем было в самом начале, без применения поячеечной подзарядки (0,167 В)

Снова поставил на ночь на подзарядку, утром разбег 0,006 В
Screenshot_2024-08-23-04-57-36-729_com.jiabaida.bms.jpg

yurgen

нену в плане самореализации своих амбиций , тут да, красиво получилось.
Но практический смысл сильно сомнительный.
(сужу на собственном опыте а также на опыте других пользователей аккумов).
Как батку не балансируй , а отдаст она ровно столько энергии , сколько ее содержится в самой слабой ячейке .
тогда какой смысл мучить батку ловлей этих тысячных единиц вольта?
Самовар , Кваньшунь 3 кВт , келли 200А,  LG E48 3кВтЧ.
80км/ч     
> 70 000 км

Яков93

Цитата: yurgen от 23 Авг. 2024 в 08:57нену в плане самореализации своих амбиций , тут да, красиво получилось.
Но практический смысл сильно сомнительный.
(сужу на собственном опыте а также на опыте других пользователей аккумов).
Как батку не балансируй , а отдаст она ровно столько энергии , сколько ее содержится в самой слабой ячейке .
тогда какой смысл мучить батку ловлей этих тысячных единиц вольта?

Т.е. Вы в принципе сомневаетесь в пользе балансировки?
Насчет "отдаст столько энергии сколько содержится в самой слабой" слишком размытое рассуждение ПМСМ. Батарея все-таки по любому отдает гораздо больше энергии, чем содержится в самом слабом элементе. Ну если конечно этот элемент не совсем убитый и сразу после заряда при первой же нагрузке скатывается в ноль.
При разной степени живости ячеек недозаряженными всегда остаются самые сильные и емкие, которые еще могут тащить когда слабые уже почти разрядились. Вот без подзаряда самых сильных (и постоянно недозаряженных) и получается что ездим все время на самых слабых, которые от такой усиленной эксплуатации ослабляются еще сильнее. Этакая положительная обратная связь.
Ловля тысячных это конечно не самоцель, а просто индикатор здоровья всей батареи.