реклама на сайте
подробности

 
 
4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> ADC Mega168. Измерение напряжения "наоборот".
Буратино
сообщение Jun 29 2009, 10:53
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215



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

AREF = AVCC = Vbat
Данные АЦП: N = 1024*Vop/Vbat
т.е. Vbat = Vop*1024/N

вот инициализация ADC:
void adc_init(void)
{
ADMUX = (1<<REFS0)|(1<<MUX3)|(1<<MUX2)|(1<<MUX1);
ADCSRB = 0x00;
ADCSRA = (1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS0);
}


Вот прерывание:
#pragma vector= ADC_vect
__interrupt void ADC_vect_isr (void)
{
//conversion complete, read value (int) using...
value_ADC=ADCL; //Read 8 low bits first (important)
value_ADC|=(int)ADCH << 8; //read 2 high bits and shift into top byte
}



В тексте программы:
...
__disable_interrupt();adc_init();ADCSRA |= (1<<ADEN); __enable_interrupt();
DelayMs(5);
f_bat=(1.22*1024/value_ADC);
V_BAT=(f_bat*100);
__disable_interrupt();ADCSRA &= ~(1<<ADEN); __enable_interrupt();
...



не могу понять, почему иногда считает ADC неверно!? Где ошибка?
Я не использую никакой обвязки. То есть, на ногах проца имеющих отношение к преобразованию ничего не "висит". Может быть в этом проблема?
AVСС тоже в воздухе. Если измерять напряжение на этом выводе, то там меньше, чем на питании проца.
Сори за очередные глупые вопросы, но оч. нужна помощь. Спасибо.

Сообщение отредактировал Буратино - Jun 29 2009, 11:06


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 29 2009, 12:14
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Буратино @ Jun 29 2009, 16:53) *
Я не использую никакой обвязки. То есть, на ногах проца имеющих отношение к преобразованию ничего не "висит". Может быть в этом проблема?
AVСС тоже в воздухе. Если измерять напряжение на этом выводе, то там меньше, чем на питании проца.
Все неиспользуемые пины должны быть настроены как GPIO с функцией вывода лог.0. AVCC нельзя отставлять неподключенным ни в коем случае! Либо напрямую к питанию подключить, либо через LC или RC-фильтр.
Go to the top of the page
 
+Quote Post
Буратино
сообщение Jun 29 2009, 13:49
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215



Цитата(rezident @ Jun 29 2009, 16:14) *
Все неиспользуемые пины должны быть настроены как GPIO с функцией вывода лог.0. AVCC нельзя отставлять неподключенным ни в коем случае! Либо напрямую к питанию подключить, либо через LC или RC-фильтр.


Присоединил AVCC напрямую к батарее. ADC стал завышать напряжение (что в принципе можно и устранить вычитанием константы), но временами, проскакивают ошибки. laughing.gif

Вот еще что:
если делать несколько циклов "ацепирования", ну например через одну секунду десять раз, то ошибка появляется на первом, втором измерении, а все последующие - ок.

Сообщение отредактировал Буратино - Jun 29 2009, 14:14


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 29 2009, 15:02
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



А в чем заключается ошибка "ацепирования"?
Ой, просмотрел
Код
измеряю напряжение на аккумуляторе по сл. алгоритму:

AREF = AVCC = Vbat
а можно схему посмотреть? Судя по тому что процитировано, вы измеряете напряжение питания относительно... самого напряжения питания? cranky.gif laughing.gif
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jun 29 2009, 15:12
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Буратино @ Jun 29 2009, 16:49) *
Присоединил AVCC напрямую к батарее. ADC стал завышать напряжение (что в принципе можно и устранить вычитанием константы), но временами, проскакивают ошибки.
Завышает напряжение, наверное, потому, что согласно DS при MUX3..0=1110 к АЦП подключается 1.1V (Vbg). У Вас же в формуле 1.22

Цитата(Буратино @ Jun 29 2009, 16:49) *
если делать несколько циклов "ацепирования", ну например через одну секунду десять раз, то ошибка появляется на первом, втором измерении, а все последующие - ок.
То, что в первом измерении неверный результат - ему верить нельзя (в DS об этом прямо сказано: "The first ADC conversion result after switching reference voltage source may be inaccurate, and the user is advised to discard this result."). Со вторым неверным - хуже... У Вас REFS10=01 (т.е. "AVCC with external capacitor at AREF pin"). Про конденсатор в первом посте нет ни слова...
Go to the top of the page
 
+Quote Post
Буратино
сообщение Jun 29 2009, 17:21
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215



Цитата(rezident @ Jun 29 2009, 19:02) *
А в чем заключается ошибка "ацепирования"?

Результат измерения "скачет": то 3,96В (правильно), то 2,78В (ошибка)

Цитата(rezident @ Jun 29 2009, 19:02) *
А можно схему посмотреть?

Нет никакой схемы! Вообще ничего (ну конденсатор 100н на питании проца, 1мкФ+10к на ресете, кварц и два по 27пФ это все). По идее АЦП измеряет напряжение питания относительно внутренней опоры.



Цитата(Палыч @ Jun 29 2009, 19:12) *
Завышает напряжение, наверное, потому, что согласно DS при MUX3..0=1110 к АЦП подключается 1.1V (Vbg). У Вас же в формуле 1.22

То, что в первом измерении неверный результат - ему верить нельзя (в DS об этом прямо сказано: "The first ADC conversion result after switching reference voltage source may be inaccurate, and the user is advised to discard this result."). Со вторым неверным - хуже... У Вас REFS10=01 (т.е. "AVCC with external capacitor at AREF pin"). Про конденсатор в первом посте нет ни слова...


Поставил в формулу 1,1В, Припаял к AREF электролит на 10мкФ, потом 100н. Теперь меряет так:
Показания прибора: 3,87В
Результат преобразования: 3,96В

Однако ошибка остается. Мне кажется, что она появляется после перехода из энергосберегающего режима (Power Down) в активный режим.
Результат ошибочного преобразования: 2,72-2,99В

Сообщение отредактировал Буратино - Jun 29 2009, 17:27


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 29 2009, 17:23
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Буратино @ Jun 29 2009, 22:58) *
Нет никакой схемы! Вообще ничего. По идее АЦП измеряет напряжение питания относительно внутренней опоры.
Т.е. в качестве опоры для АЦП используется напряжение на AVCC или AREF, а напряжение от встроенного ИОН подается на измерительный вход? Я не очень хорошо знаю архитектуру ATmega128 и поэтому только предполагаю, что это возможно. Если так, то в таком случае скорее всего нарушены ADC Conversion Time.
Go to the top of the page
 
+Quote Post
Буратино
сообщение Jun 29 2009, 18:04
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215



Чувство такое, будто внутри процессора проходит переходной процесс. Длится он (для емкости на AREF в 10мкФ ) несколько (1-2) секунд. Потом все "устаканивается" и очередные измерения проходят четко и точно.
Не понимаю maniac.gif

Сообщение отредактировал Буратино - Jun 29 2009, 18:05


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jun 30 2009, 00:41
Сообщение #9


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(Палыч @ Jun 29 2009, 19:12) *
То, что в первом измерении неверный результат - ему верить нельзя (в DS об этом прямо сказано: "The first ADC conversion result after switching reference voltage source may be inaccurate, and the user is advised to discard this result.").
Как надоело читать эту глупость... sad.gif
Вам перевести "в предпоследний раз" что там написано ?
Перевод почти дословный:
"Если между преобразованиями сменилось опорное напряжение, то следующее измерение после такого изменения может быть не точным,
и пользователь должен это иметь в виду."

Хде Вы тут увидели смену опоры ? wassat.gif
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Jun 30 2009, 00:56
Сообщение #10


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



В даташите АЦП посвещено нескольк страниц. И те не хотим читать.
1. Старший бит ADCSRA установить в 1 в самом начале и БОЛЬШЕ НИКОГДА НЕ СБРАСЫВАТЬ.
2. AREF не надо 10 микрофарад. Керамика 10 нанофарад. И больше этот вывод НИКУДА НЕ ПОДКЛЮЧАТЬ!!!!
3. Устанавливать только 6-й бит (старт измерений) по мере необходимости.
4. Если уж читаете содержимое регистрв АЦП в прерывании - делайте свои переменные, куда пишите ADCH-L - volatile.

Строго соблюдайте эти правила и будет вам щастье.

Ну и естественно, схема подключения к питанию микроконтроллера - согласно даташита. И никак иначе.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jun 30 2009, 01:09
Сообщение #11


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(DpInRock @ Jun 30 2009, 04:56) *
Строго соблюдайте эти правила и будет вам щастье.

+5. Соблюдайте тайминги по времени переключения канала.

или делайте это только тогда когда это гарантированно режимом работы...
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jun 30 2009, 05:36
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(singlskv @ Jun 30 2009, 03:41) *
"Если между преобразованиями сменилось опорное напряжение, то следующее измерение после такого изменения может быть не точным,и пользователь должен это иметь в виду."
Хде Вы тут увидели смену опоры ? wassat.gif
Точнее, наверное, перевести так: "Первое измерение после смены опорного напряжения может быть неточным..." А вот - и смена опоры:
Цитата
ADMUX = (1<<REFS0)|(1<<MUX3)|(1<<MUX2)|(1<<MUX1);
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jun 30 2009, 06:44
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Буратино @ Jun 29 2009, 20:21) *
Нет никакой схемы! Вообще ничего (ну конденсатор 100н на питании проца, 1мкФ+10к на ресете, кварц и два по 27пФ это все).
Между VCC и AVCC производитель рекомендует ставить индуктивность и на AVCC - конденсатор.
Цитата(DpInRock @ Jun 30 2009, 03:56) *
1. Старший бит ADCSRA установить в 1 в самом начале и БОЛЬШЕ НИКОГДА НЕ СБРАСЫВАТЬ.
У автора, как я понимаю, МК переводится в энергосберегающий режим. При переходе в этот режим рекомендуется сбрасывать ADEN для уменьшения энергопотребления (как я понимаю: у автора вопроса питание устройства - от батареи, и лишнее потребление ему не к чему).
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Jun 30 2009, 07:31
Сообщение #14


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Код
AREF = AVCC = Vbat

Тут уже говорилось автору, что он вот так ничего не измерит.
То, что у него есть какой-т там результат, говорит о том, что автор неизвестно чего измеряет на самом деле.
И ни о каких энергосберегающих режимах речи не идет. Тем более с конденсатором в 10 микрофарад на AREF. Это выход опорника, мкротоковый и заряжать 10 микрфарад он будет очень долго.

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


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jun 30 2009, 07:54
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(DpInRock @ Jun 30 2009, 10:31) *
Тут уже говорилось автору, что он вот так ничего не измерит.
То, что у него есть какой-т там результат, говорит о том, что автор неизвестно чего измеряет на самом деле.

Ну, почему же? Автор измеряет внутреннее напряжение 1.1В, используя в качестве опорного AVCC. Кстати, для точности измерения Vбат (которое равно VCC) индуктивность между VCC и AVCC, наверное, ставить не нужно.
Цитата(DpInRock @ Jun 30 2009, 10:31) *
И ни о каких энергосберегающих режимах речи не идет.

Выше автор говорил: "Мне кажется, что она появляется после перехода из энергосберегающего режима (Power Down) в активный режим."
Цитата(DpInRock @ Jun 30 2009, 10:31) *
Тем более с конденсатором в 10 микрофарад на AREF. Это выход опорника, мкротоковый и заряжать 10 микрфарад он будет очень долго.
Об этом уже сказали выше, и, надеюсь, автор вопроса этому внял...

Может быть, измерения неверные ещё и из-за того, что напряжение на батарее проседает при увеличении потребляемого тока в момент просыпания? Не лучше ли проверить измерения, запитав устройство от хорошего источника питания?
Go to the top of the page
 
+Quote Post

4 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th June 2025 - 19:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01671 секунд с 7
ELECTRONIX ©2004-2016