Pingvin писал(а):
Там и буду голову ломать...
Прикрутил зарядное устройство встроенное в тагер.
Вопрос знатокам, допустимо ли заряжать Li акб, не разрядив полностью ?
Например зарядили - поиграли разрядили не до минимальной границы, возможно совсем чуть чуть.
И снова ставим на зарядку.
Или второй вариант, тагер лежит на зарядке: зарядился, АКБ автоматика отключила от зарядки, напряжение в сети ненамного пропало, тагер лежит тратит АКБ считает что он в игре,если выключатся то будет странно для пользователя. Потом сетевое снова появляется, АКБ снова не максимум, опять заряжать ?
Думаю вводить "моточасы", но надо ли ?
Код:
// Автомат логики зарядки АКБ
void LogicChargeAkb(void) {
switch (StateCharge)
{
case WAIT_CHARGE: // Ждём запроса на зарядку
// придумать вариант старта
if ( btReload > 0) { // кнопку надо подержать не менее 1 сек
// начинаем проверку подключенности питания зарядки
charge_off(); // работа только от АКБ
StateCharge = START_CHARGE;
}
break;
case START_CHARGE:
charge_off();
charge_cnt ++; // отрабатываем паузу в секундах
if (charge_cnt > 2) { // время выдержки АКБ кончилось (2сек)
charge_cnt = 0;
adc_off_chg = adc_in; // замерить и запомнить напряжение АКБ
// проверить напряжение на АКБ
if (adc_off_chg < akb_max) {
// меньше порога - включаем подачу зарядного тока
// Индикация через мигание диода ТХ
charge_on();
StateCharge = TEST_CHARGE;
} else {
// больше порога - хватит заряжать
// остановку по таймауту тоже можно добавить
StateCharge = WAIT_CHARGE;
}
}
break;
case TEST_CHARGE: // меряем напряжение на АКБ
charge_on();
charge_cnt ++; // отрабатываем зарядку в секундах
if (charge_cnt > 3) { // время выдержки АКБ под зарядкой (3сек)
charge_cnt = 0;
adc_on_chg = adc_in; // замерить и запомнить напряжение АКБ
if (adc_on_chg > adc_off_chg) {
// зарядный ток есть, продолжаем
StateCharge = START_CHARGE;
} else {
// зарядного тока нет(выключили) или АКБ не принимает заряд
// останавливаем зарядку
StateCharge = WAIT_CHARGE;
}
}
break;
} //swich end
}