Найти тему
Мастерю понемногу.

Новый скетч 0.9.8 для зарядника. Большая оптимизация для 8 битного микроконтроллера.

Всем большой привет!

Наконец-то я доделал и выложил на Яндекс диск новый скетч для зарядника на Ардуино - ViktoRi. Основная идея в этой версии - максимальный отказ от чисел формата "float". Все таки Атмега 328 является 8-битным микроконтроллером и работать с простыми числами ему гораздо легче и памяти они занимают гораздо меньше. Я постарался заменить "float" на "int" везде где только возможно. Модифицировал библиотеку GyverINA, для работы с INA226, так чтобы показания напряжения, тока и мощности выдавались в "int" (вместо 12,56В - 12560 мВ). Два байта вместо четырех. Перед выводом значений на дисплей производится конвертирование значений во "float". Это позволило существенно сократить место в памяти оперативной и постоянной. Появилось больше места для новых дополнений. Это оказалось не так просто как я предполагал сперва. Заменив большинство переменных на "int" я запустил компиляцию.... и ошибки посыпали как горох из рога изобилия. Много времени я потратил на их исправление. Но все же прошивка скомпилировалась, загрузил Ардуино и .... понеслось, новая порция ошибок. Жуть!... Потребовалось еще больше времени чтобы выловить и исправить соответствие типов переменных. Но я все же справился. Доволен как слон ))).

Типы данных и из размер в байтах
Типы данных и из размер в байтах

До версии прошивки 0.9.8 большинство данных хранилось в переменных типа "float" и каждая занимала 4 байта памяти. Теперь так:

  • напряжение в милливольтах тип "uint16_t" от 0 до 65535 мВ (2 байта);
  • ток в миллиамперах тип "int16_t" от -32768 до 32768 мА (2 байта);
  • Ампер/часы и Ватт/часы тип "uint32_t" от 0 до 4294967295 мАч, мВтч (4 байта);

Для преобразования во "float" напряжение и ток разделить на 1000 (12560/1000=12,56В), а Ампер/часы и Ватт/часы на 1000000.

Я полностью переписал основную функцию заряда. Структура программы стала более стройной и понятной. Более четко разделил Предзаряд, Заряд и Дозаряд.

Самые главные нововведения это режим Предзаряда и Дозаряда с плавными изменениями тока заряда.

Предзаряд - необходим для плавной раскачки сильно разряженного аккумулятора. В основном меню выставляем нужную емкость аккумулятора, тип и напряжение. В настройках нужно включить режим Предзаряда (по умолчанию он всегда включен). После нажимаем Старт из основного меню - запускаем заряд. Для аккумулятора на 60Ач 12В Pb Ca/Ca заряд начинается с током 200мА который плавно поднимается до 600мА (1:3) в течении 256 секунд. По истечении времени ток сбрасывается до 200мА. И так по кругу. Когда напряжение, при минимальном токе, достигнет установленного в настройках (Напряжение предзаряда), через каждые 4 минуты (1024 сек) коэффициент тока будет увеличиваться на 1, до тех пор пока ток не достигнет максимально установленного. На это может потребоваться от 3 до 6 часов в зависимости от состояния аккумулятора. Когда при минимальном токе напряжение достигнет установленного (14,7В) предзаряд отключается и заряд продолжается со стабилизацией по напряжению со снижением тока до установленной величины. Когда ток заряда снизится до установленной величины (180мА) то включается таймер на 900 секунд (60 * 15). По истечении которого заряд завершается. Если за это время ток еще снизился то таймер обнуляется а минимальный ток заряда приравнивается текущему току.

Дозаряд - нужен для дополнительного заряда аккумулятора если аккумулятор уже "в возрасте", "поживший" и основной заряд не может полностью растворить образовавшийся сульфат с пластин. И для перемешивания электролита для выравнивания плотности внизу и вверху банок. Алгоритм дозаряда такой - включается минимальный ток (600мА для акб. на 60Ач) когда напряжение стабилизируется включается максимальный ток (1,2А) плавно повышается до максимального установленного в настройках, когда напряжение стабилизируется включается минимальный ток. Когда при минимальном токе напряжение достигнет установленного (16,2В) то переключение минимального/максимального тока отключается. И устанавливается таймер на 900 секунд (60 * 15). Если в течении этого времени ток не уменьшается то дозаряд отключается. Если ток уменьшился то таймер обнуляется а минимальный ток заряда приравнивается текущему току. Заряд завершается по истечении времени таймера.

Предыдущие статьи:

  • Умный зарядник автомобильных аккумуляторов на Ардуино. Разработка часть 2. Электрическая схема.
  • Умный зарядник автомобильных аккумуляторов на Ардуино.
  • Зарядник Ардуино. Новая прошивка - новые возможности.

Яндекс диск с материалами по данному заряднику.