• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Вопрос Расход электроенергии в зависимости от загрузки процессора

Pavlo

New member
Всем привет.
Вопрос от новичка на отвлеченную тему: подскажите, а загружают ли всякие там Тикеры процессор?

Я вот смотрю (кажется у Рената... забыл его ник) есть Тикер каждые 5 миллисекунд для проверки нажатия кнопки.
Насколько это правильно?
 

Pavlo

New member
Тут правда почти нет особых вычислений.
Обычно загрузка процессора происходит при сложных вычислениях.
Но опять же, если загрузить процессор всякими вычислениями - насколько возрастет потребление электроэнергии?
 

Pavlo

New member
И тут же: есть ли где-то примеры, на Ваш взгляд, самых идеальных имплементаций того или иного функционала?
 

nikolz

Well-known member
И тут же: есть ли где-то примеры, на Ваш взгляд, самых идеальных имплементаций того или иного функционала?
Если вопрос про ESP8266, то загрузка процессора практически не влияет на потребление.
Если модуль WIFI отключить то ток потребления 15 ма
Если модуль включить но не передавать то ток потребления 70 ма
В момент передачи сообщения (вкл передатчик) ток потребления 300 ма.
Подробнее про потребление см документацию и на форуме.
 

pvvx

Активный участник сообщества
Загрузка задачами, отличными от исполнения
asm volatile ("waiti 0;"); // Wait for Interrupt
вызывает повышенное потребление у CPU.
В системе NON_OS_SDK процессор находится в цикле ожидания прерываний на данной команде wait 0 в ets_run().
Эта команда снижает его потребление. В цикле встроен опрос таблиц флагов софт-таймера и тасков.
Т.е. чем больше у вас включено софт таймеров или вы не вернули управление в ets_run(), тем больше жрет CPU.
CPU ESP8266 жрет более 50 мА на средней загрузке и более при любом копировании или работе с RAM.
При исполнении только wait 0 - средний ток вроде 17 мА (зависит от включенных доп. клоков, к примеру на I2S и другие потроха, а так-же от частоты CPU/PLL).
Передача WiFi ограничена TDP. Максимальный уровень не установлен, т.к. в разных SDK он разный.
В первых выделение тепла доходило до 1.5Вт и чип умирал. В последующих отладили ограничение по кривому датчику температуры и напряжению питания... Для этого требуется калибровка WiFi в инициализации. Т.е. это где-то (на ощупь :)) к 1 Вт... КПД то передатчика фиговое...

Система тактирования (без CPU -> CPU = off) - генератор кварца и прочий минимум (таймер, PLL CPU, ...) жрет вроде к 5 мА по минимуму. Точных замеров на ESP8266 не делал.
Низкочастотный генератор на RC цепочке (RTC) и ключи питания - это актив в deep_sleep = от 20 мкА + потребление Flash после передачи команды ей sleep. Без неё - см. PDF на Flash.

ESP8266 по умолчанию, когда работает станцией, включает программно-аппаратный режим понижения питания (DTIM(1) минимум). Отключает таймеры, CPU, PLL на паузу между beacon. Перед окном приема beacon он включает PLL, ждет её устаканивания, принимает beacon, отрабатывает накопленные прерывания (не все!). Любая активность таймера или тасков пользователя в данном режиме повышает его потребление - на отработку их уходит время включенных всех потрохов, вместо сна... Итоговое среднее долговременное потребление в DTIM() (режим LIGTH) в реальных условиях от 15..17 мА (с условием, что сам ESP ничего не передает в сеть и к нему никто не ломится, иначе будет чаще отключаться DTIM() режим и переходить на постоянную активность с жором за 80 мА в более пары секунд после каждой итерации приема-передачи данных - это у других называется LPS и IPS режимы и имеют настраиваемую конфигурацию, в отличии жестокой, заданной Espressif у ESP).
 
Последнее редактирование:

Pavlo

New member
Гм... но ведь в этом как бы вся суть esp8266/esp8285 - пересылка данных.
Т.е. желательно ограничивать по частоте использования.
 

pvvx

Активный участник сообщества
Еще вопрос: чем Вы так точно меряли?
24-х битным сдвоенным ADC c калибровкой по внешнему опорнику (с поверкой), иногда и INA219, когда точность не нужна.
Пишите тест и измеряете, примерно как тут: SDKnoWiFi/Power_SdkNoWiFi.gif at master · pvvx/SDKnoWiFi · GitHub
Гм... но ведь в этом как бы вся суть esp8266/esp8285 - пересылка данных.
Т.е. желательно ограничивать по частоте использования.
Ничего не надо ограничивать.
Пересылка по WiFi в TCP у ESP8266 ограничена HT20 приемо-передатчиком и составляет в тестах 1.2 мегабайта в сек при 160 MHz CPU. И так он может работать непрерывно, если модуль имеет нормальную плату, контакт с корпусом и разводку слоев под ним, да естественную конвекцию (не завернут в вату :)).
Если вы про потребление CPU при копировании/чтении/записи RAM - то эти процедуры кратковременны и пик виден только при старте, когда в инициализации записывается обнуляется bss...

Часть замеров можно найти тут https://esp8266.ru/forum/threads/razrabotka-biblioteki-malogo-webservera-na-esp8266.56/ :

Измеренные ТТХ по питанию модуля:
Потребление при передаче на скорости к 1 мегабайт в секунду - пример два графика в конце
Потребление модулем в разных режимах WiFi-sleep модуля и стартовые примеры
Потребление по питанию часов (по ноге RTC_VDD)
Потребление при прошивке модуля с помощью esptool.py
Закорачивание I/O выхода вызывает увеличение тока на 50 мА: http://esp8266.ru/forum/attachments/esp-01-gpio15-out-gif.885/
Потребление с фирменной фичей в режиме ST, при поиске внешней AP.
 
Последнее редактирование:

Pavlo

New member
Если вопрос про ESP8266, то загрузка процессора практически не влияет на потребление.
Если модуль WIFI отключить то ток потребления 15 ма
Если модуль включить но не передавать то ток потребления 70 ма
В момент передачи сообщения (вкл передатчик) ток потребления 300 ма.
Подробнее про потребление см документацию и на форуме.
ArduinoOTA - какая тут активность и соотв. потребление?
Тут, по идее, модуль должен как то сообщать о том, что он готов принимать прошивку "по воздуху".
 

pvvx

Активный участник сообщества
ArduinoOTA - какая тут активность и соотв. потребление?
Тут, по идее, модуль должен как то сообщать о том, что он готов принимать прошивку "по воздуху".
Зависит от режима работы - AP или ST, или совместно активны AP+ST.
+ Потребление Flash в режиме стирания и записи описанное в её PDF.
Скорость записи Flash (с учетом стирания секторов - оно самое долгое в данном процессе) через WiFi и более-менее нормально написанное ПО примерно 150..180 килобайт в сек.
Соответственно в Arduino этот процесс должен занимать около 3..4 секунд. Если более - пишите писателям ArduinoOTA :)
 
Последнее редактирование:

Pavlo

New member
Зависит от режима работы - AP или ST, или совместно активны AP+ST.
+ Потребление Flash в режиме стирания и записи описанное в её PDF.
Скорость записи Flash (с учетом стирания секторов - оно самое долгое в данном процессе) через WiFi и более-менее нормально написанное ПО примерно 150..180 килобайт в сек.
Соответственно в Arduino этот процесс должен занимать около 3..4 секунд. Если более - пишите писателям ArduinoOTA :)
Это потребление в момент прошивки..? А во время работы? Я имею ввиду, что ведь как то модуль "делает себя видимым для прошивки". В этот момент он много потребляет?
 

pvvx

Активный участник сообщества
Это потребление в момент прошивки..? А во время работы? Я имею ввиду, что ведь как то модуль "делает себя видимым для прошивки". В этот момент он много потребляет?
Он работает с активной AP или ST. Потребление в данных режимах описано неоднократно.
В режиме ST среднее потребление зависит от опций sleep для WiFi: NONE, MODEM, LIGHT.
Потребление модулем в разных режимах WiFi-sleep модуля
 
Последнее редактирование:
Сверху Снизу