avatar_clawham

Разработка народной BMS на BQ77PL900

Автор clawham, 04 Март 2014 в 00:36

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

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

i

Ага, вот 1-wire  и послужил прототипом i-wire. У него физический уровень подходящий.

jeen1s

В схеме версии 1.4-1.7 выводы BQ 20-21 перемычка,
в версии 1.8  резистор R58 1k на п.п. отсутствует, а в схеме есть. Его назначение?

clawham

R58 - попытка скомпенсировать падение на земляной шине. оказалось совсем не нужным. можно напрямую на землю подключать.
1)8FUN SWXK 250w24V@17A48V 13S4P LGD1, China kontr
3)MXUS 3000 @90A80V LiFePo 20Ah 25S, Nucular 12F
Telegram @clawham

jeen1s

Не нахожу расшифровку блинков LUMILED SmartBMS v1.8

JT

#652
smd 1206
Цвет на вкус.

clawham

Новости проекта :) в ближайшее время плотно займуксь переписыванием и чисткой прошивки :) приведу в порядок. ну а пока - выкладываю проверенный вариант платы умощнения баланса до 4 ампер :)




Разьем входной - mini-fit как в питании ATX блоков от компьютера. на 10 ампер. надежные контакты толстые провода можно зажать :) готовлюсь к автомобильному лиферу 200 ач :)

Собственно печатка схема и т.д. - в папке релиз-Умощнитель баланса- V3
1)8FUN SWXK 250w24V@17A48V 13S4P LGD1, China kontr
3)MXUS 3000 @90A80V LiFePo 20Ah 25S, Nucular 12F
Telegram @clawham

mr.Dream

 O_O O_O
4*3,6=14,4Вт на резистор, а по факту при 3,6В даже 17Вт)
140Вт с платы.
Чупасос нужно пристроить ) это все будет адски греться, может даже до температуры плавления припоя.
как на счет прилепления резисторов через термоинтерфейс на радиатор с обдувом? Всяко лучше пассивного излучения/конвекции. Да и резисторы вплотную, "работать"  будут только 1/4 граней.

acyd

[user]mr.Dream[/user],  там алгоритм балансировки хитрый,  каналы не тупо замыкаются на резистор как у других бмс, а через два канала "моргают" попеременно периодами.
Если стравливать со всех каналов одновременно и посмотреть на светодиоды - будет картина бегущие огни.
да и на радиатор легко прилепить, все резисторы в одной плоскости.

clawham

Конечно же так не будет :)
Вопервых я выключаю балансир при измерении напруг поячеечных. потому даже если одну ячейку програмно заставить постоянно баланситься - ШИМ будет в районе 75%.

При просадке только одной банки - тоесть когда балансить надо всю батку кроме одной-2х ячеек - шим ещё делится на 3. итого максимум 25% тоесть RMS ток через резюк один ампер или 3.6 ватта тоесть 36 ватт с платы....мелочь но радиатор будет и вентилятор конечно же тоже - бмска выдает шим на вентилятор в зависимости от кол-ва балансируемых ячеек.

Кроме того у меня есть такое понятие как предбалансировка - тоесть балансир включается в работу не только когда батка перелетает за 3.6 вольт а и на промежуточных этапах когда уже одна банка (имеющая минимальный саморазряд) уже зарядилась а соседи - нет. Эта банка очень стремительно улетает вверх. так работает лифер. вот её и будет балансить бмс.

у меня ж с бмски есть связь к заряднику - как только одна из банок ушла за 3.55 - ток зарядки падает до 1 ампера :) собственно на то и расчет чтоб зарядка была немного слабее балансира. чтоб небыло вылетов и аварийных выключений зарядки вконце.
С ионками такого конечно же нет - там все линейно +-
1)8FUN SWXK 250w24V@17A48V 13S4P LGD1, China kontr
3)MXUS 3000 @90A80V LiFePo 20Ah 25S, Nucular 12F
Telegram @clawham

clawham

#657
Всем неравнодушным привет!
Грандиозное обновление накатило нас - владельцев моей бмски :)

https://www.dropbox.com/sh/ao32jl2kb0c6ysy/AAAy8H9LOWwnPrJti_NPHiKda?dl=0

по этой ссылке можно скачать прошивку под любую плату. в ранных версиях платы надо отпаять лишние резисторы между процем и бкюшкой. Истаются только резисторы на i2c шине и на измерителях. тоесть все что касается ног EEPROM(24), CNF0(33), CNF1(34), CNF2(35), XALERT(25) нужно выпаять. хотя и с ними оно вроде как работает но во избежание :)

Дальше. Уточняем распиновку проца для тех у кого свои кастомные платы или старые платы с надстройками:
I2C: SDA PORTD.7(11),  SCL PORTD.6(10) / так и осталось
UART: RX PORTD.0(30) TX PORTD.1(31) / так и осталось
ChargeEn:  PORTC.3(26)
DischargeEn: PORTC.2(25)
1Wire: PORTB.5(17) - на плате подписан как SCK - присутствует на колодке программирования! Необходим внешний резистор на + питания.
1wPWR: PORTB.4(16) - питание для датчика 1wire. также присутствует на колодке программирования как MISO
SpeedLoIn: PORTB.3(15) - вход для низкочастотного датчика скорости(геркон в колесе) способен переварить до 50 герц. Также есть на колодке программирования MOSI
SpeedHiIn: PORTD.4(2) - на многих платах запаралелен с предыдущим но надо проверить. этот вход способен переварить до 100 килогерц входной частоты. Туда заводить сигнал с одного из холлов. Также на некоторых платах подтянут на + питания 1 килоомным резюком.
CoolerOut: PORTB.2(14) - тут появляется + питания в случае если на любой из связанных плат балансируется больше двух ячеек одновременно.
CoolerPWM: PORTB.2(13) - ШИМ сигнал с частотой 1 килогерц и заполнением от 20-ти до 100% в зависимости от кол-ва балансируемых ячеек на любой из плат. становится 100% если больше половину всех ячеек балансируются. Имеет сглаживание и перед включением на 20% дается на секунду полный гах - сдуть пыль и раскрутить крыльчатку.
PwrOn: PORTD.2(32) - на выводе появляется 1-ца при включении и удерживается пока батарея не высадится в полный ноль. Появление нуля на этом выводе обестачивает бкюшку и атмегу для нулевого потребления!
Led: PORTC.1(24) - выход на светодиодик статуса.


Значиться так! из особых изменений - сильно переделанное меню. просто для удобства. принципы работы те же самые.
добил полностью работу спидометрового входа. в меню системных констант 13) SpeedoType задает тип спидометра: 1 - это низкочастотный, а 2 - это высокочастотный. Низкочастотный считает время в миллисекундах между импульсами через прерывания а высокочастотный работает на таймере аппаратном и считается кол-во импульсов за 1 секунду. Дальше получившаяся точная частота на любом из этих входов умножается на коэффициент 15) Speedo_M_H_Hz - В него надо прямо внести сколько ваш мопед будет ехать МЕТРОВ В ЧАС при частоте 1 герц на входе спидометра. Пример для нч входа: 26" колесо 2 метра длина окружности, значит при 1 герце мы проедем за час 2метра * 3600 секунд в часе = 7200 метров в час. вот 7200 и надо внести в этот коэффициент. для вч все аналогично только цифры будут меньше. Одометр работает через деление общего кол-ва импульсов на коэффициент 14) SpeedoPKm - Импульсов на километр. сюда вводится число импульсов, которые сгенерирует геркон или холл если проехать 1 километр. Для нч входа 1000 метров / 2 метра окружности = 500 импульсов. каждую полную зарядку колво проеханных импульсов переводится в целые метры и добавляется к общему счетчику. так что меняя коэффициент можно испортить/пересчитать только текущую поездку от последней полной зарядки.

Дальше по шине 1Wire - сделана для подключения термодатчиков ds18b20. можно использовать и двупроводное подключение но на 3 вольтах питания даташит настоятельно рекомендует трехпроводное. проверял и так и сяк на коротких проводках и 2 датчиках работает нормально и так и сяк. Датчики все опрашиваются разом. 23) TempMeasInterv - интервал задержки на преобразование температуры - датчики достаточно медленные и конвертируют температуру примерно 700 милисекунд. новые пошли -400 мсек. у меня стоит секунда. если в эту задержку вписать ноль - то при включении питания бмска не будет сканировать шину на наличие датчиков(ускоряет запуск). 22) TempUpdInterv задает время в милисекундах которое бмска прождет с последнего законченного измерения до запуска нового. надо понимать что слишком частое пинание датчика их хоть немного но нагревает в результате показания будут завышены.

Сильно изменилась логика работы лампочки. теперь она не моргает сама по себе а выполняет очень четкие функции:
1) короткая вспышка - момент запуска чтения напряжений ячеек. должен при исправной связи происходить сугубо синхронно на всех субплатках связанных. просто идеально одновременно - макс рассинхрон - 8 милисекунд! Одновременно с этой вспышкой в уарт кидается строка
$# 2488536
Это кол-во миллисекунд прошедших с момента включения питания на первую плату бмс. сделано для возможности нормальной отрисовки графиков для бмс с любым периодом обновления напряжений.
после вспышки лампочка может загорется на пол секунды - это значит данная платка балансирует хоть одну ячейку у себя на борту.
Если лампочка горит 90% времени - значит вы находитесь в менюшке именно этой субплатки.

Конечно же полная синхронность трех плат привела к тому что время самого измерения напряжений поячеечных теперь пустое - платы ничего не шлют в уарт чтоб не создавать помех. изза этого в ежесекундное обновление с трудом тык-в-притык влезает только 3 платки. больше - не получится - будут накладываться данные. чтобы была возможность использовать бОльшее окл-во плат - увеличиваем 17) CellMeasureInterv у первой платы до 1990. у остальных плат в любом случае надо это время поставить в районе 2990 чтоб если пропадет связь - они продолжали отслеживать в эконом режиме но при этом у остальных плат это время должно быть заведомо больше времени у первой платы. первая платка задает ритм:)

Также исправил работу балансировщика. Теперь коректно работает 3) BalanceMin. Суть этого напряжения - если любая из банок любой из платок будет выше этого напряжения - она будет балансироваться. для лифера я ставлю например такие коэффициенты:
1) BalanceStart=3450
2) BalanceDelta=5
3) BalanceMin=3550
4) UpperLimit=3600
5) UpperDelta=1
6) LowerLimit=2500

Это значит что балансировщик будет включаться только для ячеек выше 3.45 вольта(когда у лифера начинается резкий подъем вверх) и баланситься будет до тех пор пока разница между самой разряженной и самой заряженной ячейками не уменьшится до 5 миливольт. Дальше напруги доползут до 3550 и тут уже включится далансировщик опять уже для всех ячеек, которые достигли этого порога. У меня зарядка смотрит на состояние кулера балансировки и если там единица - она сбавляет ток зарядки до 1 ампера а балансир у меня может 1.3 ампера выдать. итого напряжение батареи и будет висеть на уровне 3550 потребляя с зарядки её 1 ампер. не будет клацать защита и за счет балансировочных резисторов будет "отапливаться" аккумулятор. Если же зарядка мощнее балансировщиков то дойдя до 3.6 - зарядный канал отрубится и включится когда батка разрядится до 3599. тоесть будет моргалка. Если 3) BalanceMin сделать 3600 и больше - то только ячейки дошедшие до 3.6 будут балансироваться одновременно с вырубанием зарядного канала.

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

Также было внесено небольшое изменение в систему калибровки. В том экселике что я давал для расчетов коэффициентов смещения и усиления значения выдавались 1 как 1000 для kU  и 0 как 1000 для Offset. Я заметил что не хватает точности коэффициента усиления. я увеличил его разрядность на порядок. теперь 1 для коэффициента усиления это 10000 в настройках. Но также я сохранил совместимость и со старым вариантом. Если kU  меньше 4000 то считается что это коэффициент с разрядностью 1000. Его нельзя ввести с меню - это только для совместимости со значениями, зашитыми в еепром. еепром полностью сохранена как в прошлых прошивках. можно поставить Preserve eeprom и обновить прошивку - коэффициенты не послетают. Но если послетают и у вас остались старые - то просто заносите их в бмску домноженные на 10. ну или перерасчитываете коэффициенты в новом экселике.

Ещё сделал для людей, у которых бмс намертво подключена к питанию - возможность отключения системы аварийного отключения питания - если поставить в 10)SHDNLimTimo значение ноль - выключаться питание не будет. Даже если любая из ячеек опустится ниже 9) SHDNLim - питание не отключится пока в 10)SHDNLimTimo ноль.

Вот вродебы и все :) вроде целую неделю пилил а как-то скромненько вышло :) В любом случае было много доработок модификаций и переделок. Печально то что абсолютно бесповоротно кончилась ПАМЯТЬ! Ещё есть несколько задумок в т.ч. самокалибровка но флешки для кода больше свободной нет - ни байта :) бум чот думать :) 32 кила забить....

в уарте тоже немного поменялось
Spd:0.0, Ctp:0.0, Ttl:0
BqS: 00000000, c:20,b:00,p:00
Spd - скорость высчитанная по частоте и коэффициентам
Ctp - пробег от последней зарядки
Ttl - пробез от начала начал - можно сбросить с менюшки
BqS - регистр состояний бкюшки - там всякие сверхкратковременные провалыв напруг или превышений токов и т.д.
с - колличество найденных ячеек в батарее - для проверки работы связи
b - кол-во высчитанных балансируемых ячеек - также для проверки связи
p - процент шима на вентилятор обдува балансировочных резисторов.

Спасибо за внимание ;) Пользуйтесь.
1)8FUN SWXK 250w24V@17A48V 13S4P LGD1, China kontr
3)MXUS 3000 @90A80V LiFePo 20Ah 25S, Nucular 12F
Telegram @clawham

JT

[user]clawham[/user], в плате  v 1.9 ( где  всё на одной плате) получаеться что только SCK неподтянут к питанию.
Хороший подарок перед началом сезона.

clawham

Ну да. получается что там он кагбэ в воздухе..ну он не в воздухе - все опдтянуто внутренними в атмегу резюками но они порядка 90 килоом и на пару датчиков на проводке их не хватает. на один и у самого процессора и с питанием - иногда хватает но с ошибками :)

П.С. Врагу не сдается наш гордлый варяг :)
Переделал систему вывода менюшки на массивы и функции вместо printf и высвободил ещё целых два кила флеши :) Таки шота ещё будет ;)
1)8FUN SWXK 250w24V@17A48V 13S4P LGD1, China kontr
3)MXUS 3000 @90A80V LiFePo 20Ah 25S, Nucular 12F
Telegram @clawham

tmiaer

[user]clawham[/user], родная стокилоомная подтяжка в атмелах ловит наводки только в путь)))

clawham

естественно :) 1w без подтяжки ж и не работает - устройстра только на землю замыкать могут...

Что б ещё засуцнуть в эту несчастную атмегу? Изменение частоты шима на вентилятор? Выход ещё одного шима для обогревателя на зиму?
1)8FUN SWXK 250w24V@17A48V 13S4P LGD1, China kontr
3)MXUS 3000 @90A80V LiFePo 20Ah 25S, Nucular 12F
Telegram @clawham

acyd

а как так по калибровке канала прием-передача?, раньше помнится там надо было 4 подстроечника крутить - находить граничные значения, а потом на изх основе выставлять среднее стабильное.

Еще бы неплохо научится калибровать ток кз и максимальный ток нагрузки, а то сейчас по сути их нет, пару раз во время экспериментов отгорали пробода от хт60, сейчас прикупил  специальный дорогой пакетник на постоянку, он отстреливается

программная часть совершенствуется, надо и аппаратную подтянуть - я сейчас окончательно перешел на мощный dc, для питания затворов, а то маломощные мне весь мозг сделали, стоит поставить больше 2 фетов и питальники меньше 100ма  могут просесть, а ты чешешь репу, почему фет в линейном режиме.

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

а еще неплохо себя показал блокировщик запуска на p-канальнике, т.е при планом пуске надо отключать фары и слаботочку, иначе кондеры не зарядятся и запуск не произойдет.  Раньше обходился доп кнопкой, что не оптимально. Сейчас автоблокировка запуска. Т.е слаботочка включается только когда включилась-зарядилась силовая.

Но из меня проектировщик еще тот, поэтому все на уровне костылей и патчей не проводках. Хочется придти к цельному комплексному решению.
Спойлер

Кстати на jlcpcb халявный заказ плат 10х10 10шт за 2$ c фришипингом, уже 2 раза заказывал, заводские платы дешевле текстолита.

clawham

#663
скажем так - силовая у моего текущего проекта будет вообще отсутствовать. я буду рулить только слаботочкой контроллера и зарядным каналом. так что развития силового размыкателя не ждите особо.
но вообще конечно можно было бы и развить тему просто нужды нет. предохранитель на 200 ампер, пакетник на 63 ампера и резюк предзарядный вполне себе норм. а слаботочка и дисишка для фар - отдельным каналом. Не вижу смысла в том силовом размыкателе как сейчас он есть. У той платы есть три проблемы - в разрядном канале компаратора два а выполняемые функции 4 так что сразу сложно настроить чтото одно не поломав второго. дальше есть проблема с питанием. или на стабилитроне или на топе - топ надежен но сложный, стабилитронный вариант пугает компараторы кратковременными просадками.  так что пока видится намотанный микротрансик для топа, запитка нормальным питальником, разнесение функций компараторов. но всеравно аналоговая часть останется а я чесно в ней плаваю - я програмист.
Потому в моем новом проекте - разрываться будет слаботочка контроллера и +12 от дисишки. ну а зарядный канал останется как и был хотя я туда бы тоже впихал компаратор - он фронты хорошие дает.  Я пытался завлечь бкюшку в разрыв кз - там у неё есть красивые пороги и задержки но увы. она и на многое что другое дает реакцию - ложные срабатывания увы.

Так что дальше будет пилиться програмная часть. буду делать велокомпьютер под эту бмску с функциями контроллера света. По разрывателю на текущий момент - проект умирает :) Смысла поддерживать его нет смысла - не планирую больше использовать. Возможно на третий свой вел возьмусь и чтото сделаю. но маловероятно.

по связи - есть пара вариантов на транзисторах и на кондерах..на транзисторах скорость поднимется до 38400 +- а на кондерах и 115200 легко. но на кондерах есть проблема с помехами. Вариации этого приема прорабатываются потихоньку но времени совершенно не хватает...сезон на носу а вел разобран и не готов особо. Еще много всего делать. Та и на работе завалы....некогда прям разгребаться :) вот психанул и потолкал немного бмску...
1)8FUN SWXK 250w24V@17A48V 13S4P LGD1, China kontr
3)MXUS 3000 @90A80V LiFePo 20Ah 25S, Nucular 12F
Telegram @clawham

clawham

Весеннее обострение обновление :)
Нашелся небольшой глючек. Если зайти в меню несуществующей платы то остальные платы должны молчать. они и молчат..всегда...везде ... короче связь теряется между платками. Я вроде как это предусмотрел - если в меню долго ничего не делать - оно само выходит из меню но то если зайти в меню существующей платы а если зайти в несуществующую - выйти из меню некому. в общем добавил выход из этого запойного режима. Проблему обнаружил на 22 день катания - перестал работать подогреватель вконце заряда )

обнова в папке релиз. там же и слаботочный разрыватель на 3 субплаты . рвет плюс P канальным полевиком. для слаботочки и зарядки - вполне себе хватает.
1)8FUN SWXK 250w24V@17A48V 13S4P LGD1, China kontr
3)MXUS 3000 @90A80V LiFePo 20Ah 25S, Nucular 12F
Telegram @clawham

acyd

А я собираю на новой печатке с 0603 деталями -  платка 9х10см содержит все нужные мне модули ,которые раньше доп платками проводками соединялись. От модульности перешел к концепции все в одном.
Запаял и проверил балансирные цепи, импульсное питание 13.5 и 3.3в, включение-выключение общего питания. На очереди проверка на помехи блочка на блютус, впайка bq и атмеги. Вот думаю переходить на новую прошивку или пока на старой запустить.