Измерение заряда батарейки - кто делал? Нужен совет.

Обсуждаем контроллеры компании Atmel.
Ответить
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18676
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

коллеги, наверняка вы в курсе, как без внешних компонентов (всяких делителей) можно измерять уровень питающего напряжения: в качестве "опорного" для ADC включаем AVCC, а "измеряем" напряжение источника BANDGAP; поскольку источник BANDGAP достаточно стабилен, то показания ADC будут зависеть только от уровня AVCC.

но это в теории. а на практике так кто-то делал? я столкнулся с тем, что то ли из-за шума на AVCC, то ли еще по неизвестно какой причине, показания скачут просто неприемлемым образом! сделав три замера с интервалом в 1 секунду можно получить значение "заряда" батарейки в 90%, 30% и 75%!

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

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

применял лично практически (делал управление сведодиодом ультрафиолетовым для зубников) - отлично работало. Теорию брал у практика с сайта klim.in.ua в 2011г., который сейчас вроде мертвый - там был фонарик светодиодный sepic на тини25, где это применялось + сама теория. Оттуда (с сайта):
Спойлер
В современных микроконтроллерах AVR есть недокументированная возможность, про которую почему-то мало пишут в интернетах. Есть возможность в качестве опорного напряжения выбрать AVCC, а в качестве измеряемого – опору Vbg (обычно, 1.1В) В таком случае имеем несколько плюсов: не требуется постоянная утечка тока на делителе, экономится, как минимум одна нога (что очень критично в восьминогих tiny-контроллерах) и не требуется никаких внешних компонентов.
Пока что этот вариант был опробован на МК ATTiny25V. Для вычисления напряжения питания можно воспользоваться слудующей формулой

Uavcc = 1.1*1024/ADC

Конечно, тут требуется калибровка, потому можно не заниматься вычислениями, а просто забить в EEPROM несколько значений, соответствуюзих различным уровням напряжения батареи.
Еще одно важное замечание. Переключение мультиплексора АЦП в таком режиме происходит не сразу, из-за чего первые 5-6 результатов измерения будут недостоверными (в режиме Free-Run). У меня обычно АЦП работает в непрерывном режиме с усреднением. И при переключении входов отбрасываются 1-2 выборки, но в данном случае пришлось отбрасывать 8 первых выборок.
Осталось проверить, как это будет работать на других контроллерах.
есть с того сайта исходники кодевижн, для фонарика тоже есть кодевижн, орел (плата), протеус. Надо?
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18676
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

oleg110592 писал(а):Переключение мультиплексора АЦП в таком режиме происходит не сразу, из-за чего первые 5-6 результатов измерения будут недостоверными (в режиме Free-Run)
вот тут парадокс.
для экономии энергии free-run делать нельзя - это раз.
первые 5-6?! это два - не правда. во всяком случае в моих опытах любое количество раз дает непредсказуемо разные результаты. ЛЮБОЕ. я делал скользящее среднее на 16 и 32 выборки - даже в этом случае иногда проскакивает значение на 20-25% отличающееся от среднего!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 25393
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

Батарейки измеряю через встроенный опорник регулярно (3 проекта точно есть). Но не на AVR. Собственно для ответ на вопрос "почему не работает" нужно сначала перевести МК на стационарное питание (не от батарейки) и измерять прямые показания АЦП, а не пересчетные проценты.
Конечно желателен дебаг, но можно вывести ШИМ и смотреть осциллографом дьюти равное значению АЦП.
После этого можно о чем то говорить.
ЗЫ. Даю 50% на разряженную вконец батарею, которая плохо блокирована и при пуске из слипа проваливается и не успевает выйти на номинальное значение. Какая частота осциллятора МК?
Реклама
Эиком - электронные компоненты и радиодетали
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18676
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

КРАМ писал(а):Какая частота осциллятора МК?
32768 гц
КРАМ писал(а):Даю 50% на разряженную вконец батарею
Li-Po аккумулятор 120 мач, китайский. я бы не сказал, что никудышний: нечаянно замкнул на макетке питание - перемычка поплавилась...
КРАМ писал(а):пуске из слипа проваливается и не успевает выйти на номинальное значение
формально слипа нет, т.к. на такой частоте МК не успевает заснуть, как пора просыпаться - и это удивительно, но факт! потребление без сна 30 мкА, со сном - 35 мкА :)))

возможные причины мне умозрительно понятны - просадки и т.п., все как бы логично. что делать - вот в чем вопрос. я ж говорю: делаю скользящее среднее на 32 отсчета! и не помогает.

Добавлено after 2 minutes 12 seconds:
кстати, при зарядке аккума индикация процента заряда идет непрерывно, и выглядит это весьма оригинально: секунд надцать показывает 80%, а потом другие надцать 40%, потом сразу 90% с минуту, а потом бац - снова 40%... хрень, короче
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 25393
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="ARV",url="/forum/viewtopic.php?p=3847727#p3847727"]возможные причины мне умозрительно понятны - просадки и т.п., все как бы логично. что делать - вот в чем вопрос. я ж говорю: делаю скользящее среднее на 32 отсчета! и не помогает.[/uquote]
Еще раз. Не нужно ничего считать. Нужно просто выводить значения АЦП. Усреднение при наличии проблем вносит неопределенность.
Вообще то, подобные вещи делают с использованием осциллографа, как минимум. А лучше еще и в дебаге.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

[uquote="ARV",url="/forum/viewtopic.php?p=3847703#p3847703"]для экономии энергии free-run делать нельзя - это раз.[/uquote]
для фонарика до лампочки - он включается кнопкой, смотрим напряжение, если мало - в сон, можно еще дополнительным светодиодом подмигнуть. Нажимать кнопку желание до подзарядки должно отпасть.
У себя глянул - вообще первые 32 измерения отбрасываются, следующие 32 измерения суммируются и сдвигаются нужное количество раз (асм.).
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18676
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

да я могу прямо на дисплей выводить значения АЦП... не проблема. вы лучше скажите технологию: куда смотреть, какие предположения строить? потому как я основные предположения и проверки уже делал... ну, что на ум пришло: смотрел шум по питанию осциллографом, батарейку замерял приличным тестером...
oleg110592 писал(а):для фонарика до лампочки
вот то-то и оно... я разве что первые 32 измерения не отбрасывал пока. но что-то мне подсказывает, что причина в ином.

я делаю так.
0. исходно АЦП выключено (регистром управления питанием PRR).
1. когда надо змерить - включаю питание АЦП,
2. разрешаю его работу,
3. настраиваю режим однократного замера,
4. делаю N замеров, усредняя результат,
5. выключаю питание АЦП,
6. индицирую полученное значение.
поскольку тактовая частота мизерная, никаких пауз между перечисленными этапами не делаю. тактовая АЦП такая же, как и у ядра, т.е. длитель не включаю. ADMUX настроен единожды при инициализации программы и не трогается более.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

на всякий как делал автор sepic фонарика (не я) - накрутил уж, там, правда ток светодиода еще замеряется
Спойлер

Код: Выделить всё

// -----------------------------------------------
// ADC interrupt service routine
#define FIRST_ADC_INPUT 7
#define LAST_ADC_INPUT 7
#define ADC_VREF_TYPE 0x80
#define ADC_FILTER_COUNT 8
volatile bit adcComplete;
unsigned char adcFilter;
unsigned int adcCurrentValue;
volatile unsigned int adcAvgValue;
interrupt [ADC_INT] void adc_isr(void)
{
    if (adcFilter<=ADC_FILTER_COUNT)
        adcCurrentValue+=ADCW;
    if (!(--adcFilter))
    {           
            adcComplete=1;
            adcAvgValue=adcCurrentValue / ADC_FILTER_COUNT;
            adcCurrentValue=0;
            adcFilter = ADC_FILTER_COUNT+1;
            if (!(--batteryTimer))
            {   
                ADMUX= 12; //
                // Delay needed for the stabilization of the ADC input voltage
                delay_us(10);
                // Start the AD conversion
                ADCSRA|=0x40;    
                adcFilter= ADC_FILTER_COUNT+8;
                batteryTimer=200;
            } else
            if (batteryTimer==199)
            {   
                adcComplete=0;
                battery = 5;
                
                while ((battery) && (adcAvgValue> batteryLevels[5-battery]))
                    battery--;
                ADMUX =  (7 | (ADC_VREF_TYPE & 0xff));
                delay_us(1);
                adcFilter= ADC_FILTER_COUNT+8;

                ADCSRA|=0x40;
            }     
    }
} 
Друг Кота
Аватара пользователя
Сообщения: 25393
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="ARV",url="/forum/viewtopic.php?p=3847743#p3847743"]да я могу прямо на дисплей выводить значения АЦП... не проблема. вы лучше скажите технологию:[/uquote]
Какую еще "технологию", когда вы делаете кучу действий вместо того, чтобы вообще все убрать, включая манипуляции с включением-выключением АЦП и ПРОСТО ИЗМЕРЯТЬ на непрерывно работающем МК встроенный опорник, выталкивая значения АЦП на индикацию?
И только убедившись в том, что показания стабильны в таком простом режиме, переходить к пошаговому добавлению функционала (сначала включать-выключать АЦП, потом падать в слип и лишь потом считать проценты, а в самом конце усреднять)
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18676
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

КРАМ писал(а):И только убедившись в том, что показания стабильны в таком простом режиме, переходить к пошаговому добавлению функционала (сначала включать-выключать АЦП, потом падать в слип и т.д.)
хорошо, вечерком далеко от компа не отходите - я отчитаюсь о результатах :)

а пока что задам вопрос: мне нужно измерять именно в том режиме, как я накрутил, а вы говорите - провести тест в идеальном режиме. я не могу понять, чем мне это поможет? при любом раскладе (хоть показания будут стабильны, хоть будут продолжать скакать) ответа на вопрос "что делать?" я так и не получу...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 25393
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="ARV",url="/forum/viewtopic.php?p=3847761#p3847761"]я не могу понять, чем мне это поможет? при любом раскладе (хоть показания будут стабильны, хоть будут продолжать скакать) ответа на вопрос "что делать?" я так и не получу...[/uquote]
Сразу видно, что к схемотехнике вы не имеете никакого отношения.
Пока что я не верю в адекватность представленного результата из-за кучи лишних действий, которые могут сами по себе создать десятки разных причин с таким конечным результатом.
Я не собираюсь гадать на кофейной гуще, пользуясь вашими заверениями в том, что вы написали адекватный код.
Задача проста, но это СИГНАЛЬНАЯ задача и формально безупречный код может не работать совершенно из-за неверного его взаимодействия с диаграммами работы устройства, неверно ожидаемых размерностей и много чего еще.
Единственный надежный способ обнаружить проблему - упрощение задачи до предела и разделение тем самым причин возникшей ситуации.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18676
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

КРАМ писал(а):разу видно, что к схемотехнике вы не имеете никакого отношения
какое-то все же имею... :dont_know:
ладно, попробую сделать по-вашему, ибо это и в самом деле то, чего я еще не пробовал... ну и отброс первых N значений тоже не пробовал.
вечером проверю
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

может экземпляр кривой?
или может попробовать АЛУ отключать на время измерений (усыплять)
ещё может попробовать на более высоких тактовых и с бо́льшим делителем попробовать чтобы исключить влияние импульсных помех (частота хоть низкая, но фронты то по прежнему резкие)
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18676
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Ivanoff-iv писал(а):АЛУ отключать на время измерений (усыплять)
попробую, если ничего больше не поможет. накладно это все на моих частотах...
Ivanoff-iv писал(а):попробовать на более высоких тактовых
а вот это и пробовать не буду - тактовая у меня только такая, как я написал. 30 мкА - это важно.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 25393
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="ARV",url="/forum/viewtopic.php?p=3847832#p3847832"]а вот это и пробовать не буду[/uquote]
Если отвлечься от скважности активной работы и рассмотреть общий случай, то повышение тактовой частоты в активной работе приводит к уменьшению среднего потребления за счет того, что рост тока потребления нелинейно зависит от частоты из-за ненулевого потребления на низких тактовых. То есть время исполнения кода в активном режиме падает быстрее с ростом частоты, чем увеличивается ток потребления. Так же никто не отменял динамическую редукцию скорости путем переключения осцилляторов на лету.
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

если не сильно большая точность нужна... я както делал фонарик на тини 2313 с контролем батареи, замер осуществлялся по скорости заряда конденсатора от батарейки через резистор (в этой тине есть компарктор с опорой и регистр захвата на 16 битном таймере) вот только нужен конденсатор с хорошим ТКЕ...
потребление такой схемы между замерами =0, т.к. конденсатор пост. ток не пропускает
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Друг Кота
Аватара пользователя
Сообщения: 25393
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=3847842#p3847842"]замер осуществлялся по скорости заряда конденсатора от батарейки через резистор[/uquote]
Если в МК есть опорник, то это совершенно лишняя сущность и лишняя комплектация.
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

Перрреведи... :)
в смысле не понял, какая сущность лишняя и как обойтись без неё?
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Собутыльник Кота
Аватара пользователя
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Сообщение serg_svd »

ARV, не стоит этим методом пользоваться. Он весьма не точный, так величина BANDGAP хоть и заявлена в даташите, но ее величина нестабильна и сильно зависит от питающего напряжения, которое Вы собственно говоря, и пытаетесь измерять. Я подобный вопрос поднимал на этом форуме. С ходу не найду. И если не ошибаюсь, то Вы мне еще и помогали советами. Я тогда помучался прилично и забросил эту идею. Хоть и промелькнула такая идея в интернете и многие сайты ее перепечатывают, но что-то никто не применяет. даже на нашем форуме я не припомню таких схем, где бы применялся этот метод.
Гораздо надежнее измерять обычным методом, подав напряжение с батареи на делитель напряжения. При этом, для экономии заряда батареи, нужно выделить еще один порт МК, который бы управлял подачей напряжения батареи на делитель через полевик только в моменты измерения. Так как использовать порт микроконтроллера напрямую уже нельзя. Появляется дополнительная погрешность.
На крайнем конкурсе была статья про карманную метеостанцию. Её автор так и измерял напряжение на батарее.
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Ответить

Вернуться в «AVR»