Поиск

30 декабря 2020 г.

Подключение активного BMS к инвертору МАП Микроарт по шине I2C

К инвертору МАП производителя Микроарт можно подключить BMS для балансировки ячеек аккумулятора как их собственного производства, так других производителей с помощью "сухих" контактов. 

Но тут есть один нюанс - шина (I2C) в МАП одна, как для подключение BMS так и солнечного контроллера MPPT (КЭС) и если нужна связь с MPPT контроллером, то BMS по сухим контактам работать уже не будет.

По этому нужно подключиться к шине I2C и передавать МАП-у информацию от BMS.

Есть много различных китайских BMS, я использовал активный балансир JK-DZ11-B2A24S с выходом RS485 для мониторинга.

В качестве шлюза выступает микроконтроллер Atmega328p, который запрашивает данные по UART с BMS и передает их по шине I2C инвертору.


Разъем для подключение внешних устройств у МАП 6-контактный RJ11 (6P6C).

Распиновка разъема такая:

  1. BMS_DISCHARGE / I2C_SLC
  2. GND
  3. Термистор NTC
  4. BMS_CHARGE / I2C_SDA 
  5. +5V (МАП Доминатор)
  6. +12V (включается через монитор, по умолчанию отключен)

Каждой ячейке присвоен свой адрес и инвертор опрашивает их по порядку.

В ответ передается информация о напряжении, температуре (если есть датчик) и токе разряда.

Для примера, тестовый прогон в системе мониторинга "Малина" выглядит так:



Напряжение Uакб показано с внутреннего датчика инвертора, однако для действий по подкачке и заряду МАП использует сумму всех напряжений ячеек, полученных с BMS.

В МАП напряжение ячеек используется с двумя знаками после запятой, полученное как округленное значения от деление Uмакс на количество ячеек (4 для 12V, 8 для 24V, 16 для 48V, 32 для 96V), и для того чтобы он раньше времени не прекращал заряд АКБ, нужно задать такое Uмакс, чтобы в результате получилось в 3-м знаке после запятой больше или равно 5.

Например, Uакб_макс = 53.7, Uячейка_макс = 53.7 / 16 = 3.35625 => 3.36. То есть сообщение "BMS полный заряд" не будет возникать раньше времени и заряд прекращаться не будет. Так же не будет сбрасываться мощность с MPPT и график потребления от солнечных панелей станет ровнее.

Шина I2C в МАП (прошивка 28.0) работает на скорости 2.5 кГц. Опрашивает МАП 48V внешние устройства с такой периодичностью:

  1. 0.85 сек - только BMS (16 шт.)
  2. 0.95 сек - BMS + MPPT КЭС
  3. 1.20 сек - только MPPT КЭС

Возможности "гейта" балансир - МАП:
  • Корректировка напряжения ячеек, включая способ округления.
  • Подстройка напряжения конца заряда ячейки, когда до определенного предела выдается напряжение чуть ниже, чтобы МАП не сбрасывал мощность с MPPT.
  • Авто-подстройка в BMS порога начала балансировки в зависимости от прихода мощности с MPPT.
  • Передача температуры с BMS с возможностью корректировки ее значения.
  • Передача информации в Малину о текущем токе балансировки.
  • Отладочная информация о протоколе обмена информация в отдельный порт.
Подключение платы Arduino Nano/ProMini к конвертору UART - RS485:


GND - GND
5V - VCC
TX - TXD
RX- RXD


Arduino - МАП:
A5 - I2C_SCL
A4 - I2C_SDA
5V - +5V
GND - GND

В ардуино нужно залить MiniCore.
Настройка параметров через отладочный порт. Так как в atmega328p один UART, то  используется программный Serial. Библиотеки этого сериала для Ардуино, которые я нашел, не доделанные и сыпят или читают мусором при активной работе. По этому настройку нужно проводить при отключенном BMS и связи по I2C.
Синтаксис команд указан в скобках.

Вывод в отладочный порт:

BMS gate to Microart, v1.0
Cells: 16 (cells=X)
Watchdog(40s): I2C BMS (watchdog=1-I2C,2-BMS,3-all)
BMS slave address: 1
BMS read period, ms: Synch I2C (period=0-off,1-synch,X ms)
BMS voltage round: 5/4 (Vround=0-5/4,1-cut,2-up)
BMS voltage correct, mV: 0 (Vcorr=X)
BMS cell max catch, 10mV: +1 (Vmaxhyst=X)
BMS Temp correct, C: 6 (tempcorr=X)
BMS Balans delta, mV: 10 (deltadef=X)
BMS Balans delta array, [I>mV]: 6>20 25>40  (Delta: Dn=X, Current: In=X)
BMS Balans delta decrease pause, s: 3600 (deltapause=X)





Комментариев нет:

Отправить комментарий