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

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

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

[uquote="serg_svd",url="/forum/viewtopic.php?p=3847860#p3847860"]Он весьма не точный, так величина BANDGAP хоть и заявлена в даташите, но ее величина нестабильна и сильно зависит от питающего напряжения[/uquote]
Величина встроенного опорника НЕ ТОЧНА, а не нестабильна. Это совершенно разные понятия.
С другой стороны, говорить о точности опорника для таких применений (а он ТОЛЬКО для такого применения и нужен) стоит лишь в сравнении с ВОЗМОЖНОЙ точностью измерения остатка емкости источника питания. И вот с этим и есть основная засада, потому что остаток емкости определяется не напряжением, а ВНУТРЕННИМ СОПРОТИВЛЕНИЕМ. То есть для измерения остатка емкости нужно ДО ИЗМЕРЕНИЯ перейти на нормированное потребление, выдержать небольшую паузу и лишь потом измерить напряжение.
Все это вносит столь большую погрешность, что на этом фоне измерение опорника с последующим вычислением обратной величины - это верх прецизионности... :wink:
PS. Как пример, учитывая, что нынче Атмел и Микрочип - это одно и тоже, опорник в ПИК 18 ПО ДАТАШИТУ имеет изменение номинала при изменении питания от 2,5 до 5,5 вольт при температуре 20 градусов от 1,024 до 1,026 Вольт. А изменение номинала в диапазоне рабочих температур (-40...+120) составляет 1,032...1,011 Вольт и совершенно линейно...
:)))
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

Методика калибровки
Следует учитывать, что напряжение V_BG будет разное у разных микроконтроллеров, особенно из разных партий, и может находиться в пределах 1.01 В – 1.2 В, следовательно необходима будет калибровка. Таким образом, если вычисленное значение Vcc с использованием данного кода неправильное, необходимо проделать следующие действия: измерить вольтметром напряжение питания Vсс и, используя уравнение ниже и зная значение ADC_VALUE, вычислить значение V_BG

ADC_VALUE = V_BG * 255/Vcc

И затем в исходном коде изменить значение напряжения V_BG «1.1» на вычисленное вами значение.
https://www.rlocman.ru/shem/schematics.html?di=73220
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Сообщение serg_svd »

[uquote="oleg110592",url="/forum/viewtopic.php?p=3847876#p3847876"]Методика калибровки[/uquote]
Хочется спросить: "А Вы сами пробовали?"

Это статья практически ничем не отличается от первоисточника, да и еще криво скопирован. Например, я не вижу, чтобы в исходнике бит ADLAR = 1. При этом в формуле стоит величина квантования 255.
В остальном ерунда все это. Я пытался ввести такой "вольтметр" в одной конструкции, которая питалась от литиевого аккумулятора. При этом меня интересовал диапазон от 3,5 до 4,2 В. Так вот, при калибровке на любой из границ получал погрешность на другой границе 0,15-0,2 В. Меня это не устроило. Если калибровать посредине, то на краях погрешность до 0,1 В, что, опять же, не очень хорошо.
КРАМ писал(а):PS. Как пример, учитывая, что нынче Атмел и Микрочип - это одно и тоже, опорник в ПИК 18 ПО ДАТАШИТУ имеет изменение номинала при изменении питания от 2,5 до 5,5 вольт при температуре 20 градусов от 1,024 до 1,026 Вольт. А изменение номинала в диапазоне рабочих температур (-40...+120) составляет 1,032...1,011
Я мучал ATmega8A и ATtiny26L. Простым методом вычислял и выводил величину Vbg. И она сильно отличалась от даташита. Я температуру не менял, но сравнивал в ограниченном количестве экземпляров.
К примеру, для ATmega8A Vbg находится в пределах от 1,15 до 1,35 В по даташиту. При заявленном типовом значении 1,23 В. Хотя в разделе, описывающем выбор канала, стоит значение 1,3 В.

Добавлено after 10 minutes 35 seconds:
Добавлю. Судя по коду и схеме напряжение с батареи подано на AREF пин. То есть:

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

 REFS1=0; REFS0=0;  // AREF, Internal Vref turned off
Зачем так, если есть возможность иной настройки. К примеру в первоисточнике это так:

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

 REFS1=0; REFS0=1;  // AVCC with external capacitor at AREF pin
Я подключал и тестировал, как в первоисточнике
Последний раз редактировалось serg_svd Пт май 29, 2020 20:12:47, всего редактировалось 1 раз.
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18677
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

дело в том, что я делаю часы, по номиналу кварца можно было бы об этом догадаться. и, поскольку счет времени идет программно, тактовую частоту менять нельзя, и, естественно, нельзя уводить МК в глубокий сон с остановкой тактового генератора. я и так на время сигнала будильника активирую PLL для генерации звука аппаратно.
serg_svd писал(а):Он весьма не точный
да хрен бы с ним: для часов достаточно вовремя предупредить о том, что пора заряжать, выше точность не нужна. но, разумеется, недопустим и вариант, когда только что было показано 50%, а спустя секунду 30%, а еще через секунду снова 50%.
serg_svd писал(а):но ее величина нестабильна и сильно зависит от питающего напряжения
я почему-то склонен доверять даташиту
Изображение
от температуры зависит, да, но, имхо, не настолько ужасно, чтобы беспокоиться в моём случае
serg_svd писал(а):для экономии заряда батареи, нужно выделить еще один порт МК, который бы управлял подачей напряжения батареи на делитель через полевик только в моменты измерения
так-то оно так, да снова проблема: лишних выводов нет, хотя в случае, если нынешний вариант до ума довести не получится, придется прийти к этому варианту и перекраивать схему...
Вложения
screenshot-ww1.microchip.com-2020.05.png
(62.55 КБ) 516 скачиваний
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

[uquote="ARV",url="/forum/viewtopic.php?p=3847938#p3847938"]дело в том, что я делаю часы, по номиналу кварца можно было бы об этом догадаться. и, поскольку счет времени идет программно, тактовую частоту менять нельзя, и, естественно, нельзя уводить МК в глубокий сон с остановкой тактового генератора.[/uquote]
Таймера2 что-ли нет с асинхронным режимом?

По теме, всё-таки по-теоритезирую немного - а вы на AVCC питание напрямую подаете или фильтр какой есть?
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18677
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

как обещал, докладываю итоги эксперимента.

друзья мои, я опечален... КРАМ был абсолтно прав, а я самонадеян. при проведении "чистого" эксперимента показания АЦП пляшут в младшем бите, как и обязаны плясать. вывод один: не смотря на мои усилия, все-таки где-то в рабочем коде я недоучел, и запускал АЦП в момент, когда светился индикатор - вот в этом случае показания пляшут в пределах 30-40 единиц, посольку индикатор жрет до 14 и более мА на разряд, а это ОЧЕНЬ много для выбранного метода измерений напржения на аккумуляторе.

вот код, при котором показания стабильны:

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

	while(1){
		power_adc_enable(); // включение питания АЦП
		ADCSRA = _BV(ADEN); // разрешение работы АЦП
		ADCSRA |= _BV(ADSC); // запуск АЦП
		while(ADCSRA & _BV(ADSC)); // ожидание конца измерения
		power_adc_disable(); // выключение питания АЦП
		sprintf_P(text, fs("%d"), ADC); // подготовка вывода результата
		power(true); // включение питания индикатора
		enable_fixed(cfg.speed*2); // вывод подготовленного результата
		while(indicate); // ожидание конца индикации
		power(false); // выключение питания индикатора
		continue; // повтор до изнеможения
а вот такие небольщие изменения приводят АЦП в ужас:

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

	power(true); // включение питания индикатора
	while(1){
		power_adc_enable(); // включение питания АЦП
		ADCSRA = _BV(ADEN); // разрешение работы АЦП
		ADCSRA |= _BV(ADSC); // запуск АЦП
		while(ADCSRA & _BV(ADSC)); // ожидание конца измерения
		power_adc_disable(); // выключение питания АЦП
		sprintf_P(text, fs("%d"), ADC); // подготовка вывода результата
		enable_fixed(cfg.speed*2); // вывод подготовленного результата
		while(indicate); // ожидание конца индикации
		continue; // повтор до изнеможения
как видите, достаточно было включить индикатор и не выключать более в цикле, и показания АЦП стали прыгать в пределах 12 единиц АЦП...

так что делайте выводы, господа!

КРАМ-у благодарность! заставил меня думать больше, чем мне казалось достаточным.

Добавлено after 2 minutes 42 seconds:
NStorm писал(а):Таймера2 что-ли нет с асинхронным режимом?
почему нет? есть :) да только у меня attiny861V, а асинхронный режим этого таймера вовсе не такой, как у других. и режима пробуждения из POWER_DOWN_MODE по прерыванию от него не предусмотрено, а SLEEP_MODE не дает никакой экономии...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

Сообщение oleg110592 »

[uquote="serg_svd",url="/forum/viewtopic.php?p=3847930#p3847930"]Хочется спросить: "А Вы сами пробовали?"
Например, я не вижу, чтобы в исходнике бит ADLAR = 1.[/uquote]
Пробовал - и писал ранее что работает а в приведенной мной цитате нет ни слова про ADLAR.
Друг Кота
Аватара пользователя
Сообщения: 25398
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

[uquote="serg_svd",url="/forum/viewtopic.php?p=3847930#p3847930"]Я мучал ATmega8A и ATtiny26L. Простым методом вычислял и выводил величину Vbg. И она сильно отличалась от даташита.[/uquote]
Ровно про это я и говорил. Вы не умеете читать даташит. Разброс величины опорника (который ЯВНО указан в даташите) практического значения не имеет и может быть откалиброван. Зависимость от питания - крайне незначительна. Так же незначительна и зависимость от температуры. То есть по факту опорник более чем пригоден для целей измерения собственного питания МК с точностью порядка 0,5...1% при однократной калибровке при изготовлении устройства. Если в МК есть датчик температуры, то возможна и температурная компенсация, что поднимет точность в климатике.
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

[uquote="ARV",url="/forum/viewtopic.php?p=3847965#p3847965"]
NStorm писал(а):Таймера2 что-ли нет с асинхронным режимом?
почему нет? есть :) да только у меня attiny861V, а асинхронный режим этого таймера вовсе не такой, как у других. и режима пробуждения из POWER_DOWN_MODE по прерыванию от него не предусмотрено, а SLEEP_MODE не дает никакой экономии...[/uquote]
Сейчас заглянул в ДШ attiny861V - там нет таймера 2. И режима сна SLEEP нет в принципе. Есть асинхронный режим у таймера 1, но он не для того. У классических мег, вроде мега8 просто у таймера 2 как раз асинхронный режим заточен под кварц 32768 Гц для часов как раз. Если б такой был - удобно было бы и спать ходить спокойно можно было б.
Собутыльник Кота
Аватара пользователя
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Сообщение serg_svd »

ARV писал(а):я почему-то склонен доверять даташиту
Я тоже
Изображение

ARV, а каков диапазон изменения величины напряжения источника питания в Вашем случае, для которого Вы получили стабильный результат? В остальном правильно! Пока работает АЦП всю периферию лучше гасить
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Друг Кота
Аватара пользователя
Сообщения: 25398
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=3847856#p3847856"]Перрреведи... :)
в смысле не понял, какая сущность лишняя и как обойтись без неё?[/uquote]
Вообще то про эту лишнюю сущность вся эта тема. В МК специально делают референсный источник напряжения доступный через мультиплексор напрямую АЦП без внешнего пина. Измеряя этот референсный источник при опоре АЦП подключенной к питанию МК мы получаем величину обратно пропорциональную напряжению питания МК. Расчет тривиален и для нужд индикатора остаточного заряда может быть сделан табличным, чтобы сократить время активного режима.

Добавлено after 3 minutes 53 seconds:
[uquote="serg_svd",url="/forum/viewtopic.php?p=3847977#p3847977"]Я тоже[/uquote]
И что вас не устраивает в приведенной диаграмме? :))) Вы полагаете, что изменение на 4...8 мВ для целей измерения остатка заряда батареи имеют хоть какое то значение? Особенно если учесть, что при табличном расчете они АВТОМАТИЧЕСКИ компенсируются...
Полагаю, что вы невнимательно посмотрели на масштаб вертикальной оси.... :roll:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18677
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

serg_svd писал(а):Я тоже
что тоже? вы увидели страшно кривую линию, и пришли в ужас, да? а тот факт, что между минимальным уровнем и максимальным разница всего в 16 мВ (при том что это 1 дискрет АЦП меги8), вы игнорируете? ;)
по-моему, в диапазоне от 2,6 до 5,5 вольт (двукратное изменение) нестабильность опорника всего в 16 мВ - это отличный показатель! каких-то 1,5% всего.
serg_svd писал(а):каков диапазон изменения величины напряжения источника питания в Вашем случае, для которого Вы получили стабильный результат?
поскольку аккумулятор разряжается довольно долго, о диапазоне говорить не приходится, не проверил я весь диапазон. но показания четко стабильны плюс-минус 1, т.е. сейчас при напряжении на ХХ аккумулятора 4,04В показания стабильны 276, редко-редко 275.

Добавлено after 12 minutes 19 seconds:
NStorm писал(а):там нет таймера 2
ну, в принципе, я это и имел ввиду :) два таймера, причем второй мало того, что асинхронный, так еще и 8+2 битный.
NStorm писал(а):И режима сна SLEEP нет в принципе
есть другие, но толку о них 0: IDLE не уменьшает, а увеличивает потребление (в моей версии кода), а остальные останавливают тактирование, что для часов недопустимо.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Сообщение serg_svd »

ARV писал(а): вы увидели страшно кривую линию, и пришли в ужас, да?
Да при чем тут масштаб? Я лишь пример привел на характеристики из даташита. И по ним Vbg находится в диапазоне (1,15...1,35) В
А судя по графику значение к этим границам и близко не приближается.
ARV писал(а):т.е. сейчас при напряжении на ХХ аккумулятора 4,04В показания стабильны 276, редко-редко 275.
А почему бы не подключить к БП и проверить показания на границах? У Вас же аккумулятор Li-Po. Его можно хоть до 3 В разряжать, но я предполагаю, что на величину предельного разряда повлияет индикатор. При слишком низком напряжении его яркость неизбежно упадет. Я как раз для аналогичного случая и пытался приспособить этот метод вычисления напряжения питания МК. И у меня очень разнились показания на границе. Выше я писал, что при калибровке на 4,2 В и при последующем снижении напряжения питания до 3,5 В, При вычислении получалось завышенное напряжение. То есть по сути аккумулятор подсажен, а расчет говорит, что можно еще более его сажать.

PS. В общем Вы меня раззадорили. :) Надо еще раз поэкспериментировать на эту тему. Спасибо! :beer: :)
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Модератор
Аватара пользователя
Сообщения: 19055
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

у меня 2 термометра сделано с этим принципом контроля напряжения питания.
для калибровки я вместо температуры выводил код АЦП. и при светящихся семисегментниках не видел болтанки кода АЦП.
абсолютно стабильные измерения у меня были.
а калибровка простая получается.
при произвольном напряжении аккумулятора смотрю код АЦП.
потом по пропорции вычисляю код, который должен быть для 3 Вольт. и забиваю это контрольное число в прошивку.
если измеренный код больше контрольного, то вывожу на индикацию "Lo U".
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Друг Кота
Аватара пользователя
Сообщения: 25398
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

[uquote="Starichok51",url="/forum/viewtopic.php?p=3848004#p3848004"]абсолютно стабильные измерения у меня были.[/uquote]
Стабильность определяется не включенными/выключенными индикаторами, а когерентностью захвата значений напряжения УВХ с диаграммой управления индикаторами. Если диаграмму индикатора привязать к выборкам АЦП так, что ток потребления во время оных выборок не будет зависеть от показаний индикатора, то показания будут стабильны и достаточно точны.
Кстати, стабильность показаний может быть иллюзией точности. Поскольку даже при когерентности развертки динамической индикации при разном количестве светящихся сегментов будет разный ток потребления. Показания будут стабильными, но сильно НЕЛИНЕЙНЫМИ.
Измерения таки стоит делать при полностью погашенном индикаторе, причем с паузой для выравнивания потенциалов блокировочного конденсатора питания и химического источника питания схемы.
А лучше вообще применять ЖК индикаторы для таких целей. Есть очень неплохие и недорогие сегментные TIC с CoG ML1001.
Модератор
Аватара пользователя
Сообщения: 19055
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

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

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

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

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

[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=3848402#p3848402"]я ведь описал только свой опыт с применением мк не имеющего АЦП на борту...[/uquote]
Именно чукча... А прочитать о чем вообще тема кроме как в заголовке - не судьба? :tea:
[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=3847842#p3847842"]потребление такой схемы между замерами =0, т.к. конденсатор пост. ток не пропускает[/uquote]
Потребление при измерениях и с компаратором, и с АЦП определяется собственным потреблением схемы (АЦП или компаратор+захват), а так же энергией заряда конденсатора захвата (либо внешнего конденсатора, либо конденсатора УВХ АЦП). Ставлю 100 бакинских против использованной туалетной бумаги, что энергия конденсатора УВХ примерно раз в 1000 меньше, чем у внешнего конденсатора пригодного для обсуждаемых целей. Таким образом, эффективнее, проще и дешевле взять МК с АЦП и опорником, чем без АЦП.
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

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

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

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

[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=3848647#p3848647"]но в простое эта схема потребляет меньше....[/uquote]
Это с какого перепуга?
Во первых, включать аналоговую часть нужно только на время измерений. Во вторых, потребление компаратора и АЦП практически одинаково, ибо в АЦП потребляет непрерывно лишь компаратор, а цифровая часть ничего не потребляет, ибо не тактируется.
Опорник в обоих вариантах требует включения.
Итого, общее потребление зависит от удельного потребления и времени активной работы аналоговой части. Если учесть, что время преобразования АЦП равно примерно 30...50 мкс против линейного счета времени Input Capture при меньшей на три десятичных порядка емкости захвата, выбор метода очевиден...
Ответить

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