From 24679cf743e56236edf647b70213b84439f07a80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A2=D0=B0=D1=82=D1=8C=D1=8F=D0=BD=D0=B0=20=D0=A4=D0=B0?= =?UTF-8?q?=D1=80=D0=B1=D0=B5=D1=80?= Date: Sat, 3 Oct 2026 22:34:59 +0400 Subject: [PATCH] sensors --- balance.md | 41 +++++++++++++++++++++++++++++ sensors.md | 48 ++++++++++++++++++++++++++++++++++ software.ino | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 162 insertions(+) create mode 100644 balance.md create mode 100644 sensors.md create mode 100644 software.ino diff --git a/balance.md b/balance.md new file mode 100644 index 0000000..0281c89 --- /dev/null +++ b/balance.md @@ -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 В. + +------------------------------ diff --git a/sensors.md b/sensors.md new file mode 100644 index 0000000..3d73c0c --- /dev/null +++ b/sensors.md @@ -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. diff --git a/software.ino b/software.ino new file mode 100644 index 0000000..b248eba --- /dev/null +++ b/software.ino @@ -0,0 +1,73 @@ +#include + +// 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(); + } +}