Главная » Источники питания » Тестер аккумуляторов для одиночных LiPo элементов

Тестер аккумуляторов для одиночных LiPo элементов

На модельном аэродроме всегда необходимо проверять уровень заряда аккумуляторов. Для больших моделей, которые работают с 2-мя и более LiPo-элементами (2S-8S), соединенными последовательно, можно купить за небольшие деньги готовые тестеры аккумуляторов.

Большинство же небольших моделей, такие как Blade mSR X или Blade Nano CP X, летают с одним LiPo-элементом, и, к сожалению, нет простого способа их проверить.

Этот небольшой модуль был специально разработан для тестирования одиночных LiPo-элементов. Он показывает в общей сложности 3 уровня заряда путем включения или мигания 2 разноцветных светодиодов.

Тестер аккумуляторов для одиночных LiPo элементов - схема

На аэродроме этого вполне достаточно, чтобы отличить заряженную батарею от разряженной. В следующей таблице показаны возможные состояния:

Эта схема очень простая и, по сути, состоит из микроконтроллера ATtiny13A. Через контакты +Akku и -Akku на схему подается питание, в то же время делитель напряжения, состоящий из 2-х резисторов R1 и R2, снижает напряжение батареи до значения ниже 1,1 В, которое считывается АЦП микроконтроллера. Это значение считывается на выводе PB3 каждые 200 мс, а результат выводится через два вывода — PB0 и PB1.

К выводам PB0 и PB1 подключены 2 сверхярких светодиода: D1 (зеленый) и D2 (красный), и, поскольку всегда активен только один светодиод, то здесь достаточно одного токоограничивающего резистора R3.

Последний компонент конденсатор C1 — это обязательный резервный конденсатор, который предотвращает кратковременные падения напряжения, поэтому его следует размещать как можно ближе к выводам питания микроконтроллера.

На этом рисунке показан полностью собранный тестер аккумуляторной батареи. Все детали размещены на крошечной макетной плате размером 17,5 х 10 мм. В верхней части платы вы можете увидеть микроконтроллер IC1, который был впаян напрямую без гнезда, конденсатор C1 и два светодиода D1 (внизу) и D2 (вверху). Тестируемый аккумулятор подключается через разъем слева.

На нижней стороне платы находятся не только все соединения, но и 3 резистора в SMD-исполнении (R1 слева, R2 сверху и R3 справа). Это не только упрощает монтаж, но позволяет оптимально использовать пространство.

Программное обеспечение тестера аккумуляторов написано на C и, как и схема, очень наглядное. Сначала объявляются некоторые переменные, например, пороговые значения для оценки напряжения батареи, а также коэффициент для делителя напряжения R1 / R2.

#include <avr/io.h>
#include <util/delay.h>
float vfactor = 4.3;                    // Коэффициент делителя напряжения при 3,3 кОм / 1 кОм рассчитывается по следующей формуле: Коэффициент = (R1 + R2) / R2
float vlow = 3.8;                       // Пороговое значение напряжения для индикатора батареи мигает красным
float vhigh = 4.0;                      // Порог напряжения для индикатора батареи зеленый
float volt;                             // определенное значение напряжения
uint8_t ledstat = 0;                    // последнее состояние красного светодиода, требуется для мигания

int main(void)
{
  DDRB =  (1 << PORTB0) | (1 << PORTB1) | (1 << PORTB2) | (1 << PORTB4) | (1 << PORTB5);  // Установите PB0-PB2, PB4, PB5 на выход, PB3 на вход
  PORTB = (1 << PORTB0) | (1 << PORTB1);                                                  // Установите PB0 и PB1 на высокий уровень (светодиоды выключены)
  ADMUX = (1 << REFS0) | (1 << ADLAR) | (1 << MUX1) | (1 << MUX0);                        // Внутреннее опорное напряжение 1,1 В, значение АЦП выровнено по левому краю, выберите ADC3 (PB3)
  ADCSRA = (1 << ADEN) | (1 << ADSC) | (1 << ADATE) | (1 << ADPS2) | (1 << ADPS1);   // Активировать АЦП, начать преобразование, предварительный делитель = 64 (75 кГц)
  ADCSRB = 0;				                                           // Триггер - режим свободного хода
  DIDR0 = 1 << ADC3D;		                                                   // Деактивировать цифровой вход ADC3 (PB3)

    while(1)
    {
        _delay_ms(200);                                                                     // Преобразование АЦП каждые 200 мс, также определяет частоту мигания
        volt = ADCH * 1.1 * vfactor / 256;                                                  // Рассчитать значение напряжения
        ledstat = PORTB;                                                                    // Сохраните статус PortB (особенно красный светодиод)
        PORTB = (1 << PORTB0) | (1 << PORTB1);                                              // выключить оба светодиода
        if (volt > vhigh) PORTB = PORTB & ~ (1 << PORTB1);                                  // если напряжение в зеленой зоне -> включить зеленый светодиод
        else                                                                                // иначе
        {
            PORTB = PORTB & ~ (1 << PORTB0);                                                // Включитт красный светодиод
            if (volt < vlow)                                                                // если пониженное напряжение
            {
                ledstat = ledstat ^ (1 << PORTB0);                                          // Инвертировать последнее состояние красного светодиода
                PORTB = (PORTB & ~ (1 << PORTB0)) | ledstat;                                // сбросить красный светодиод (мигать)
            }
        }
    }
}

Эти значения можно изменить, чтобы тестер можно было использовать и для других диапазонов напряжения, при условии, что максимальное рабочее напряжение микроконтроллера 5,5 В не будет превышено. Следует заметить, что нижний предел напряжения составляет 1,8 В — здесь срабатывает обнаружение пониженного напряжения микроконтроллера и перевод его в состояние сброса.

Основная часть программы начинается с инициализации портов ввода / вывода и аналого-цифрового преобразователя (АЦП). Последний настроен таким образом, что он постоянно измеряет напряжение на входе PB3, используя внутреннее опорное напряжение 1,1 В.

В следующем программном цикле система ожидает 200 мс, затем считывает старший байт АЦП и использует его для определения значения приложенного напряжения. Затем оба светодиода выключаются (высокий уровень на PB0 и PB1), значение напряжения сравнивается с пороговыми значениями и, в зависимости от этого, выход PB0 или PB1 устанавливается на низкий уровень для включения соответствующий светодиод.

Если напряжение ниже нижнего порогового значения, последний сохраненный статус красного светодиода инвертируется. При продолжительности цикла 200 мс это приводит к миганию с частотой 2,5 Гц.

При программировании необходимо учитывать фьюзы. Они должны быть установлены следующим образом:

Скачать прошивку (2,4 KiB, скачано: 149)

Оставить комментарий

Ваш email нигде не будет показан. Обязательные для заполнения поля помечены *

*