Програма для контролеру та її опис
опис пристрою

Ця програма публікується на умовах GNU GPL v3 ліцензії.
Проект:
sun_chargeV1.2.zip

hex file з моїм налаштуванням (те, що я записав у свій примірник зарядки) (clk - Internal RC-oscillator 2 MHz BOD - 4V):
sun_chargeV1.2.hex

Опис програми:
У файлі battery_calc.h зібрані константи та макроси, які задають параметри батарей та базові параметри схеми.
Я намагався, щоб найменування параметрів відображало їх призначення. Якщо бажаєте щось змінити у напругах зарядки, порогах індікації та таке інше - дивиться цей файл.

Робота програми:
Основний цикл програми виконує єдину команду - переводить процесор до режиму сна. Уся обробка проводиться у перериваннях по таймеру. Період виклику обробника переривань - 0,13 сек.
У обробнику спочатку вимірюється напруга на мінусовому полюсі акумулятору і, якщо вона виявляется у негативній зоні, то робиться висновок, що сонячна панель зараз не працює і живлення йде від акумулятору(main.c стр 80-89). Далі вимирюється напруга на плюсової клемі акумулятору, від неї віднімається значення напруги на мінусової клемі акумулятору, фільтрується і це все а також значення температури передається у функцію control_battery (control_battery.с, стр 49-79). Ця функція перевіряє, чи працюемо без акумулятору, а якщо з акумулятором, то 6В або 12В акумулятор. Перевірка щодо наявності акумулятору робиться по оцинюванню дисперсії напруги на акумулятору за 40 відліков напруги (функція voltageDispersion). Якщо акумулятора немає, то коливання напруги будуть велики, дісперсія напруги буде також вище порогу прийняття рішення, що працюємо без акумулятору. Якщо ж акумулятор є, то коливань напруги майже не буде і дісперсія також буде майже нульова.
Функція пошуку точки максимальної потужності: у першому блоку оператора if (main.c стр 185-231)визначаются знаки похідних функцій тривалості імпульсу ШИМ та струму через ключовий транзистор у проміжку між попереднім кроком та наступним. Аналізується співвідношення цих знаків та приймається рішення про напрямок змінення тривалості импульсу ШИМу. Якщо визначається, що перейшли за точку максимуму (це визначається по зміні знаків похідних), то у зворотньому напрямку робиться не повний крок, а півкроку, тому, врешті решт, функція почне робити півкроки навколо точки максимуму.
Наступний блок оператора if (main.c стр 235-242) працює, коли вихідна напруга підходить до максимальної коли працюємо без акумулятору. Останній блок if (main.c стр 244-252) обробляє випадок, коли напруга перевищує максимально допустиму, або струм перевищує 1А (це на випадок зарядки 6В акумулятору від 12В).
Окремо треба сказати про функцію індікації рівня струму. Для індікації використовується найбільший вимір струму протягом 4сек. Це так зроблено тому, що мобільний телефон при 70% рівня заряду батарєї починає кожну секунду вимикати струм і перевіряти напругу на батарєї. Без функції індікації максимального рівня струму це виглядає як раптовє зниження зарядного струму, світлодіод індікації струму то мерехтить, то гасне, при чому це повторюється кожну секунду. Не дуже приємне враження. Тому, для впевненого виставлення панелі перпендікулярно сонцю, добавив виделення максимуму струму на протязі 4-х секунд та індікацію самє цього виміру.

Наступна версія програми з автоматичним перезапуском процесу заряду телефону після його призупинення (наприклад у хмарну погоду, коли сонце то є, то ховається за хмари). Це при користуванні без буферного акумулятору.

sun_chargeV1.3.zip

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License