Срочный вопрос - при отключении FTDI адаптера МК начинает потреблять больше тока.

d00m
Offline
Зарегистрирован: 21.02.2013
d00m
Offline
Зарегистрирован: 21.02.2013

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

дублирую.

всем привет.

использую вот такую arduino - Anarduino с радиомодулем на борту:

http://www.anarduino.com/miniwireless/#schematic

питание - LiPo аккумулятор на 3 вольта.

к Serial порту МК подключен FTDI адаптер, который в свою очередь подключен к USB к ноуту.

http://www.amazon.com/gp/product/B012YUANZK?psc=1&redirect=true&ref_=oh_aui_detailpage_o08_s00

только Vcc пин этого адаптера не подключен к МК, так как МК уже питается от батареи.

подключены только GND, CTS, TX, RX and DTR пины. 

так удобно програмировать МК подключенный к внешнему источнику питания и заодно смотреть что МК выводит в Serial.

в общем все замечательно работает.

моя задача - мнимизировать потребляемый ток МК. для этого в цепь питания МК подключен мультиметр в режиме амперметра - и я online вижу потребляемый ток.

то есть схема такая:

laptop -> USB -> FTDI(w/o Vcc) -> MCU <- (A) -battery

в режиме сна МК потребляет около 0.004mA или 44uA.

проблема в том, что если я отключаю от МК FTDI адаптер:

MCU <- (A) -battery

то амперметр начинает показывать потребление 0.11mA! 

Почему оно возрастает?

я уже пробовал шунтировать на Serial порту у МК RX пин - замыкал его резистором 1kOm на GND - не помогло.

так же в коде пробовал выключал Serial полностью - тоже не помогает.

даже на простом тестовом коде, который включает режим сна - происходит тоже самое.

#include <RH_RF95.h>  
#include <SPI.h>  
#include <SPIFlash.h>  
#include <LowPower.h>  
  
RH_RF95 rf95;  

SPIFlash flash(5);  //Anarduino

void setup()  
{  
   Serial.begin(9600);
   Serial.println("start");
  
   rf95.init();  
     
   if (flash.initialize()) {
            Serial.print("SPI Flash Init OK ... UniqueID (MAC): ");
            flash.readUniqueId();
            for (byte i=0;i<8;i++)
            {
                Serial.print(flash.UNIQUEID[i], HEX);
                Serial.print(' ');
            }
                Serial.println();
                //flash.sleep();
    }
    else Serial.println("SPI Flash Init FAIL!");

   Serial.flush();
   flash.sleep();
   rf95.sleep();  
  
}  
  
void loop()  
{  
   LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF); 

   //LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF); 
    
}  

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

Заранее спасибо.

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

d00m,  А какой ток показывает прибор, когда ардуина не спит ? Может вы думаете, что ардуина питается от вашего аккума, а она на самом деле  кушает крохи с шин RX и TX UARTа, которые как известно всегда подтянуты к питанию. Особенности входной цепи позволяют получать питание с любого входа. Сответссно когда вы отключаете UART пропадает основное питание, и ардуина начинает кушать аккум.

d00m
Offline
Зарегистрирован: 21.02.2013

dimax, судя по всему так и есть - MK чтото кушает от USB через FTDI, когда он подключен, раз при отключении возрастает нагрузка на цепь с батареей.. только получается МК кушает не "крохи" от FTDI адаптера (несмотря на то, что у него не подключен пин Vcc), а полноценно питается от него.

но как же так - везде пишут - вот потребление моей ардуины столько то микроампер и поэтому этот МК работает от батарейки годами.

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

когда мой девайс не спит - он включает пин на котором висят термосенсоры, запитывает их, измеряет температуру, и передает данные в эфир. при этом потребление максимум 40-50mA.

в общем ниче не понимаю. как быть ?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

d00m, а кто может понять? Что вы к этой ардуине подсоединяли  -не известно, схемы соединения вы не  рисовали. Что это вообще за дуня -неизвестно (ссылка не работает). Почему она  должна мало кушать во сне -если на ней что-то ещё помимо МК есть? Есть источники, в которых говорится именно про эту плату, что именно она может во сне есть "сколько-то микроампер" ?

d00m
Offline
Зарегистрирован: 21.02.2013

для простоты я отключил МК от схемы, я же написал все подробно..

сайт не работает да. со вчера почемуто..

аналог -  https://lowpowerlab.com/shop/moteino-r4

источники были на офф форуме. но и на форуме moteino тоже есть.

например

https://lowpowerlab.com/forum/index.php/topic,1620.0.html

там другая проблема обсуждается, но про потребление есть данные.

у меня же повторяемость 100% - отсоединил адаптер - начало кушать.

 

 

axill
Offline
Зарегистрирован: 05.09.2011

Чудес не бывает. Чтобы ардуина мало потребляла надо постараться и по железной части и по программе. Тему уже много раз обсуждали

то, что потребление снижается при подключении адаптера результат так называемого паразитного питания. Собственно вы это уже обсудили. Я думаю ситуация усугубляется тем, что у вас напряжение на выходах FTDI 5в, а на аккумуляторе заметно меньше. Если есть переключатель на адаптере, выставьте 3.3в, эффект должен снизиться или даже пропасть

d00m
Offline
Зарегистрирован: 21.02.2013

axill

да! там есть такой джампер, как я сам не догадался - переключил на 3 вольта и этот эффект пропал.

теперь и при подключенном адаптере МК потребляет 0.11mA.

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

они все таки получают микроамперы..

a5021
Offline
Зарегистрирован: 07.07.2013

Отцепите радиомодуль и посмотрите, что с потреблением происходит без него.

d00m
Offline
Зарегистрирован: 21.02.2013

он там сильно припаян.. отпаивать неохота, но похоже в нем и есть причина.

скорее всего это он потребляет 110uA, хотя и спит согласно коду..

a5021
Offline
Зарегистрирован: 07.07.2013

Проблема может крыться в том, что МК уходя в сон оставляет ноги в "вывешенном" состоянии. Т.е. они, по сути, не подключены никуда. Линии, связывающие МК и радиомодуль оказываются "в воздухе" и начинают ловить все помехи, какие только мимо пролетают. Радиомодуль воспринимает их, как управляющие сигналы и начинает беспорядочно переключаться (вплоть до включения на прием или передачу), что и выливается в повышенное энергопотребление. За атмегу не скажу, но сам наблюдал такое на связке stm32 + nrf24l01.

d00m
Offline
Зарегистрирован: 21.02.2013

так что можно поделать?

говорят можно и нужно что-то делать со свободными пинами - или аппаратно или программно.

какието резисторы ставить чтоли? 

в коде я пытался все свободные цифровые пины переводить в OUTPUT и делать LOW - не помогало..

нужно ли както по другому действовать? нужно ли и аналоговые пины учитывать при этом?

a5021
Offline
Зарегистрирован: 07.07.2013

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

axill
Offline
Зарегистрирован: 05.09.2011

d00m пишет:

так что можно поделать?

говорят можно и нужно что-то делать со свободными пинами - или аппаратно или программно.

какието резисторы ставить чтоли? 

в коде я пытался все свободные цифровые пины переводить в OUTPUT и делать LOW - не помогало..

нужно ли както по другому действовать? нужно ли и аналоговые пины учитывать при этом?

со свободными пинами можно делать одно из трех:

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

- оставить в режиме входа и включить встроенную подтяжку

- перевести на выход

кроме того кое что из переферии можно отключить, например ADC

к тому же минимальное потребление достигается в режиме POWER_DOWN, а не IDLE. вы какой используете?

на плате может быть регулятор напряжения который потребляет

еще рекомендуется от кварца отказываться для снижения потребления

d00m
Offline
Зарегистрирован: 21.02.2013

axill 

а можно для "тех кто в бронепоезде" дополнительно объяснить?

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

оставить в режиме входа и подтянуть это - pinMode(Input) и резистором к Vcc(Vin) или к GND?

я точно не буду пользоваться остальными пинами, а именно всеми кроме 6, 7, 8, 9, А0 и А2.

так мне можно все подтянуть через резистор к GND? какой номинал? 

- оставить в режиме входа и включить встроенную подтяжку

это pinMode(INPUT_PULLUP)? делал такое. чтото на потребление не повлияло. 

- перевести на выход

pinMode(OUTPUT) полагаю. тоже делал.  и еще в LOW заводил при этом. тоже не повлияло никак.

а как отключить ADC?

я использую  LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);

 

axill
Offline
Зарегистрирован: 05.09.2011

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

надо понимать, что забота отнеиспользованных пинах может дать несколько мкА. Сейчас когда у вас 110мкА вы это не заметите

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