This commit is contained in:
Татьяна Фарбер 2026-10-03 22:34:59 +04:00
parent ae4f024b16
commit 24679cf743
3 changed files with 162 additions and 0 deletions

41
balance.md Normal file
View File

@ -0,0 +1,41 @@
## Технологическая карта: Первая параллельная балансировка массива АКБ 48В
## ⚠️ Важное предупреждение (Физика процесса)
Каждый литиевый блок имеет емкость 100 А·ч и способен отдать в режиме КЗ колоссальный ток. Если соединить блоки с разным уровнем заряда (разницей более 0.5 В) напрямую толстой медной шиной ШМТ или кабелем 50 мм², возникнет мощный уравнительный ток (сотни ампер). Это приведет к сильной дуге, выгоранию клемм М8 и необратимому повреждению плат встроенных BMS.
------------------------------
## Шаг 1. Подготовка и входной контроль
1. Разложите все 8 блоков POWERWIN на перфорированные профили ящика ВРУ в их штатные места.
2. Важно: Главные медные шины ШМТ и силовые кабели ПуГВ 50 мм² на этом этапе должны быть полностью отключены от аккумуляторов.
3. Возьмите мультиметр, переключите в режим измерения постоянного напряжения (DC) и замеряйте вольтаж на клеммах каждого блока по отдельности. Запишите показания.
* Норма: Блоки «из коробки» обычно имеют напряжение в районе 51.5 В – 52.5 В.
* Анализ: Убедитесь, что максимальная разница между самым заряженным и самым разряженным блоком не превышает 0.8 В. Если разброс укладывается в этот допуск, переходите к Шагу 2.
## Шаг 2. Сборка временного балансировочного контура (Безопасного)
Для ограничения уравнительного тока используется тонкий монтажный провод, который сработает как естественный распределенный резистор.
1. Отрежьте два куска обычного монтажного провода ПуВ (ПВ-1) сечением 2.5 мм² (который заложен у вас в смете на автоматику) длиной около 1.5–2 метров.
2. Зачистите концы. Опрессуйте их штыревыми наконечниками НШВИ или просто сделайте аккуратные петли под болт М8.
3. Соедините все плюсовые (+) клеммы всех 8 блоков последовательно в одну цепочку этим тонким проводом 2.5 мм². Затяните болты М8 от руки (без фанатизма).
4. Точно так же соедините все минусовые (-) клеммы всех 8 блоков второй цепочкой из тонкого провода 2.5 мм².
## Шаг 3. Стадия пассивного выравнивания (Ночь)
1. Оставьте массив аккумуляторов в таком состоянии на 10–12 часов (оптимально — на ночь).
2. Что происходит: Из-за высокого сопротивления провода 2.5 мм² уравнительный ток между блоками физически не сможет подняться выше безопасных 2–4 Ампер. Блоки с большим напряжением начнут плавно и мягко «переливать» емкость в более разряженные блоки.
3. Утром замеряйте напряжение мультиметром на любой из банок. Оно станет абсолютно одинаковым на всех 8 блоках с точностью до сотых долей вольта (потенциалы выровняются в ноль).
## Шаг 4. Финальная силовая сборка
1. Полностью демонтируйте временные тонкие провода балансировки.
2. Теперь, когда потенциалы равны и риска искры больше нет, собирайте штатную силовую схему: прикручивайте кабели ПуГВ 50 мм² к клеммам АКБ, заводите их на держатели предохранителей MEGA 125A и фиксируйте на главных медных шинах ШМТ 40х4.
3. Затяните все болты М8 динамометрическим ключом или надежно от руки с обязательным использованием пружинных шайб (гроверов) из сметы.
## Шаг 5. Финишная дозарядка и буфер
1. Запустите систему АВР, дождитесь наступления ночного тарифа и включения блоков Mean Well RSP-3000-48.
2. В процессе первой зарядки током 125А возьмите тепловизор и раз в 30 минут сканируйте клеммы АКБ и места крепления к шинам ШМТ. Все точки должны иметь одинаковую комнатную температуру. Если какая-то клемма светится ярко-желтым — глушите зарядку и подтягивайте болт (там плохой контакт).
3. Штатные встроенные BMS внутри каждого блока POWERWIN сами завершат идеальную поячеечную балансировку внутри своих корпусов, когда Mean Well дойдет до выставленной вами буферной точки 54.0 В.
------------------------------

48
sensors.md Normal file
View File

@ -0,0 +1,48 @@
## 1. Ведомость материалов DC-мониторинга (BOM-таблица)
Вся мелочевка и наплатные блоки питания сведены в отдельный список:
| Категория | Наименование компонента | Кол-во | Назначение и инженерные примечания |
|---|---|---|---|
| Вычисления | Микроконтроллер Arduino Nano V3.0 (ATmega328P) | 1 шт. | Ядро сбора данных. Подключение к Linux-ПК по USB для прошивки. |
| Сеть | Модуль локальной сети ENC28J60 SPI | 1 шт. | Сетевой Ethernet-интерфейс (разъем RJ45 под медный кабель в дом). |
| Питание | Наплатный блок питания Mean Well ИЭП-05-12 (или IRM-05-12) | 1 шт. | Преобразует 240В АС от дифавтомата климата в стабильные 12 В DC. |
| | Понижающий DC-DC модуль (например, LM2596 или аналогичный Mini) | 1 шт. | Понижает 12 В до 5.0 В DC для чистого питания Arduino, датчика Холла и ENC28J60. |
| Датчики | Промышленный датчик Холла Allegro ACS758LCB-200B-PFF-T | 1 шт. | Двунаправленный (±200А). Монтируется в разрыв главного минуса шины 48В. |
| Обвязка АЦП | Резистор постоянный 110 кОм (Точность 1%, 0.25 Вт) | 1 шт. | Верхнее плечо делителя напряжения (R1). |
| | Резистор постоянный 10 кОм (Точность 1%, 0.25 Вт) | 1 шт. | Нижнее плечо делителя напряжения (R2). |
| | Конденсатор керамический 0.1 мкФ (104) | 2 шт. | Фильтры высокочастотных помех на аналоговых входах А0 и А1. |
| Монтаж | Макетная плата под пайку (прототипная) + разъемы-гребенки | 1 компл. | Для жесткой распайки всех элементов и резисторов в один монолитный блок. |
## 2. Схема расключения (Трассировка соединений)
Так как датчики и сеть требуют жесткой разводки, соединяйте пины по следующей карте:
## Блок питания и Логика:
* Линия 240В AC (после дифавтомата климата) ──> Вход AC/L и AC/N Mean Well 12V.
* Выход Mean Well 12V (+) ──> Вход IN+ DC-DC преобразователя.
* Выход Mean Well 12V (-) ──> Вход IN- DC-DC преобразователя.
* Настройте DC-DC потенциометром строго на 5.0 Вольт на выходе.
* Выход DC-DC (+5V) ──> Пины 5V на Arduino, VCC на ENC28J60 и VCC на ACS758.
* Выход DC-DC (GND) ──> Пины GND на Arduino, GND на ENC28J60, GND на ACS758 и нижний вывод Резистора 10 кОм.
## Сетевой модуль ENC28J60 ──> Arduino Nano (Шина SPI):
* VCC ──> 5V (от DC-DC)
* GND ──> GND
* CS ──> Пин D10
* SI ──> Пин D11 (MOSI)
* SO ──> Пин D12 (MISO)
* SCK ──> Пин D13 (SCK)
## Аналоговый узел делителя напряжения шины 48В (Пин А0):
* ПЛЮС главной шины 48В ──> Резистор 110 кОм.
* Второй конец резистора 110 кОм ──> Пин А0 Arduino.
* От пина А0 Arduino ──> Резистор 10 кОм ──> МИНУС главной шины 48В (GND автоматики).
* Защита: Конденсатор 0.1 мкФ припаять параллельно резистору 10 кОм (между А0 и GND).
## Аналоговый узел датчика Холла ACS758 (Пин А1):
* VCC ──> 5V (от DC-DC)
* GND ──> GND
* OUT (Сигнал) ──> Пин А1 Arduino Nano.
* Защита: Вторую керамику 0.1 мкФ припаять между пином А1 и GND прямо у платы Arduino.

73
software.ino Normal file
View File

@ -0,0 +1,73 @@
#include <UIPEthernet.h>
// 1. СЕТЕВЫЕ НАСТРОЙКИ (Задайте под подсеть вашего дома)
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 200); // Фиксированный IP вашего шкафа ВРУ
EthernetServer server(80);
// 2. АППАРАТНЫЕ ПИНЫ
const int PIN_VOLTAGE = A0; // Делитель напряжения шины
const int PIN_CURRENT = A1; // Датчик Холла ACS758
// 3. КАЛИБРОВОЧНЫЕ КОЭФФИЦИЕНТЫ
// Коэффициент делителя: (110 + 10) / 10 = 12.0
const float VOLTAGE_DIVIDER_RATIO = 12.0;
// Чувствительность ACS758-200B составляет 10 мВ на 1 Ампер (0.01 В/А)
const float SENSITIVITY = 0.01;
void setup() {
// Инициализация сетевого стека ENC28J60
Ethernet.begin(mac, ip);
server.begin();
}
void loop() {
// Ожидание входящего HTTP-запроса от Linux-сервера (curl)
EthernetClient client = server.available();
if (client) {
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
// Если дошли до конца HTTP-заголовка (пустая строка)
if (c == '\n' && currentLineIsBlank) {
// === ОПРОС ДАТЧИКА НАПРЯЖЕНИЯ ===
// Делаем оверсемплинг из 20 замеров для сглаживания шумов
float avgRawV = 0;
for(int i=0; i<20; i++) { avgRawV += analogRead(PIN_VOLTAGE); delay(1); }
avgRawV /= 20.0;
// Расчет: вольты на пине * коэффициент делителя
float dc_voltage = avgRawV * (5.0 / 1023.0) * VOLTAGE_DIVIDER_RATIO;
// === ОПРОС ДАТЧИКА ТОКА ===
float avgRawI = 0;
for(int i=0; i<20; i++) { avgRawI += analogRead(PIN_CURRENT); delay(1); }
avgRawI /= 20.0;
// Перевод шагов АЦП в вольт-сигнал
float vOut = avgRawI * (5.0 / 1023.0);
// Расчет тока: (Текущий вольтаж - средняя точка 2.5В) / чувствительность датчика
float dc_current = (vOut - 2.5) / SENSITIVITY;
// === ОТПРАВКА СЫРОГО ТЕКСТА (UNIX-WAY) ===
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/plain; charset=utf-8");
client.println("Connection: close");
client.println(); // Обязательный пустой разделитель заголовка и тела
// Вывод параметров в формате plain-text для простого grep в bash
client.print("DC_Voltage: "); client.println(dc_voltage, 2);
client.print("DC_Current: "); client.println(dc_current, 1);
break;
}
if (c == '\n') { currentLineIsBlank = true; }
else if (c != '\r') { currentLineIsBlank = false; }
}
}
// Даем время браузеру/скрипту принять данные и жестко рвем сессию
delay(5);
client.stop();
}
}