sensors
This commit is contained in:
parent
ae4f024b16
commit
24679cf743
41
balance.md
Normal file
41
balance.md
Normal 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
48
sensors.md
Normal 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
73
software.ino
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user