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

 
 
 
Reply to this topicStart new topic
> Вопрос по ADC10, Большое потребление
Denisnovel
сообщение Jul 10 2009, 07:59
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 31-12-07
Из: Фрязино М.О.
Пользователь №: 33 753



Опрашиваю АЦП по таймеру.
Код
ADC10CTL1 = INCH_3;         // Канал 3
            ADC10CTL0 |= REFOUT+REFON+SREF_1+ ADC10ON+ADC10SHT_2+ ADC10IE+REFBURST;
          TI_CC_Wait(50);
           for (char k=0;k<10;k++)
            {
              ADC10CTL0 |= ENC + ADC10SC;//Запускаем АЦП
             _BIS_SR(CPUOFF + GIE);        // Засыпаем до появления прерывания от АЦП
              ADC_Sum=ADC_Sum+ADC10MEM;//Суммируем
            }
            ADC_Sum=ADC_Sum/10;//Находим среднее
            ADC10CTL0 &= ~(ADC10ON+ ENC );//ADC off


В режиме сна МК потребляет 250 мкА. Если мерить только напряжение батарейки, то все нормально, потребление около 7 мкА.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jul 10 2009, 08:18
Сообщение #2


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Denisnovel @ Jul 10 2009, 11:59) *
Если мерить только напряжение батарейки, то все нормально, потребление около 7 мкА.

А чем отличается измерение батарейки?


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Denisnovel
сообщение Jul 10 2009, 09:14
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 31-12-07
Из: Фрязино М.О.
Пользователь №: 33 753



Другой канал и не используется вывод внутреннего опорного напряжения на внешний пин.
Код
ADC10CTL1 = INCH_11;//bat
               ADC10CTL0 |= REFON+SREF_1+ ADC10ON+ADC10SHT_2+ ADC10IE;
              TI_CC_Wait(50);
              ADC10CTL0 |= ENC + ADC10SC;
              _BIS_SR(CPUOFF + GIE);        // LPM0, ADC10_ISR will force exit
              BatV=ADC10MEM/34;
              ADC10CTL0 &= ~(ADC10ON+ ENC + ADC10SC+REFON);//ADC off
              ADC10CTL1 = INCH_15;


Причем, если закоментировать строки в коде из первого поста то потребление тоже упадет
Код
              //ADC10CTL0 |= ENC + ADC10SC;//Запускаем АЦП
             _//BIS_SR(CPUOFF + GIE);        // Засыпаем до появления прерывания от АЦП
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jul 10 2009, 09:26
Сообщение #4


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Denisnovel @ Jul 10 2009, 13:14) *
Другой канал и не используется вывод внутреннего опорного напряжения на внешний пин.

Я так и думал.
А оно там очень нужно?
Если да, ищите, куда стекает ток. Может, в электролит?


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Denisnovel
сообщение Jul 10 2009, 09:53
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 31-12-07
Из: Фрязино М.О.
Пользователь №: 33 753



Какой электролит?
11 канал это измерение напряжения питания. При включении 11-ого канала питание подается на делитель напряжения. После измерения АЦП переключается на 3 канал и отключает делитель.
Выводить опорное напряжение нужно. Но после измерения я его тоже отключаю.
ADC10CTL0 &= ~(ADC10ON+ ENC + ADC10SC+REFBURST+REFON+REFOUT);//ADC off
Go to the top of the page
 
+Quote Post
rezident
сообщение Jul 10 2009, 09:58
Сообщение #6


Гуру
******

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



Цитата(Denisnovel @ Jul 10 2009, 15:14) *
Причем, если закоментировать строки в коде из первого поста то потребление тоже упадет
Код
              //ADC10CTL0 |= ENC + ADC10SC;//Запускаем АЦП
             _//BIS_SR(CPUOFF + GIE);        // Засыпаем до появления прерывания от АЦП
Вполне логично. У вас выбран режим Reference burst (биты REFOUT и REFBURST в регистре ADC10CTL0). Закомментировав строки, вы не запускаете преобразование и в соответствии с выбранным режимом REF не включается до тех пор, пока не поступит управляющий сигнал SAMPCON, для запуска выборки входного сигнала. REF включается только во время выборки сигнала перед преобразованием.
Цитата(MrYuran @ Jul 10 2009, 15:26) *
Если да, ищите, куда стекает ток. Может, в электролит?
Поскольку установлен REFON в регистре ADC10CTL0, то REF соединяется с соответствующим внешним пином, на котором теоретически конденсатор висеть должен.
Go to the top of the page
 
+Quote Post
Denisnovel
сообщение Jul 10 2009, 10:21
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 31-12-07
Из: Фрязино М.О.
Пользователь №: 33 753



На внешнем пине висит 10нФ. Но после преобразования REF выключается. По осциллографу видно, что опорное только при измерении, около 100 мкс.
Go to the top of the page
 
+Quote Post
rezident
сообщение Jul 10 2009, 10:23
Сообщение #8


Гуру
******

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



Цитата(Denisnovel @ Jul 10 2009, 16:21) *
На внешнем пине висит 10нФ. Но после преобразования REF выключается. По осциллографу видно, что опорное только при измерении, около 100 мкс.

Какой именно у вас кристалл? Регистр ADC10AE вы программируете?
Go to the top of the page
 
+Quote Post
Denisnovel
сообщение Jul 10 2009, 10:26
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 31-12-07
Из: Фрязино М.О.
Пользователь №: 33 753



Кристалл f2012
ADC10AE0 |= 0x18;
Go to the top of the page
 
+Quote Post
rezident
сообщение Jul 10 2009, 10:54
Сообщение #10


Гуру
******

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



Цитата(Denisnovel @ Jul 10 2009, 15:53) *
Выводить опорное напряжение нужно. Но после измерения я его тоже отключаю.
ADC10CTL0 &= ~(ADC10ON+ ENC + ADC10SC+REFBURST+REFON+REFOUT);//ADC off
Обратите внимание, что некоторые биты регистров ADC10CTL0 и ADC10CTL1 должны модифицироваться только когда бит ENC сброшен. Попробуйте сначала сбрасывать ENС и только потом использовать эту команду для выключения ADC10.
Go to the top of the page
 
+Quote Post
Denisnovel
сообщение Jul 10 2009, 11:52
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 31-12-07
Из: Фрязино М.О.
Пользователь №: 33 753



Вроде помогло. Спасибо
Go to the top of the page
 
+Quote Post
rezident
сообщение Jul 10 2009, 12:05
Сообщение #12


Гуру
******

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



Цитата(Denisnovel @ Jul 10 2009, 17:52) *
Вроде помогло. Спасибо
Что именно и как помогло? Потребление упало? Из-за предварительного сброса бита ENC? Т.е. "до того как" ADC реально не выключался?
Go to the top of the page
 
+Quote Post
Denisnovel
сообщение Jul 10 2009, 13:10
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 31-12-07
Из: Фрязино М.О.
Пользователь №: 33 753



Теперь так
Код
           ADC10CTL0 &= ~ENC;
           ADC10CTL0 &= ~(ADC10ON+ ADC10SC+REFBURST+REFON+REFOUT);//ADC off


Потребление около 80 мкА
Go to the top of the page
 
+Quote Post

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

 


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


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