Skip to Content
ДокументацияПрошивкаПрошивка и настройка скетча

Прошивка и настройка скетча

При прошивке обязательно отключите:

  1. Сеть 220В
  2. Клеммы от аккумулятора
  3. Провод данных от логгера (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. Дождитесь завершения.

Если вы вносите изменения в настройки скетча – после прошивки нужно сделать «Сброс настроек», чтобы настройки применились.

Если не хватает памяти

Отключайте функции в таком порядке (от наименее важных):

  1. LOGGER – занимает больше всего
  2. BRRANIMIR – если десульфатация не нужна
  3. RESIST – если не нужен замер сопротивления
  4. DISCHAR – если не нужен разряд и КТЦ
  5. VKORRECT – вырезать калибровку напряжения БП (см. ниже)

Чтобы убрать калибровку напряжения БП и сэкономить память:

  1. Рассчитайте значение: REF = 5 * VKORRECT
  2. Впишите результат в REF – напряжение будет рассчитываться с учётом калибровки
  3. Закомментируйте строку: //#define VKORRECT

Первая прошивка

Не нужно разбираться во всех параметрах сразу. При первой прошивке измените только то, что зависит от вашего оборудования. Остальное оставьте как есть – значения по умолчанию безопасны и подходят для большинства сборок.

Что изменить перед первой прошивкой

Откройте файл 1_User_Setup.h и проверьте эти параметры:

ПараметрЧто указатьПо умолчанию
INTERFACEЯзык дисплея: русский, английский или транслит1 (английский)
ADDRDISPАдрес дисплея: 0x27 или 0x3F0x27
DISPLAYx / DISPLAYyРазмер дисплея: 16×2 или 20×416×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Назначение
D2PUSKКнопка Пуск
D3PWMCHШИМ выход заряда
D4MINUSКнопка Минус
D5PLUSКнопка Плюс
D6STOPКнопка Стоп
D7ENC_S1Энкодер S1
D8ENC_S2Энкодер S2
D9PWMKULШИМ вентилятор
D10RELAY220Реле 220В / индикатор БП
D11PWMDCHШИМ нагрузка (разряд)
D12ENC_KLЭнкодер нажатие
D13BUFERPINРеле нагрузки (буферный режим)

Аналоговые пины

ПинDefineНазначение
A0PROTECTBLOCKБлокировка модуля защиты
A1BUZERЗвуковой сигнал
A2PROTECTУправление защитным транзистором Q4
A3PIN_Q1_DS18 / PINTERM1Датчик температуры Q1 (DS18B20 или NTC)
A4SDA (дисплей + INA226)
A5SCL (дисплей + INA226)
A6PINTERM2Датчик температуры АКБ (NTC)
A7POWINЗамер напряжения БП

Описание модульных функций

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 кГц)
Last updated on