Страница 1 из 1
Измерение напряжения батарейки
Добавлено: Ср сен 30, 2020 12:27:16
LEVV2006
Всем привет!
Помоги пожалуйста справиться с АЦП микроконтроллера ATmega328p
Идея такая.
Устройство работает от батарейки. Необходимо периодически проверять её заряд.
Поискав в интернете нашел
статью и сообщение на
форуме РадоКота
В целом все понятно. Единственное (для тестирования кода) на вывод AREF повесил переменный резистор чтобы менять напряжение (Сам МК пока запитан от 5в).
Но загвоздка в том что значение АЦП не меняется. Все время 1023...
Вот код. Может я что то в коде не так написал?
Код: Выделить всё
int main(void)
{
init_USART();
ADCSRA|=(1<<ADEN); //Включить АЦП
ADMUX=(1<<MUX3)|(1<<MUX2)|(1<<MUX1); //Подключаем внутренний источник напряжение в качестве измеряемого.
while(1)
{
uint32_t adc=0;
ADCSRA|=(1<<ADSC); //Старт АЦП
while(!(ADCSRA & (1<<ADSC))); //Ожидаем конец АЦП
adc=ADCW; //Сохраняем результат АЦП
printf("adc=%d\n", adc); //Печать значения АЦП
float VCC=0;
VCC=(1.3*1024)/adc; //Расчет напряжения
printf("VCC=%d.%d\n", (uint8_t)VCC,(uint8_t)(VCC*10)%10); //Печать напряжения
_delay_ms(1000);
}
}
Re: Измерение напряжения батарейки
Добавлено: Ср сен 30, 2020 13:16:10
pyzhman
"Подключаем внутренний источник напряжение в качестве измеряемого."
А нужно измерять питающее относительно внутреннего опорного.
Re: Измерение напряжения батарейки
Добавлено: Ср сен 30, 2020 13:24:55
LEVV2006
[uquote="pyzhman",url="/forum/viewtopic.php?p=3899799#p3899799"]А нужно измерять питающее относительно внутреннего опорного.[/uquote]
В обычном режиме да. Но у нас особый случай. Питание от батарейки и нужно измерять её напряжение.
Разобрался. Выставил максимальный предделитель и все заработало.
Код: Выделить всё
int main(void)
{
init_USART();
ADCSRA|=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); //Включить АЦП
ADMUX=(1<<MUX3)|(1<<MUX2)|(1<<MUX1); //Подключаем внутренний источник напряжение в качестве измеряемого.
while(1)
{
uint32_t adc=0;
ADCSRA|=(1<<ADSC); //Старт АЦП
while((ADCSRA & (1<<ADSC)));
adc=ADCW; //Сохраняем результат АЦП
printf("adc=%d\n", adc); //Печать значения АЦП
float VCC=0;
VCC=(1.05*1023.0)/adc; //Расчет напряжения
printf("VCC=%d\n", (uint16_t)(VCC*100.0)); //Печать напряжения
_delay_ms(1000);
}
}
Вообще по хорошему нужен внешний источник. У внутреннего характеристики плавают....
Re: Измерение напряжения батарейки
Добавлено: Ср сен 30, 2020 14:02:18
BlackKilkennyCat
внешний, у которого не плавают, стоит как самолёт. тот, который как самолет не стоит, особо не отличается от внутреннего
Re: Измерение напряжения батарейки
Добавлено: Ср сен 30, 2020 14:33:33
Самсусамыч
[uquote="LEVV2006",url="/forum/viewtopic.php?p=3899757#p3899757"]Всем привет!
Помоги пожалуйста справиться с АЦП микроконтроллера ATmega328p[/uquote]
Так всё же просто… есть два варианта контроля питающего напряжения:
1) С помощью делителя… подавая на вход мультиплексора напряжение с делителя. При этом опорное напряжение выбирают, или от внутреннего ИОН 1,1 В, или от внешнего ИОН (без фанатизма).
2) Без использования выводов МК: за опорное напряжение выбирают питающее напряжение, а в качестве измеряемого на мультиплексор подают напряжение внутреннего ИОН 1,1 В.
Re: Измерение напряжения батарейки
Добавлено: Ср сен 30, 2020 14:43:30
КРАМ
[uquote="LEVV2006",url="/forum/viewtopic.php?p=3899807#p3899807"]Вообще по хорошему нужен внешний источник. У внутреннего характеристики плавают....[/uquote]
Фигня всё это. Абсолютная. Измерение батарейки не дает никакой более-менее точной информации. Напряжение само по себе с остатком емкости не связано. Примерная связь возникает лишь на оставшихся примерно 20%. Откройте даташит на примененный хим. источник и посмотрите семейство разрядных характеристик. После чего убейте себя апстену.
Измерять нужно ВНУТРЕННЕЕ СОПРОТИВЛЕНИЕ батарейки. А это связано с управлением потреблением и с дополнительным потреблением.
Re: Измерение напряжения батарейки
Добавлено: Ср сен 30, 2020 15:05:56
Самсусамыч
[uquote="КРАМ",url="/forum/viewtopic.php?p=3899863#p3899863"]Фигня всё это. Абсолютная. Измерение батарейки не дает никакой более-менее точной информации. Напряжение само по себе с остатком емкости не связано. Примерная связь возникает лишь на оставшихся примерно 20%.[/uquote]
Как же не связано… у новой щелочной батарейки (к примеру АА), напряжение в пределах 1,6 В, а у практически разряженной (менее 10%) 1,0 В. Кривая разряда чётко показывает остаточную ёмкость при том или ином потенциале. Естественно, что кривые у разных химических элементов разнятся. У щелочных одна, у солевых другая… но если использовать только один тип батареек, то вполне всё прекрасно видно…

Re: Измерение напряжения батарейки
Добавлено: Ср сен 30, 2020 15:39:07
КРАМ
[uquote="Самсусамыч",url="/forum/viewtopic.php?p=3899877#p3899877"]у новой...у практически разряженной[/uquote]
Еще раз для невнимательных - ОТКРОЙТЕ ДАТАШИТ.
Вы приводите два КРАЙНИХ значения. Ежу понятно, что они отличаются. С этим никто и не спорил. Проблема в том, что с 1,6 до 1,45 напряжение падает ПОД НАГРУЗКОЙ примерно при 5...10% разряда. Далее напряжение меняется до 1,2В почти линейно до остатка примерно 20%. А затем начинает очень быстро и нелинейно падать. При этом все эти значения могут быть выше-ниже примерно на 50мВ. А линейная область вся занимает 250 мВ...
Но ладно, если бы это было всегда так. При изменении потребления коренным образом меняется форма разрядной кривой. Самое главное, что ЕМКОСТЬ зависит от потребления. Не остаток времени, а именно емкость.
А еще емкость зависит от графика потребления, когда происходит частичное восстановление емкости после снятия или значительного уменьшения нагрузки. И происходит это не мгновенно, а за заметное время от секунд до минут.
А еще емкость зависит от температуры...
А еще она зависит от производителя и конкретного экземпляра/партии (при одинаковом типе хим. элемента)
Ну и о какой точности при измерении напряжения может вообще идти речь?
Re: Измерение напряжения батарейки
Добавлено: Ср сен 30, 2020 17:27:33
Самсусамыч

"Внутреннее сопротивление батарейки: 0.25 Ом.
Конечное напряжение под нагрузкой: 0.874 В. Ток разряда 0.20 А.
Разряд длился 261 минуту! Ёмкость батарейки составила ~1200 мА/ч."
ЗЫ. На протяжении 4 лет работы моих автономных датчиков не разу не было такого, чтобы базовое устройство неправильно определило остаточную ёмкость их питания… зачем сверхточность в таких параметрах? Хотя кому как нравится… хотите точность тратьте дополнительную энергию для её реализации… а мой приоритет – пусть лучше датчики дольше проработают до следующей замены батареек, чем повысить точность до 1% за счёт попусту расходуя энергию.

Re: Измерение напряжения батарейки
Добавлено: Ср сен 30, 2020 17:45:53
КРАМ
[uquote="Самсусамыч",url="/forum/viewtopic.php?p=3899937#p3899937"]На протяжении 4 лет работы....зачем сверхточность в таких параметрах?[/uquote]
Вы видимо не следили за обсуждением...
Вопрос был как раз в точности, поскольку ТСу не нравился встроенный опорник...
А приведенный вами скрин как раз подтверждает мое предыдущее сообщение. Правда на графике только одна кривая, а вообще то следовало бы привести семейство для разных токов. Вот где смех...
Re: Измерение напряжения батарейки
Добавлено: Ср сен 30, 2020 17:51:01
Самсусамыч
[uquote="КРАМ",url="/forum/viewtopic.php?p=3899945#p3899945"]А приведенный вами скрин как раз подтверждает мое предыдущее сообщение.[/uquote]
И моё подтверждает…

Re: Измерение напряжения батарейки
Добавлено: Ср сен 30, 2020 18:01:48
LEVV2006
[uquote="КРАМ",url="/forum/viewtopic.php?p=3899945#p3899945"][uquote="Самсусамыч",url="/forum/viewtopic.php?p=3899937#p3899937"]На протяжении 4 лет работы....зачем сверхточность в таких параметрах?[/uquote]
Вопрос был как раз в точности, поскольку ТСу не нравился встроенный опорник...[/uquote]
Да я сам датчик делаю беспроводной.
Просто сейчас при тестировании что то показатели напруги плавают.... Вот и предположил что внутренний ИОН плохо работает.
Мне точность тоже не нужна особо. Как напруга уменьшится до 2,5-2в думал менять батарейку.
Re: Измерение напряжения батарейки
Добавлено: Ср сен 30, 2020 18:25:59
Самсусамыч
Если потребления датчиком не большое, и используемый МК с нижнем пределом по питанию 1,8 В, то замена при 2 В вполне себе нормально и надёжно… я так себе и делал… базовый блок сигнализирует о необходимости замены батареек у конкретного датчика при снижении его напряжения питания до 2 В.
