avatar_nordiver

Проект: улучшенная BMS для LiFePO4 с измерением ёмкости

Автор nordiver, 09 Дек. 2009 в 21:31

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

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

zap

Цитата: Павел от 12 Дек. 2009 в 14:52
Цитата: zap от 12 Дек. 2009 в 14:33
А там не нужна высоколинейная оптопара, на что Вам микроконтроллер даден? Он может линеаризировать любую кривулину, там хватит, думаю, калибровки в 5-6 точках а дальше интерполировать по сплайну Кэтмулл-Рома. Сотые доли вольта вполне должен осилить, там не настолько уж и кривая характеристика.
А тот же температурный дрейф свяких коэффициентов?
В атмеге есть встроенный температурный сенсор. Передаточная кривулина от температуры, думаю, изменяется как-то предсказуемо (нет необходимости калибровать при разных температурах, можно программно пересчитать). Это, конечно, ещё усложнит софт, зато упростит аппаратную часть :-) Правда геммора будет очень много с калибровкой каждой ячейки :-( Жаль.
С уважением,
Андрей

Поражаю масштабностью некопмпетентность (ц) из лички

nordiver

Цитата: zap от 12 Дек. 2009 в 14:33
Отслеживать напряжение на каждой ячейке и общий ток всей батареи?

Да, и называется эта операция "калибровка батареи" делается она так: батарея полностью заряжается (все ячейки сбалансированны) затем потом полностью разряжается на какую нибудь нагрузку (до отключения по напряжению одной из ячеек) ток в данном случае измеряет DS2760, потом батарея отключается от нагрузки и каждая ячейка приводится к нижнему значению напряжения (с помощью балансировщиков) строго установленным током, для этого и нужна обратная связь по току, время которое нужно для разрядки каждой ячейки умноженное на ток (балансировщика) плюс общий ток прошедший через всю батарею при разрядке и дадут Вам точное значение ёмкости каждой ячейки в отдельности. Есть ещё один вариант, более долгий но вообще не требующий измерения общего тока батареи -  батарея полностью заряжается (все ячейки сбалансированны) затем ячейки полностью разряжается точным током через балансировщики до единого (минимального напряжения) зная ток и время разряда можно точно знать ёмкость каждой ячейки.

ЦитироватьА там не нужна высоколинейная оптопара, на что Вам микроконтроллер даден? Он может линеаризировать любую кривулину, там хватит, думаю, калибровки в 5-6 точках а дальше интерполировать по сплайну Кэтмулл-Рома. Сотые доли вольта вполне должен осилить, там не настолько уж и кривая характеристика.

Вот тут с Вами не соглашусь, калибровка 16 оптопар по 5-6 точкам и всему температурному диапазону дело для людей у которых вагон времени  :D. Для того чтобы так незаморачиваться и были разработанны высоколинейные оптопары стоимость которых начинается от 200р


stranger

Есть предложение из схемы "Батарея300.jpg"  выбросить один канал от мастера с слейвам, скажем VT5 у модуля управления и нижний оптрон у модуля контроля, и использовать для обмена по 2-ум линиям протокол 1-wire. Т.е. мастер по линии VT4 будет передавать резет, стробы в начале тайм-слотов и данные для слейвов, а по второму каналу (средний оптрон модуля контроля) слейвы будут передавать данные мастеру.
Единственное "неудобство" - использование не одной, а двух ног attiny, но это, я думаю, не очень страшно.

Предлагаю уважаемым участникам "концессии" высказаться по этому поводу.

i

Цитата: stranger от 12 Дек. 2009 в 16:22
... использование не одной, а двух ног attiny, но это, я думаю, не очень страшно...
Это не страшно (хотя и жалко). Но лучше нарисовать примерную схемку.

nordiver

Цитата: i от 12 Дек. 2009 в 17:19
Цитата: stranger от 12 Дек. 2009 в 16:22
... использование не одной, а двух ног attiny, но это, я думаю, не очень страшно...
Это не страшно (хотя и жалко). Но лучше нарисовать примерную схемку.

Вот, с изменениями.

FAS_r7

последняя редакция схемы на порядок интереснее, т.к. всего два оптрона. 
Можно один счетверенный использовать на два модуля.   минус 19руб*8 (для 16-ти ячеистого акка).  :)
И чего Вы паритесь по поводу изоляции оптронов, у нас максимальное напряжение приложенное между выходами и входами оптронов = полному напряжению батарее, т.е. 60В, ну может поболее.

Интересной мне показалась идея развязки на кондёрах.  правда два минуса:
1. Например передаём сигнал вниз. Амплитуда сигнала (импульсов) внизу будет на много меньше чем в модуле т.к. из-за сопротивлений переменке кондёров в остальных модулях. Скорее всего в кол-во модулей раз, т.е. в 16 раз для 48акка.  И составит примерно 2.0....3.3....3.9/16 = 0.12....0.2....0.24 В, т.е. понадобится какой-то компаратор, отделяющий 0 и 1.  Хотя в Тиньке вроде есть таковой, думаю решаемо.
2. Придётся юзать какой-то протокол передачи не пользующий стабильные состояния 0 или 1, т.к. кондёры. Манчестер думаю поможет. Как устроен 1-wire я не знаю, думаю аналогично.  Т.е. решаемо.
Так что я ЗА кондёрную развязку.  :)  Они же дешевле оптопар  :p
Если видите ещё проблемы или что-то вызывающее изжогу просьба высказаться.   

Да, и ещё. А зачем нам очень высокая точность измерения напряжения ячеек?  Порядка 0,05В должно хватать с запасом.  Нам же не принципиально, отключим батарею при разряде ячейки до 2,5В или до 2,4В.  При заряде аналогично.
И ток балансировки тоже мерять не особо нужно.  Модуль может стабилизировать его на одном заданном уровне, о котором мастер знает. И мастер в это время может так же снизить ток заряда ШИМлением подключенного зарядника до заданного уровня. Вроде нормально  :)

nordiver

Цитироватьпоследняя редакция схемы на порядок интереснее, т.к. всего два оптрона. 
Можно один счетверенный использовать на два модуля.   минус 19руб*8 (для 16-ти ячеистого акка).  :)

Сдвоенная оптопара TLP521-2GB стоит 8р возиться с конденсаторами из-за 8х16=128р помоему не имеет смысла.

i

Цитата: nordiver от 12 Дек. 2009 в 17:45
Вот, с изменениями...
Да, такую штуку можно заставить работать. Но будет трудно избавится от коллизий. Представьте, что две ячейки одновременно решили послать сообщение, они его отбарабанят (так как не видят, что творится на передающей линии), сообщения сложатся ("монтажное ИЛИ") и мастер получит "кашу". 
В 1W передатчик может слушать свой выход (так как прием и передача идет по одной линии), и, в случае возникновения коллизии (когда то, что он передает, не совпадает с тем, что он принимает), прекращает передачу и ждет освобождения линии. На этом основан автоарбитраж. В начале сообщения идет адрес источника (или вес сообщения), в процессе его передачи сразу несколькими источниками, происходит отсеивание этих источников по адресу, выигрывает тот у кого в адресе больше старших нулей, остальные получают состояние коллизии (они пытались передать "1", а получился "0") и выходят из соревнования за обладание линией, а победитель даже не заметит, что кто-то ему пытался мешать. Таким образом не тратится время на выяснение "кто тут главный", и сообщение от главного достигает всех приёмников без искажений (о чём, кстати, они все должны ему сообщить в конце передачи, там специальный битовый интервал предусмотрен).
Можно схему несколько упростить за счет использования двух ножек микроконтроллера, но нужно обязательно дать передатчику возможность  слушать, что реально творится на линии в момент передачи (глухонемым трудно говорить именно из-за того, что они не слышат сами себя).
     

stranger

Цитата: i от 13 Дек. 2009 в 11:17
Да, такую штуку можно заставить работать. Но будет трудно избавится от коллизий. Представьте, что две ячейки одновременно решили послать сообщение, они его отбарабанят (так как не видят, что творится на передающей линии), сообщения сложатся ("монтажное ИЛИ") и мастер получит "кашу". 
В 1W передатчик может слушать свой выход (так как прием и передача идет по одной линии), и, в случае возникновения коллизии (когда то, что он передает, не совпадает с тем, что он принимает), прекращает передачу и ждет освобождения линии. На этом основан автоарбитраж. В начале сообщения идет адрес источника (или вес сообщения), в процессе его передачи сразу несколькими источниками, происходит отсеивание этих источников по адресу, выигрывает тот у кого в адресе больше старших нулей, остальные получают состояние коллизии (они пытались передать "1", а получился "0") и выходят из соревнования за обладание линией, а победитель даже не заметит, что кто-то ему пытался мешать. Таким образом не тратится время на выяснение "кто тут главный", и сообщение от главного достигает всех приёмников без искажений (о чём, кстати, они все должны ему сообщить в конце передачи, там специальный битовый интервал предусмотрен).
Можно схему несколько упростить за счет использования двух ножек микроконтроллера, но нужно обязательно дать передатчику возможность  слушать, что реально творится на линии в момент передачи (глухонемым трудно говорить именно из-за того, что они не слышат сами себя).
   

Вообще ничего не понял.
Вы, может быть, про какой-то другой протокол говорите, а не про 1-wire.

Цитата: i от 13 Дек. 2009 в 11:17
Представьте, что две ячейки одновременно решили послать сообщение,

Зачем???

Цитата: i от 13 Дек. 2009 в 11:17
На этом основан автоарбитраж. В начале сообщения идет адрес источника (или вес сообщения), в процессе его передачи сразу несколькими источниками, происходит отсеивание этих источников по адресу, выигрывает тот у кого в адресе больше старших нулей, остальные получают состояние коллизии (они пытались передать "1", а получился "0") и выходят из соревнования за обладание линией, а победитель даже не заметит, что кто-то ему пытался мешать.

Вы сейчас про команду SEARCH ROM говорите?



i

Цитата: stranger от 13 Дек. 2009 в 11:45
...Вы, может быть, про какой-то другой протокол говорите, а не про 1-wire.
Возможно.:bw:    1-wire (в моём понимании) специфицирует физику процесса, а я сейчас говорил о логике, которая может работать на этой физике. Такое сделано в автомобильном CAN.
Цитата: stranger от 13 Дек. 2009 в 11:45
Зачем???
Например если они одновременно достигли аварийного напряжения.

Цитата: stranger от 13 Дек. 2009 в 11:45
Вы сейчас про команду SEARCH ROM говорите?
А фиг его знает, может и про неё, только она мне не знакома.

Вот кстати упрощённая схема...

stranger

Давайте ещё раз. Если мы говорим про далласовский 1-wire (а речь шла именно о нём), то не могут там две ячейки "одновременно послать сообщение", нет там коллизий и "авторбитража". Все слейвы отвечают только по запросу мастера.
Там мастер решает, с каким слейвом общаться, на то он и мастер. В начале сеанса, после команды ресет он выдаёт на линию команду MATCH ROM, за которой следует 64-битный адрес того слейва, с которым он хочет общаться. Если адрес слейва совпал с адресом, который передал мастер, он отвечает на все дальнейшие команды, которые передаёт мастер, а все остальные слейвы молчат. Т.о. две ячейки одновременно не могут "одновременно послать сообщение".

i

Да, теперь понятнее. Я действительно говорил не о далласовском 1-wire. Судя по вашему описанию термин "1-wire" жёстко регламентирован спецификацией и принадлежит Dallas, как "I2C" принадлежит Philips. До сих пор я понимал его буквально: "1-проводный".
Просто волей случая я свёл шапочное знакомство с системой CAN, и некоторые идеи мне понравились.
"CAN (англ. Controller Area Network — сеть контроллеров) — стандарт промышленной сети, ориентированный прежде всего на объединение в единую сеть различных исполнительных устройств и датчиков. Режим передачи — последовательный, широковещательный, пакетный.
CAN разработан компанией Robert Bosch GmbH в середине 1980-х и в настоящее время широко распространён в промышленной автоматизации, технологиях «умного дома», автомобильной промышленности и многих других областях. Стандарт для автомобильной автоматики."

Основное отличие от 1-wire - отсутствие монархии. Каждое устройство имеет право послать сообщение в сеть (в следствии какого-либо события), это сообщение имеет определенный формат, его примут либо все другие устройства, либо никто. Приняв сообщения, устройство либо выполняет некоторые действия (включает поворотник или сообщает свое состояние/температуру/давление и т.д.), либо игнорирует его, если оно его не понимает. Таким образом в одной сети могут присутствовать совершенно разные группы устройств (каждая со своим мастером или без оного), которые говорят меж собой на своих языках не мешая другим.
Лично мне такой подход больше нравится, вот я и хочу сделать нечто подобное.  :bk:
Если рассматривать только АКБ, то 1-wire там хорошо впишется, а если распространить сеть на всё ТС (типа так), то тесновато будет. ИМХО

Павел

Цитата: FAS_r7 от 12 Дек. 2009 в 23:23
Интересной мне показалась идея развязки на кондёрах.  правда два минуса:
1. Например передаём сигнал вниз. Амплитуда сигнала (импульсов) внизу будет на много меньше чем в модуле т.к. из-за сопротивлений переменке кондёров в остальных модулях. Скорее всего в кол-во модулей раз, т.е. в 16 раз для 48акка.  И составит примерно 2.0....3.3....3.9/16 = 0.12....0.2....0.24 В, т.е. понадобится какой-то компаратор, отделяющий 0 и 1.  Хотя в Тиньке вроде есть таковой, думаю решаемо.
2. Придётся юзать какой-то протокол передачи не пользующий стабильные состояния 0 или 1, т.к. кондёры. Манчестер думаю поможет. Как устроен 1-wire я не знаю, думаю аналогично.  Т.е. решаемо.
Так что я ЗА кондёрную развязку.  :)  Они же дешевле оптопар  :p
Если видите ещё проблемы или что-то вызывающее изжогу просьба высказаться.   
1) смоделировал - вроде всё нормально, сигналы проходят почти без искажений
2) на кондёрах надо ипользовать 1-wire (он же вроде исп. в Touch Memory) или модифицировать его: подлиньше пауза, покороче импульсы
Но проблемы могут быть при быстром изменении напряжения батареи, например при трогании на полностью заряженной батарее.
Так что наверно оптопары предпочтительней.

i

Что бы сигнал  прошёл через конденсатор (или трансформатор) без искажений, необходимо что бы в его спектре отсутствовала постоянная составляющая, т.е. сигнал должен быть как минимум двуполярным. Для 1-wire, CAN, NRZ и многих других нужна постоянка. Следовательно нужна иная кодировка: CMI, DB3 и другие. Постоянку с гальванической развязкой могут передать оптроны или магниторезисторы.

Vetal

Цитата: nordiver от 09 Дек. 2009 в 21:31
Хочу дополнительно остановиться на принципе балансировки: когда идёт зарядка, тиньки в модулях контроля следят за напряжением, как только напряжение становиться равным 3.65в тинька запускает ШИМ и транзистор открываясь создаёт байпас по которому ток начинает течь в обход ячейки т.е она перестаёт заряжаться, а те ячейки которые не достигли ещё этого напряжения продолжают заряжаться, как только все они достигнут напряжения 3,65в то они оповещают мастер о том что батарея заряжена и сбалансированна и модуль управления отключает батарею от зарядного.

Вопросик такой. В LiFePo4 аккумуляторах конец зарядки разве просто достижение определенного напряжения на ячейке. Ведь при зарядке разными токами, чем больше тем менее полно заряженную батарею получим при достижении просто 3.6в на ячейке. Я себе в БМС собираюсь такой ШИМ модуль зарядки разместить: допустим начинаем зарядку током 1С(это аж 10а все таки),при достижении 3.6в на какой-то из ячеек переключаю контролером на меньший ток заряда,и так 3-4 ступени,последняя равна не больше чем ток балансиров.А когда уже на всех балансирах получим ток не менее чем xА(я думаю х~=ТокЗаряда-0.02С),батарею можно считать полностью заряженной и отключить ШИМ. В таком случае достаточно слабеньких балансиров,и процесс зарядки не дергается,да и зарядного особого не нужно,тупо подал напряжение > и все.(У Li написано признак конца заряда конечный ток 0.02С при 4.2в,хотя и у свинца те же 0.02С, только вот Li надо при этом отключать. Вопрос: А LiFePo4 можно подержать при напряжении 3.6в пока остальные элементы не доберут свое? )
Tiny25 вместо 85,из той же серии с меньшей памятью вроде должно хватить, раза в 2 дешевле все таки.

nordiver

Цитата: Vetal от 14 Дек. 2009 в 05:44
Вопрос: А LiFePo4 можно подержать при напряжении 3.6в пока остальные элементы не доберут свое? )

Можно, без проблем.

Vetal

Немного предложений по энергосбережению. Предлагаю питание включать основным контроллером, и выключение делать по истечении какого то времени или при отсутствии нагрузки через какое то время,допустим настраеваемое пользователем. Также желательно вводить в Sleep power-down контроллеры на ячейках,просыпать их по прерыванию входным оптроном при включении. А то lm317 минимум 3.5мА нагрузки требует,не много но. а выключать кнопку можно забывать.
Может режим зарядки ввести сразу,чтоб не лепить еще дополнительно.Чтобы подав напряжение на батарею выше чем заряженая в каких то пределах,можно даже просто через кондер с мостиком прям от сети,была возможность заряжать,(отдельным входом для зарядки вывести транзистор второй)Ведь добавить нужно всего лишь катушку да диод,остальное все вроде есть.

stranger

     Хотел бы обратиться к уважаемым участникам форума со следующим предложением.

     В связи с моей  загруженностью и отсутствием времени для написания софта для всех девайсов проекта, а их три: модуль контроля, модуль управления и дисплей на руле, хотелось бы, чтобы в написании программ приняли участие ещё несколько человек, владеющих навыками программирования на ассемблере или C для AVR.

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

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