avatar_Overrider

Модульная универсальная БМС

Автор Overrider, 06 Апр. 2011 в 15:27

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

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

Overrider

Переделал схему с учётом предложений. Печатку развёл, но пока на макете не проверю, показывать не буду, мало ли что поменять придётся.
Пока получилась плата 14х40 для версии со всеми компонентами, включая контакты для внутрисхемного программирования и 12х30 без опциональных компонентов.
Комплектующие заказал.

TRO

На балансир стоит биполярник, а разница между базовым резистором и шунтом 2000 раз. Это гдеж транзистор с таким коэфициентом передачи по току брать? Надо бы базовый резистор конкретно уменьшать. Или может всё-же полевик? Балансиры всё равно будут работать только когда напряжение завышено, значит для полевика хватит(не всякого, но есть много подходящих).
Кстати, напряжение для балансировки не должно совпадать с напряжением для отключения зарадника ,если конечно это не выход для ограничения тока зарядника до уровня балансирного тока. Так что OC2 я бы пересадил на отдельную ногу контроллера.

ЗЫ, уже заказал 16 ATtiny13v, буду из бракованной китайской БМС собирать, но хочется схему без оптронов надумать. И раз контроллеры есть, то и экранчик туда от мобилки тоже хочется.

Wahoo 2012 29er, +собран складной двухосис на раме"Land Rover" 69er с эл. мотором, и и МОНОКОЛЕСО

Overrider

Цитата: TRO от 17 Апр. 2011 в 02:11
На балансир стоит биполярник, а разница между базовым резистором и шунтом 2000 раз. Это гдеж транзистор с таким коэфициентом передачи по току брать? Надо бы базовый резистор конкретно уменьшать. Или может всё-же полевик? Балансиры всё равно будут работать только когда напряжение завышено, значит для полевика хватит(не всякого, но есть много подходящих).
Кстати, напряжение для балансировки не должно совпадать с напряжением для отключения зарадника ,если конечно это не выход для ограничения тока зарядника до уровня балансирного тока. Так что OC2 я бы пересадил на отдельную ногу контроллера.

ЗЫ, уже заказал 16 ATtiny13v, буду из бракованной китайской БМС собирать, но хочется схему без оптронов надумать. И раз контроллеры есть, то и экранчик туда от мобилки тоже хочется.
Да, пардон, забыл поменять номинал шунта, там ток должен быть не больше ампера, в конце зарядки на этапе CV он мизерный. Проставлю номинал, после того как подберу его на макете :)
Биполярники стоят по рубь за пучок и полвольта на них падать будут весьма кстати.
На мой взгляд OC2 в случае нормальной отбалансированной батареи вообще не нужна, но может использоваться как сигнал для отключения зарядника, когда все ячейки выйдут на напряжение балансировки.
Мне тут подсказали в тематическом сообществе, что бывают и другие развязки, например ADuM1100, однако в первой версии проекта буду применять то с чем умею работать :)

TRO

Цитата: Overrider от 17 Апр. 2011 в 11:05
На мой взгляд OC2 в случае нормальной отбалансированной батареи вообще не нужна, но может использоваться как сигнал для отключения зарядника, когда все ячейки выйдут на напряжение балансировки.
...
Ну если уж отказыватся от отключения батареи по перезаряду отдельной ячейки, то балансиры не мешало бы сделать тоже немного интелектуальными, чтобы гарантировано не допустить перезаряда отдельной банки, контроллер позволяет.
Например, контролеер увидел что напряжение на банке начало стабильно ползти вверх, значит идёт зарядка. После этого выставляем напряжение балансировки на 0.2 вольта ниже полного заряда(упреждающая балансировка, ячейки начнут раньше выравниватся) и ждём пока не зарядится до максимального, и переводим напряжение балансировки тоже в максимум. Если в процессе предварительной балансировки напряжение на ячейке перестало расти, или вышло предполагаемое время предварительной балансировки, то переходим на максимальное напряжение балансировки.

Однако я бы не стал отказыватся от отключения по максимальному напряжению на ячейках, чтобы иметь возможность заряжать не очень стабильным по напряжению блоком питания(чем под руку попадёт). ИМХО навешать кучу  микроконтроллеров и ограничить функционал, это не дело. Это верно, если вы не хотите по OC1 передавать сигнал в цифре со всеми параметрами.

Цитата: Overrider от 17 Апр. 2011 в 11:05
Биполярники стоят по рубь за пучок и полвольта на них падать будут весьма кстати.
Если разница между базовым сопротивлением и шунтом будет больше коэфициента передачи тока транзистора, то бОльшая часть мощности будет падать именно на транзисторе. А если взять относительно мощные транзисторы, то шунт вообще не нужен, подбором базового резистора можно выставить ток балансировки, и пусть себе сам транзитор всё рассеивает. Если разброс передачи тока у транзисторов не большой, то подбирать базовые сопротивления индивидуально не прийдётся. (однако повторяемость пострадает, мало ли кому какие транзисторы достанутся).

Wahoo 2012 29er, +собран складной двухосис на раме"Land Rover" 69er с эл. мотором, и и МОНОКОЛЕСО

Overrider

Цитата: TRO от 17 Апр. 2011 в 12:02
Цитата: Overrider от 17 Апр. 2011 в 11:05
На мой взгляд OC2 в случае нормальной отбалансированной батареи вообще не нужна, но может использоваться как сигнал для отключения зарядника, когда все ячейки выйдут на напряжение балансировки.
...
Ну если уж отказыватся от отключения батареи по перезаряду отдельной ячейки, то балансиры не мешало бы сделать тоже немного интелектуальными, чтобы гарантировано не допустить перезаряда отдельной банки, контроллер позволяет.
Например, контролеер увидел что напряжение на банке начало стабильно ползти вверх, значит идёт зарядка. После этого выставляем напряжение балансировки на 0.2 вольта ниже полного заряда(упреждающая балансировка, ячейки начнут раньше выравниватся) и ждём пока не зарядится до максимального, и переводим напряжение балансировки тоже в максимум. Если в процессе предварительной балансировки напряжение на ячейке перестало расти, или вышло предполагаемое время предварительной балансировки, то переходим на максимальное напряжение балансировки.
Ок, запишем как мысль подумать ко второй версии :)

Цитировать
Однако я бы не стал отказыватся от отключения по максимальному напряжению на ячейках, чтобы иметь возможность заряжать не очень стабильным по напряжению блоком питания(чем под руку попадёт). ИМХО навешать кучу  микроконтроллеров и ограничить функционал, это не дело. Это верно, если вы не хотите по OC1 передавать сигнал в цифре со всеми параметрами.
Можно увеличить себестоимость на 1/12 и повесить ещё одну тиньку на контроль заряда, сделав на ней классический CC/CV.

Цитировать
Цитата: Overrider от 17 Апр. 2011 в 11:05
Биполярники стоят по рубь за пучок и полвольта на них падать будут весьма кстати.
Если разница между базовым сопротивлением и шунтом будет больше коэфициента передачи тока транзистора, то бОльшая часть мощности будет падать именно на транзисторе. А если взять относительно мощные транзисторы, то шунт вообще не нужен, подбором базового резистора можно выставить ток балансировки, и пусть себе сам транзитор всё рассеивает. Если разброс передачи тока у транзисторов не большой, то подбирать базовые сопротивления индивидуально не прийдётся. (однако повторяемость пострадает, мало ли кому какие транзисторы достанутся).
Мысль интересная. Либо ставить мощный резюк в цепь шунта, либо подстроечник в цепь базы. Что по размерам, что по цене вещи соспоставимые. Ок, поглядим на макете.

DarthGray

Подбирать резюки это пошло
У тиньки вроде как ШИМ имеется, им и регулировать ток балансировки
Различие между теорией и практикой на практике гораздо больше, чем в теории.

Overrider

Цитата: DarthGray от 19 Апр. 2011 в 10:23
Подбирать резюки это пошло
У тиньки вроде как ШИМ имеется, им и регулировать ток балансировки
Ага и вводить обратную связь по току (хотя, она опосредованно и так есть через напряжение на батарее), но боюсь что ШИМ тут не покатит, транзюк на мощной ячейке вылетит с первым же импульсом, пусть он и будет очень коротким.
Можно попробовать решить вопрос конденсатором между базой и землёй, и тут мы подходим вплотную к адаптивному механизму шунтирования и следующей версии :)

DarthGray

Я же не предлагаю ячейку коротить
Имелось ввиду использование ШИМа вместо подбора резюков
Резюк в базе остаётся, а ток подбирается не им, а временем включения
Различие между теорией и практикой на практике гораздо больше, чем в теории.

Overrider

Итак, коллеги, комплектуха закуплена, программатор собран и работает. Теперь нужна помощь тех кто умеет писать программы для AVR.  :help:
Ниже формально описан алгоритм того, как должна работать версия 1.0.
Если это не достаточно информативно/наглядно то чуть позже нарисую блок-схему (нету сейчас под рукой инструментов, а то бы сразу же её и рисовал) :bu:.
Константы:
// для Li-Ion и Li-Po
V_bal1 = 4.0 // напряжение балансировки
V_off1 = 2.9 // Напряжение отключения по переразряду
V_on1 = 3.2 // Напряжение включения нагрузки после отключения по переразряду

// Для LiFePO4
V_bal2 = 3.4 // напряжение балансировки
V_off2 = 2.5 // Напряжение отключения по переразряду
V_on2 = 2.8 // Напряжение включения нагрузки после отключения по переразряду

V_ref = 1.8 // Напряжение внутреннего ИОН
R_rat = 2.5 // Коэффициент делителя на R4 (2.5:1)
P = 10000 // периодичность проверки (милисекунд)


переменные:
V_bal // напряжения
V_off // для выбранной химии
V_on // нормализованные к 1023

ADC_val // переменная для хранения значения АЦП

Алгоритм

0. Инициализация
0.1 Декларирование констант // описаны в начале

0.2 установка пинов // назначение портов I/O

0.2.1 PCINT3 (pin 2) - digital out // балансировочный транзистор
0.2.2 ADC2 (pin 3) - analog input // аналоговый вход
0.2.3 PCINT0 (pin 5) - digital out // сигнальный светодиод
0.2.4 PCINT1 (pin 6) - digital out // оптрон управления нагрузкой
0.2.5 PCINT2 (pin 7) - digital in, pullup resistor to 5v // пин для перемычки

0.3 установить внутренний ИОН как reference для ADC // ADC будет измерять напряжение на делителе
// относительно внутреннего ИОН на 1.8В

0.4 считать соcтояние PCINT2 // проверим, замкнута ли перемычка?
0.4.1 если PCINT2 = true // если незамкнута
0.4.1.1 V_bal = V_bal2 * 1023 / (V_ref * R_rat) // присвоение переменным
0.4.1.2 V_off = V_off2 * 1023 / (V_ref * R_rat) // нормализованных к 1023
0.4.1.3 V_on = V_on2 * 1023 / (V_ref * R_rat) // напряжений для химии LiFePo4

0.4.2 иначе // если замкнута
0.4.2.1 V_bal = V_bal1 * 1023 / (V_ref * R_rat) // присвоение переменным
0.4.2.2 V_off = V_off1 * 1023 / (V_ref * R_rat) // нормализованных к 1023
0.4.2.3 V_on = V_on1 * 1023 / (V_ref * R_rat) // напряжений для химии Li-Ion и Li-Po

1. Цикл // Поехали

1.1 считать ADC2 в ADC_val // измерение напряжения

1.2 если ADC_val > V_bal // Если напряжение выше уровня балансировки
1.2.1 PCINT3 = 1 // Включить шунт
1.2.2 PCINT1 = 0 // выключить нагрузку/зарядку

1.3 иначе // если напряжение ниже уровня балансировки
1.3.1 PCINT3 = 0 // отключить шунт
1.3.2 если ADC_val <= V_off // проверить ячейку на разряд, если ниже уровня отключения
1.3.2.1 PCINT1 = 0 // отключить нагрузку
1.3.3 если ADC_val >= V_on // проверить ячейку на разряд, если выше уровня включения
1.3.3.1 PCINT1 = 1 // включить нагрузку

1.5 UART // опционально продудеть UART'ом ADC_val через PCINT0

1.6 Подождать P секунд // задержка перед следующим измерением

1.7 конец цикла // зацикливаемся

Добавил фичу с отключением нагрузки, если идёт балансировка. Ибо нефиг ездить на неотбалансированной батарее.
Задержка перед повторным измерением в 10 секунд нужна при балансировке, что бы транзистор не моргал с частотой процессора при просаживании напряжения при включении шунта %)
Фичу с UARTом добавляйте пожалуйста только, если это добавление не займёт много времени/ресурсов.
Вполне вероятно, что в этом алгоритме я что-то забыл/накосячил, посему, замечания приветствуются.

PS Если б я знал, что программатор это так просто, сколько бы интересных устройств уже мог бы собрать...  :ak:
PPS Вот его фото и скриншот из UniProf который общается через него с Тини13

i

Обычно я сначала делаю схему и предусматриваю в ней возможность внутрисхемного программирования. Потом сажусь и пишу прогу. Начинаю с простейшего, типа поморгать светодиодом. Что-то сразу не заработает - ищу причину в схеме или программе. Постепенно шаг за шагом, программа обрастает функционалом. Каждый следующий шаг, опирается на предыдущий, уже отработанный. Если творится что-то непонятное , использую симулятор, что бы пройти программу (кусочек) по шагам. Потом, как правило внезапно, оказывается, что писать уже нечего, всё работает, а программа совсем не похожа на ту, что представлялась в начале.

Overrider

Ну чтож, ажиотажа не видно, ну и ладно. Начитался даташитов и умных людей, буду сам програмить на АСМе.
Схему переработал с учётом полученных знаний:

Отказался от переключения химии перемычкой, перепрограмить проще. За отключение по переразряду теперь отвечает внутренний Brown-out Detector, на тини13 его можно настроить на 2,7. Вместе с диодом шоттки получается 3 вольта - порог отключения для Li-Ion/LiPo. Если убрать диод, будет 2,7 - порог для LiFePo4. Стабилитрон VD1 делает из АЦП вольтметр с растянутой шкалой, на внутреннем ИОНе получается диапазон 3-4,1в вполне достаточно для любого лития. Шунтирование транзистором без резистора-шунта, ШИМом с обратной связью по напряжению (программно) (идея [b-b]TRO[/b-b] и [b-b]DarthGray[/b-b]).
PS Если липольки придут раньше чем разберусь с программизом, сделаю на tl431.

DarthGray

Цитата: Overrider от 14 Май 2011 в 20:26
Ну чтож, ажиотажа не видно, ну и ладно. Начитался даташитов и умных людей, буду сам програмить на АСМе.
Схему переработал с учётом полученных знаний...

И это правильно!
Тема безусловно интересная и актуальная
Сам поначалу собирался делать почти тоже самое, но с АВРами дела раньше не имел, а изучать седьмой АСМ как то лениво стало...
А VD2 той концой вставлен? Это же не стабилитрон
Для LiFePo4 2,7 считаю многовато, к тому же если убрать диод, то цепь контроля будет жрать целый милиампер, что не есть гуд
Я бы всё таки сделал наоборот, мерить напряжение на внутреннем ИОНе, а за опору брать питание (вроде и i также предлагал). Какая разница что относительно чего мерить?
Плюсы - отсутствие делителей -> лишнего потребления -> лишних деталей (выкидывается VD1, VD2, R1 и С1)
Минус - довольно грубая дискретность установки порога (считаю не принципиально)
Различие между теорией и практикой на практике гораздо больше, чем в теории.

Overrider

Цитата: DarthGray от 14 Май 2011 в 21:25
Цитата: Overrider от 14 Май 2011 в 20:26
Ну чтож, ажиотажа не видно, ну и ладно. Начитался даташитов и умных людей, буду сам програмить на АСМе.
Схему переработал с учётом полученных знаний...

И это правильно!
Тема безусловно интересная и актуальная
Сам поначалу собирался делать почти тоже самое, но с АВРами дела раньше не имел, а изучать седьмой АСМ как то лениво стало...
А VD2 той концой вставлен? Это же не стабилитрон
Седьмой это по счёту? :)
Стабилитрон кажись да, промахнулся. сложные у меня с ними отношения...
Цитировать
Для LiFePo4 2,7 считаю многовато, к тому же если убрать диод, то цепь контроля будет жрать целый милиампер, что не есть гуд
Кажется что много, но на самом деле сколько оно будет съедать от 10 амперной батареи в процентном соотношении?
Кстати идея, подтягивать R1 к земле свободной ногой контроллера, тогда в режиме BOD схема вообще ничего жрать не будет.
А если подтягивать только на время измерения то и потребление в режиме контроля будет мизерным.
Цитировать
Я бы всё таки сделал наоборот, мерить напряжение на внутреннем ИОНе, а за опору брать питание (вроде и i также предлагал). Какая разница что относительно чего мерить?
Нет, мысль-то прекрасная, но 13-я тинька так не умеет  :bl:
А их уже 14 штук закуплено... :al:
Цитировать
Плюсы - отсутствие делителей -> лишнего потребления -> лишних деталей (выкидывается VD1, VD2, R1 и С1)
Минус - довольно грубая дискретность установки порога (считаю не принципиально)
Плюсы очевидны, а вот дискретность это смотря на каком пороге, на разряде на последнем проценте напряжение валится колом, там +-0,2 вольта большой роли не сыграют, а вот на балансировке может быть и принципиально...
Баланс с верхним порогом зарядки (выше напруга - меньше циклов, ниже напруга - меньше ёмкость) штука тонкая...

DarthGray

Цитата: Overrider от 14 Май 2011 в 21:52
Седьмой это по счёту? :)

Ага, именно так... :be:

Цитата: Overrider от 14 Май 2011 в 21:52
Нет, мысль-то прекрасная, но 13-я тинька так не умеет  :bl:
А их уже 14 штук закуплено... :al:

А я тогда на какой хотел делать? :bw: На 12-ой что ли...
Ну не знаю я их :ah:
Различие между теорией и практикой на практике гораздо больше, чем в теории.

Overrider

Цитата: DarthGray от 14 Май 2011 в 22:34
Цитата: Overrider от 14 Май 2011 в 21:52
Седьмой это по счёту? :)

Ага, именно так... :be:
Да, меня в своё время прибило что ассемблер свой у каждого процессора свой., а столько было уже достигнуто в ассемблере БК0010...  :be:
Цитировать
А я тогда на какой хотел делать? :bw: На 12-ой что ли...
Ну не знаю я их :ah:
у 12-й вообще ADC нет.
[b-b]i[/b-b] про 26-ю упоминал

Overrider

Цитата: DarthGray от 14 Май 2011 в 21:25
Минус - довольно грубая дискретность установки порога (считаю не принципиально)
Специально посчитал дискретность :)
АЦП взят за 8-ми разрядный, потому как в двух младших разрядах всегда мусор.
Как мне кажется, не очень радужная картина с верхними порогами, учитывая тот факт, что обратная связь в принципе допускает точность +-1 разряд   

Порог (в)
|
Дискретность (в/разряд АЦП)
|
Разгул напряжения при +-1разряд
   4,2   
|
   0,0164   
|
   4,184 - 4,216
   4   
|
   0,0156   
|
   3,984 - 4,016
   3,6   
|
   0,0141   
|
   3,586 - 3,614
   3,4   
|
   0,0133   
|
   3,387 - 3,413
   3   
|
   0,0117   
|
   2,988 - 3,012
   2,5   
|
   0,0098   
|
   2,490 - 2,510
   1,1   
|
   0,0043   
|
   1,096 - 1,104


asdfg

Цитата: Overrider от 14 Май 2011 в 20:26
Ну чтож, ажиотажа не видно
-
Это совсем не значит , что тема не интересна.Я например слежу за развитием проекта.Возможно буду клиентом.
Киев – мать городов русских.

DarthGray

Цитата: Overrider от 15 Май 2011 в 01:31

Цитировать
А я тогда на какой хотел делать? :bw: На 12-ой что ли...
у 12-й вообще ADC нет.
[b-b]i[/b-b] про 26-ю упоминал

Точно, всё перепутал (глянул свои наброски)
Я собирался делать на PIC10F222, он вобще в 6-ти лапом корпусе и его АЦП так позволяет
К тому же с PICами я одно время работал, их АСМ просто освежить надо

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

Да, и с Vcc на землю ёмкость поставить надо, просто так через диод не хорошо включать
Различие между теорией и практикой на практике гораздо больше, чем в теории.