Прошивка и настройка скетча
При прошивке обязательно отключите:
- Сеть 220В
- Клеммы от аккумулятора
- Провод данных от логгера (TX → RX)
Только после этого подключайте USB-кабель!
Что понадобится
- Arduino IDE с установленным ядром для вашего микроконтроллера
- USB-кабель (Mini-USB или Micro-USB – зависит от платы)
Подготовка рабочей папки
Скачанный архив содержит папку libraries и папку со скетчем. Библиотеки в архиве модифицированы для уменьшения размера прошивки – их нельзя заменять стандартными из менеджера библиотек Arduino IDE.
Распакуйте архив
Распакуйте архив в любую папку – например, на рабочий стол. Структура должна быть такой:
ViktoRi/
├── libraries/ ← библиотеки из архива
└── ViktoRi_ver_X_XX/ ← папка со скетчем
├── ViktoRi_ver_X_XX.ino
├── 1_User_Setup.h
└── ...Укажите рабочую папку в Arduino IDE
Файл → Настройки → Путь к альбому со скетчами – укажите папку, в которой лежат libraries и папка со скетчем.
Перезапустите Arduino IDE
Чтобы IDE подхватила библиотеки из новой рабочей папки.
В пути к папке не должно быть кириллицы – только латинские буквы. Иначе Arduino IDE не найдёт библиотеки.
При обновлении прошивки используйте библиотеки из того же архива. Не смешивайте библиотеки от разных версий – это может привести к ошибкам компиляции.
Процедура прошивки
Настройте 1_User_Setup.h
Откройте файл и настройте параметры под вашу сборку (описание ниже).
Выберите плату и порт
Инструменты → Плата → ваша плата. Инструменты → Порт → COM-порт.
Загрузите
Кнопка «Загрузка» в Arduino IDE. Дождитесь завершения.
Если вы вносите изменения в настройки скетча – после прошивки нужно сделать «Сброс настроек», чтобы настройки применились.
Если не хватает памяти
Отключайте функции в таком порядке (от наименее важных):
- LOGGER – занимает больше всего
- BRRANIMIR – если десульфатация не нужна
- RESIST – если не нужен замер сопротивления
- DISCHAR – если не нужен разряд и КТЦ
- VKORRECT – вырезать калибровку напряжения БП (см. ниже)
Чтобы убрать калибровку напряжения БП и сэкономить память:
- Рассчитайте значение:
REF = 5 * VKORRECT - Впишите результат в
REF– напряжение будет рассчитываться с учётом калибровки - Закомментируйте строку:
//#define VKORRECT
Первая прошивка
Не нужно разбираться во всех параметрах сразу. При первой прошивке измените только то, что зависит от вашего оборудования. Остальное оставьте как есть – значения по умолчанию безопасны и подходят для большинства сборок.
Что изменить перед первой прошивкой
Откройте файл 1_User_Setup.h и проверьте эти параметры:
| Параметр | Что указать | По умолчанию |
|---|---|---|
INTERFACE | Язык дисплея: русский, английский или транслит | 1 (английский) |
ADDRDISP | Адрес дисплея: 0x27 или 0x3F | 0x27 |
DISPLAYx / DISPLAYy | Размер дисплея: 16×2 или 20×4 | 16×2 |
ENCBUTT | Что установлено: энкодер, кнопки или и то и другое | 2 (энкодер + Пуск + Стоп) |
SPEAKER | Тип звукового сигнала: пассивный или активный | 1 (пассивный) |
POWER | Напряжение вашего блока питания (В) | 24 |
| Модули | Отключите то, чего нет в сборке: FAN, PROT, DISCHAR и т.д. | Все включены |
SENSTEMP1 | Датчик температуры Q1: DS18B20, NTC или не установлен | 1 (DS18B20) |
Параметры SHUNT, OHMS и другие калибровочные значения можно не менять – значения по умолчанию безопасны. Точные значения вы получите после калибровки.
После первой прошивки
Сделайте сброс настроек
Зажмите энкодер при включении устройства. Повторите 3–4 раза, чтобы все настройки применились.
Проверьте работу
Убедитесь, что дисплей показывает текст (не квадраты), кнопки и энкодер работают, INA226 определяется (нет ошибки на экране).
Выполните калибровку
Следуйте инструкции в разделе Калибровка. Запишите полученные значения SHUNT и OHMS.
Впишите значения калибровки и донастройте конфиг
Откройте 1_User_Setup.h, впишите полученные SHUNT и OHMS. Заодно пройдитесь по всему файлу и подкорректируйте параметры под своё оборудование:
| Параметр | Действия |
|---|---|
SHUNT, OHMS | Впишите значения, полученные при калибровке |
REF | Замерьте мультиметром напряжение на пине 5V Arduino и впишите (в мВ) |
DIV_R1, DIV_R2 | Замерьте реальные сопротивления резисторов делителя и впишите |
VKORRECT | Впишите значение после калибровки напряжения БП |
POWER | Напряжение вашего блока питания (В) |
POWER_MAX | Максимально допустимое напряжение от БП – учитывайте ёмкость конденсаторов и стабилизатор |
INAVOLTKOOF | Если INA226 завышает напряжение – уменьшите (у большинства 11870) |
FREQ_CHARGE | Убедитесь, что индекс частоты соответствует вашему микроконтроллеру (ATmega или LGT8F) |
| NTC-параметры | Если используете NTC – впишите NTCB, NTCR, NTCRS из характеристик вашего термистора |
Прошейте повторно. После прошивки – снова сделайте «Сброс настроек».
Если на дисплее квадраты вместо текста – в Arduino IDE выберите Инструменты → Processor → ATmega328P (Old Bootloader).
Файл 1_User_Setup.h
Все пользовательские настройки – в этом файле. Измените его перед загрузкой скетча.
Язык интерфейса
#define INTERFACE 1 // 0 – русский (для LCD с поддержкой кириллицы)
// 1 – английский
// 2 – транслитДисплей
#define ADDRDISP 0x27 // адрес дисплея: 0x27 или 0x3F
#define DISPLAYx 16 // столбцы: 16 или 20
#define DISPLAYy 2 // строки: 2 или 4#define TIME_LIGHT 3 // время подсветки дисплея (0–255 минут). 0 – подсветка не отключается
#define TIME_DISP 15 // время возврата на 1 экран (секунды)Управление
#define ENCBUTT 2 // 0 – только энкодер
// 1 – только кнопки
// 2 – энкодер + Пуск + Стоп
// 3 – энкодер + все кнопки#define EBSTEP EB_STEP4_LOW // тип энкодера:
// EB_STEP4_LOW – активный низкий сигнал, полный период (по умолчанию)
// EB_STEP4_HIGH – активный высокий сигнал, полный период
// EB_STEP2 – половина периода за один щелчок
// EB_STEP1 – четверть периода, а также энкодеры без фиксации#define SPEAKER 1 // 1 – пассивный спикер, 2 – активный спикерМодульные функции
ViktoRi – модульный. Каждую функцию можно включить или отключить:
#define VOLTIN 1 // замер напряжения от БП: 1 – вкл, 0 – выкл
#define FAN 1 // вентилятор: 0 – выкл, 1 – ШИМ (плавная), 2 – вкл/откл
#define PROT 1 // модуль защиты: 1 – вкл, 0 – выкл
#define DISCHAR 1 // разряд: 1 – вкл, 0 – выкл
#define RESIST 1 // замер сопротивления: 1 – вкл, 0 – выкл
#define BRRANIMIR 1 // метод Бранимира: 1 – вкл, 0 – выклПри изменении модульных параметров нужно сделать «Сброс системных настроек», чтобы они применились.
Шунт и максимальный ток
#define SHUNT 0.01 // сопротивление шунта, Ом (например 0.01, 0.00855)
#define CURR_MAX (0.08192f / (float)SHUNT) // максимальный ток рассчитывается автоматически
// при шунте 0,01 Ом: 0.08192 / 0.01 = 8,192 АЕсли нужно задать ток вручную:
//#define CURR_MAX (0.08192f / (float)SHUNT) // закомментировать
#define CURR_MAX 8.0 // раскомментировать и указать значениеМаксимальное напряжение на шунте для INA226 – 0,08192 В. Превышение может вывести INA226 из строя.
Коррекция сопротивления линии
#define OHMS 72 // сопротивление линии до АКБ (мОм, 0–255)
// 0 – INA измеряет напряжение без коррекции по токуПозволяет компенсировать падение напряжения на проводах от зарядного устройства до аккумулятора. После изменения – сбросьте калибровки.
Реле 220В / Индикатор БП (пин 10)
#define POWPIN 0 // 0 – не используется
// 1 – реле 220В
// 2 – индикатор включения БП в сетьPOWPIN 2 (индикатор БП) не работает без VOLTIN 1.
Параметры реле 220В (при POWPIN 1):
#define POW_TIME 20 // время (мин) до отключения реле, если ни один режим не включён
// и АКБ не подключен (напряжение < 2В)
#define VOLT_AKB_RELE_ON 9000 // напряжение АКБ (мВ) ниже которого включается реле 220В
#define VOLT_AKB_RELE_OFF 9500 // напряжение АКБ (мВ) выше которого отключается реле 220ВДатчик температуры силового транзистора (Q1)
#define SENSTEMP1 1 // 1 – DS18B20, 2 – NTC, 0 – не используетсяПараметры NTC для датчика Q1:
#define NTCB1 3435 // B термистора (из datasheet)
#define NTCR1 10000 // Ом – сопротивление при 25°C
#define NTCRS1 10000 // Ом – подтягивающий резистор
#define TEMPBASE1 25 // базовая температура (подкорректируйте при неточности)Датчик температуры АКБ
#define SENSTEMP2 0 // 1 – DS18B20 (только для LGT8F328P)
// 2 – NTC
// 0 – не используетсяПараметры NTC для датчика АКБ:
#define NTCB2 3435 // B термистора (из datasheet)
#define NTCR2 10000 // Ом – сопротивление при 25°C
#define NTCRS2 10000 // Ом – подтягивающий резистор
#define TEMPBASE2 25 // базовая температура (подкорректируйте при неточности)Параметр B (NTCB) берётся из характеристик вашего термистора. Неправильное значение – неправильная температура.
#define CORRECTCUR 0 // 1 – контроль мин./макс. температуры АКБ. Работает совместно с SENSTEMP2Управление вентилятором
Пороги по температуре:
#define DEG_ON 40 // температура включения вентилятора (°C)
#define DEG_OFF 36 // температура отключения вентилятора (°C)
#define DEG_MAX 60 // температура максимальных оборотов (°C)
#define DEG_CUR 70 // температура уменьшения тока заряда (°C)Пороги по току:
#define CURFAN_ON 1200 // ток включения вентилятора (мА)
#define CURFAN_OFF 900 // ток отключения вентилятора (мА)
#define CURFAN_MAX 6000 // ток для максимальных оборотов (мА)#define KULDISCHAR 0 // 0 – управление по датчику SENSTEMP1
// 1 – принудительное включение вентилятора при разрядеНапряжение блока питания
#define POWER 24 // напряжение от БП (В, целое число). Макс. 65В
#define POWER_MAX 26 // максимально допустимое напряжение от БП (17–32В)
// при превышении отключится реле 220В на 10 секундДелитель напряжения БП
#define REF 5000 // точное напряжение на пине 5V (мВ). Замерьте и впишите
#define DIV_R1 10000 // верхний резистор делителя (Ом). До 35В – 6000, до 55В – 10000
#define DIV_R2 1000 // нижний резистор делителя (Ом)
#define VKORRECT 1000 // коэффициент калибровки напряжения БП (1000 по умолчанию)После калибровки напряжения БП впишите полученное значение в VKORRECT. Можно убрать калибровку из прошивки: рассчитайте REF = 5 * VKORRECT, впишите в REF, закомментируйте строку VKORRECT.
Для платы 2.3.1
На плате 2.3.1 другие значения делителя и пин защиты:
#define DIV_R1 6200 // верхний резистор делителя (Ом)
#define DIV_R2 1000 // нижний резистор делителя (Ом)
#define BUFERPIN A6 // реле нагрузки буферного режима (D13 в V1.6.x, A6 в V2.3.1)
#define PROTECTBLOCK 13 // блокировка модуля защиты (A0 в V1.6.x, 13 в V2.3.1)
#define PROTECT A0 // управление защитным транзистором Q4 (A2 в V1.6.x, A0 в V2.3.1)Профили
#define PROFIL 9 // количество профилей пользователя (0–9)Сервис и защита
#define SERVICE 1 // доступ к изменению сервисных параметров: 1 – вкл, 0 – откл
#define GUARDTEMP 1 // уменьшение тока при перегреве Q1: 1 – вкл, 0 – откл
#define GUARDA0 0 // принудительная блокировка модуля защиты при напряжении < 5В: 1 – вкл, 0 – отклЦАП MCP4725
#define MCP4725DAC 0 // вывод значений заряда в ЦАП MCP4725: 1 – вкл, 0 – выкл
#define ADDR4725 0x60 // адрес MCP4725Логгер
#define LOGGER 0 // 0 – выключен
// 1 – Loger ViktoRi
// 2 – ULoger
// 3 – вывод для Serial Plotter
// 4 – LogiViktori#define LOGGTIME 5 // период отправки данных (1–255 секунд)
#define SERIAL_SPEED 9600 // скорость порта (9600 – оптимально)LOGGER занимает много памяти. Если хотите использовать – отключите другие ненужные функции.
Калибровка
#define KALIBROVKA 1 // 1 – стандартная калибровка от АКБ
// 2 – калибровка от внешнего стабилизированного БППри KALIBROVKA 2 на внешнем блоке питания нужно выставить строго 13 В и 2 А.
Режим БП (блока питания)
#define BP_vc // включить режим БП. Закомментируйте если не нужен
#define BP_volt 12000 // начальное напряжение (мВ)
#define BP_curr 2000 // начальное ограничение тока (мА)Снижение тока при напряжении
#define CURRENT_REDUCTION 1 // снижение тока при достижении половины макс. напряжения
// 1 – вкл, 0 – отклЧастоты ШИМ
Для ATmega328P (индексы 0–7 → 62 кГц):
#define FREQ_CHARGE 6 // 31 кГц (по умолчанию)
#define FREQ_DISCHARGE 4 // 4 кГцДля LGT8F328P при 32 МГц (индексы 0–7 → 128 кГц):
#define FREQ_CHARGE 5 // 31 кГц (по умолчанию)
#define FREQ_DISCHARGE 3 // 4 кГцРекомендуемая частота ШИМ заряда – 31 кГц. Она используется по умолчанию.
INA226
#define INAVOLTKOOF 12500 // коэффициент напряжения INA226 (мкВ)
// если INA226 завышает замер – уменьшите (у большинства 11870)Пороги заряда
#define Time_Curr_decrease 1200 // время отслеживания скорости снижения тока (сек)
#define Curr_decrease_mA -5 // если ток снижается менее 5 мА за период – завершить заряд
#define Curr_Critical_mA 200 // критическое увеличение тока – заряд отключается
#define Volt_Critical_mV -200 // критическое снижение напряжения – заряд отключается
#define Curr_off_charge 5 // ток (мА) при котором заряд прерывается (АКБ не подключен)Ассиметричный режим
#define Time_pause_assimetric 5 // пауза при переключении заряд/разряд (сек, > 0)Дозаряд
#define Volt_difference_mV 300 // разница напряжений при макс. и мин. токах (мВ)
// при достижении включается таймер
#define Time_AddCarge 1800 // таймер после достижения порога (сек)Частота шины I2C
#define WIRE_CLOCK 800000 // не рекомендуется уменьшатьНазначение пинов
Пины можно переназначить в 1_User_Setup.h. Стандартная раскладка:
Цифровые пины
| Пин | Define | Назначение |
|---|---|---|
| D2 | PUSK | Кнопка Пуск |
| D3 | PWMCH | ШИМ выход заряда |
| D4 | MINUS | Кнопка Минус |
| D5 | PLUS | Кнопка Плюс |
| D6 | STOP | Кнопка Стоп |
| D7 | ENC_S1 | Энкодер S1 |
| D8 | ENC_S2 | Энкодер S2 |
| D9 | PWMKUL | ШИМ вентилятор |
| D10 | RELAY220 | Реле 220В / индикатор БП |
| D11 | PWMDCH | ШИМ нагрузка (разряд) |
| D12 | ENC_KL | Энкодер нажатие |
| D13 | BUFERPIN | Реле нагрузки (буферный режим) |
Аналоговые пины
| Пин | Define | Назначение |
|---|---|---|
| A0 | PROTECTBLOCK | Блокировка модуля защиты |
| A1 | BUZER | Звуковой сигнал |
| A2 | PROTECT | Управление защитным транзистором Q4 |
| A3 | PIN_Q1_DS18 / PINTERM1 | Датчик температуры Q1 (DS18B20 или NTC) |
| A4 | – | SDA (дисплей + INA226) |
| A5 | – | SCL (дисплей + INA226) |
| A6 | PINTERM2 | Датчик температуры АКБ (NTC) |
| A7 | POWIN | Замер напряжения БП |
Описание модульных функций
VOLTIN – замер напряжения БП
Измеряет напряжение от БП через резисторный делитель. Нужен для контроля питания и защиты от перенапряжения.
Зависимости: необходим для POWPIN 2 (индикатор БП).
FAN – вентилятор
Управляет охлаждением силового модуля. В ШИМ-режиме скорость плавно растёт с температурой.
PROT – модуль защиты
Управляет схемой защиты от переполюсовки и короткого замыкания.
DISCHAR – разряд
Включает возможность разряда и режим КТЦ. Требует нагрузки (лампа или резистор).
RESIST – сопротивление
Измерение внутреннего сопротивления АКБ и расчёт пускового тока.
BRRANIMIR – метод Бранимира
Заряд малыми токами для растворения сульфатов.
LOGGER – логирование
Отправляет данные в COM-порт для подключённого логгера. Подробнее о логгерах и их различиях – в разделе Логгер. Скорость и период настраиваются через SERIAL_SPEED и LOGGTIME.
POWPIN – реле 220В / индикатор БП
Управляет пином D10. При значении 1 – автоматическое управление реле 220В. При значении 2 – индикатор наличия питания.
Параметры оборудования
Перед прошивкой проверьте:
- Сопротивление шунта (
SHUNT) – для точности тока - Сопротивления делителя (
DIV_R1,DIV_R2) – для точного напряжения БП - Напряжение на 5V Arduino (
REF) – для калибровки АЦП - Частота ШИМ (
FREQ_CHARGE) – зависит от дросселя (рекомендуется 31 кГц)