Странное потребление энергии в спящем режиме
Я закончил свой проект и теперь измеряю ток, но что-то не так. Я использую плату Arduino Pro Mini и библиотеку LowPower, но потребление составляет около 3,5 - 5 мА и не менее 500 мкА (плата почти все время находится в спящем режиме).
Когда я начал работать с платой, ее светодиод был удален, но я думаю, что эта работа была сделана неправильно. Как я могу проверить, что светодиод был удален правильно?
Спасибо всем.
EDIT1: Странное энергопотребление не связано со светодиодом платы.
EDIT2: @Gerben предложил мне проверить состояние контактов SPI, подключенных к плате. Я использую в этом проекте модуль SD-карты и модуль GSM/GPRS, но виновником этого чрезмерного энергопотребления является первый. Затем я отключил все контакты модуля SD-карты, и тогда я получил около 60 мкА, так что проблема в этих контактах, но я не могу уменьшить потребление энергии. Контакты модуля SD-карты - 10, 11, 12 и 13, поэтому я использовал такие операторы, как digitalWrite(10, LOW), digitalWrite(11, LOW) и так далее после чтения/записи на SD-карту, но это бесполезно.
EDIT3: Я решил загрузить представление моего проекта с использованием Fritzing. Внешние модули не идентичны, но они содержат те же пины.
Общий вид схемы:
.
Подробности соединений:
Я использую следующие внешние компоненты:
- Модуль SD-карты
- Модуль GPRS/GSM A6
В моем проекте есть несколько важных деталей:
- Модуль GPRS питается индивидуально. Другая батарея предназначена для питания платы Arduino и модуля SD-карты.
- Батарейки 6 В.
- База транзисторов управляется 2 и 3 цифровыми выводами соответственно.
- Выводы 8 и 9 платы Arduino действуют как выводы RX и TX с использованием библиотеки
AltSofSerial.h.
@cpinamtz, 👍1
Обсуждение2 ответа
Если вы физически удалили светодиод, убедитесь, что его контактные площадки не закорочены старым припоем. Если нет, то вы удалили его правильно.
Однако: 5 мА может быть вполне разумным потреблением тока для вашего проекта. Не видя полной схемы и не анализируя ваш код, невозможно сказать, какой ток вы ожидаете увидеть.
Я загрузил такой простой проект: #include <LowPower.h>
void setup(){
LowPower.powerDown(SLEEP_TIME, ADC_OFF, BOD_OFF);
}
void loop(){
}
И потребление чуть меньше 3,5 мА. Так что, думаю, дело не в коде., @cpinamtz
Например, что? И как вы питаете плату?, @Majenko
Я питаю проект с помощью 4 батареек типа АА емкостью 1900 мАч., @cpinamtz
Честно говоря, меня бы меньше беспокоило потребление тока в 5 мА, чем 30%-ная потеря мощности на линейном стабилизаторе. Что ещё подключено к плате?, @Majenko
Интересно... Я изолировал плату, снова измерил ток, и теперь получаю 60 мкА. Значит, проблема в схеме... К ней подключены SD-карта и GSM-модули, оба управляются транзисторами., @cpinamtz
@PinaGamer Если вы снимаете питание с помощью транзистора, также убедитесь, что выводы SPI/UART не находятся в состоянии HIGH. В противном случае питание будет поступать в модули через этот вывод (и через ограничивающие диоды в микросхемах модулей)., @Gerben
@Gerben Я использую AltSoftSerial.h [библиотеку](https://www.pjrc.com/teensy/td_libs_AltSoftSerial.html) для связи с GSM-модулем, используя цифровые контакты 8 и 9, а также контакт 10 для начала связи SPI с модулем SD-карты, но нет никаких операторов типа digitalWrite(8,HIGH) или чего-то подобного., @cpinamtz
@PinaGamer Я не собираюсь читать весь код библиотеки, чтобы выяснить, установлен ли выход в состояние HIGH в режиме ожидания. Вы можете сделать это самостоятельно. Или можно пойти простым путём: пока Arduino находится в спящем режиме, отсоединить модули и с помощью мультиметра проверить, есть ли на каком-либо из выходных контактов, подключенных к модулям, напряжение 5 В. Недавно я работал над проектом, в котором мне пришлось отключить SPI и установить низкий уровень на выводе MOSI перед выключением устройства, подключенного к шине SPI., @Gerben
РЕШЕНИЕ [автор OP]
Моя проблема заключалась в том, что модуль SD-карты потреблял энергию, когда он управлялся транзистором, а моя плата Arduino находилась в спящем режиме. Поэтому я записал в void setup() операторы digitalWrite(PIN, HIGH), где PIN представляет все контакты, подключенные к плате, которые принадлежат модулю SD-карты (контакты DI, DO, CS и CK), чтобы включить внутренний резистор этих контактов. Затем я проверил потребление энергии и оно составило менее 100 мкА.
- Питание светодиодной ленты - Сколько ампер?
- Самый компактный способ питания Arduino от розетки
- Как запитать Arduino и 1 цветную светодиодную ленту от одного источника питания
- Arduino PRO Mini — площадки [были «перемычками»] на задней панели и низкое энергопотребление
- Питание моторного щита от Arduino pro mini 5v RAW Pin 150mAh не может запустить сервопривод
- Можно ли запитать 25 светодиодов через USB?
- Аналоговый вход потребляет ток, когда Arduino выключен
- Светодиодная панель ESP32 с регулируемой яркостью и MOSFET
Советы можно найти в [Методы энергосбережения для микропроцессоров](http://gammon.com.au/power). Сомневаюсь, что это как-то связано с неработающим светодиодом., @Nick Gammon
Как можно удалить светодиод так, чтобы он потреблял 5 мА? Это бессмысленно. Он либо всё ещё там, либо его нет. Если бы удаление привело к короткому замыканию контактов, то ток потребления был бы гораздо выше 5 мА., @Nick Gammon
@NickGammon Я думаю, что проблема в модуле SD-карты, потому что если я отсоединяю контакты CS, DI, DO и CK, то потребление составляет около 60 мкА., @cpinamtz
@PinaGamer, вы просто отключили эти контакты или также контакты VCC и GND модуля SD-карты? Если нет, попробуйте оставить эти контакты подключенными: если это модуль, у него должен быть встроенный преобразователь и, возможно, преобразователь уровня, которые остаются под напряжением (в этом случае подайте питание через контакт Arduino и выключайте его, когда он не нужен). Если вы отключили только эти контакты и оставили VCC и GND подключенными, проверьте осциллографом, меняется ли состояние. Если нет, попробуйте также измерить ток, потребляемый SD-картой (модулем) в спящем режиме., @frarugi87
@frarugi87 Я отключил только те контакты, о которых говорил выше, чтобы VCC и GND оставались подключенными. Что вы рекомендуете? Удалить транзистор и активировать или деактивировать модуль SD-карты с помощью цифрового контакта?, @cpinamtz
@PinaGamer, о каком транзисторе вы упомянули ? Предлагаю вам 1) попробовать измерить ток, протекающий через модуль SD, только в спящем режиме. 2) оставить модуль SD подключённым, но отсоединить только VCC и измерить весь ток. 3) Опубликовать ссылку на используемый вами модуль SD; возможно, появятся другие идеи ., @frarugi87
@frarugi87 Потребление в предложенных вами случаях составляет: 1) 4,8 мА 2) 3,9 мА. Модуль SD-карты — [этот](https://www.elecfreaks.com/wiki/index.php?title=SD%26MMC_Card_Module_Double_Side)., @cpinamtz
Подождите, вы заблокировали землю модулей? Если да, попробуйте подать на все контакты SD-карты значение HIGH, а не LOW (иначе вы пытаетесь запитать устройство через цифровые контакты). И... подумайте об использовании PMOS-транзистора для блокировки контакта VCC..., @frarugi87
digitalWrite(10, LOW) или лучше digitalWrite(10, HIGH) не будут работать, если вы сначала не отключите SPI., @Gerben
@frarugi87 Не понимаю, почему для отключения модуля SD-карты нужно высокое значение, а не низкое. Зачем мне нужен PMOS-транзистор?, @cpinamtz
@PinaGamer, потому что если выключить транзистор, все узлы на SD должны быть подключены к VCC, единственному оставшемуся соединению. Если подать 0 В на любой вывод, на плате появится дифференциальное напряжение, что-то включится. Попробуйте установить высокое значение (чтобы всё было на VCC) или переведите выводы в режим высокого импеданса (то есть в режим входа). Для размыкания вывода VCC вместо вывода GND используется PMOS-транзистор (или PNP), что позволяет сохранить заземление вместе (обычно это лучший подход, поскольку заземления обычно проектируются с учётом того, что они должны быть вместе)., @frarugi87
@Gerben Вы рекомендуете мне использовать
digitalWrite(10, HIGH)для включения [внутреннего PULL-UP](https://www.arduino.cc/en/Tutorial/DigitalPins) этого пина? Почему? При таком использовании ток снижается до 80 мкА., @cpinamtzСм. комментарий frarugi87. Ничего общего с подтягиваниями., @Gerben
@Gerben frarugi87 предлагает мне поместить выводы в высокоомное состояние, поэтому в
void setup()я поставилdigitalWrite(10, HIGH), @cpinamtzdigitalWrite(10, HIGH)не означает высокий импеданс. Высокий импеданс, если вы меняете тип контакта на ВХОД. ПоэтомуpinMode(10, INPUT). Но я имел в виду, что он говорил, что нужно установить контакт на Vcc, а не на GND. К тому же, нет смысла делать это вsetup. Но, пожалуйста, перечитайте все комментарии, потому что, по-моему, вы совершенно не понимаете, о чём мы говорим., @Gerben