• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

измерить напряжение питания ESP очень просто

nikolz

Well-known member
Добрый день,
Выкладываю решение данного вопроса.
1) для измерения напряжения питания ESP есть функция SDK
system_get_vdd33
однако, ее применение согласно документации требует изменения значения 107 байта:
-------------------------------
• system_get_vdd33 can only be called when TOUT pin is suspended.
• The 107th byte in esp_init_data_default.bin (0 ~ 127 bytes) is named as
vdd33_const. When TOUT pin is suspended, vdd33_const must be set as
0xFF, which is 255.
• The return value of system_get_vdd33 may be different in different Wi-Fi
modes, for example, in Modem-sleep mode or in normal Wi-Fi working mode.
-----------------------------------
2) есть еще одно решение - это свалка pvvx.
================-
3) есть еще оно решение, которое решает данную задачу без свалок и необходимости переписывая байта 107 в системной области параметров.
-------------------------
С помощью этого решения можно измерять напряжение питания ESP .
Для этого надо воспользоваться функцией int vdd33=readvdd33()
Эта функция есть в библиотеке libhy.a и используется в lua nodemcu.
функция возвращает значение напряжения питания.
===================
Например, у меня eSP-12 работает от батарейки через преобразователь.
Напряжение питания мультиметром =3.20 в
Напряжение измеренное данной функцией 3185..3170 мв
---------------------
Всем успехов.
===========================
Дополнение.
Для управления параметрами RFconfig я наприсал пару функций.
Вы можете использовать их например для включения режима АЦП изменяя содержимое ячейки 107 либо управлять опциями WIFI без создания нового файла
esp_init_data_default.bin
Для того чтобы изменения вступили в силу надо перезапустить ESP или войти и выйти из сна.
вот эти функции
Код:
char sectorRF[SPI_FLASH_SEC_SIZE] __attribute__((aligned(4)));
uint32 init_sector;
//---------------читает сектор RF в массив sectorRF
void get_sectorRF( ) 
{     enum flash_size_map size_map = system_get_flash_size_map();
     switch (size_map) {
            case FLASH_SIZE_4M_MAP_256_256:
                init_sector = 128 - 4;     break;
            case FLASH_SIZE_8M_MAP_512_512:
                init_sector = 256 - 4;      break;
            case FLASH_SIZE_16M_MAP_512_512:
            case FLASH_SIZE_16M_MAP_1024_1024:
                init_sector = 512 - 4;     break;
            default:
                init_sector = 1024 - 4;    break;
     }
  spi_flash_read ( init_sector * SPI_FLASH_SEC_SIZE,(uint32 *)sectorRF, sizeof(sectorRF)) ;
}
//-------------------- функция пишет сектор на свое место
void set_sectorRF(){
  spi_flash_erase_sector(init_sector);
spi_flash_write ( init_sector * SPI_FLASH_SEC_SIZE,(uint32 *)sectorRF, sizeof(sectorRF));
}
Пример применения:
// включаем режим измерения питания
get_sectorRF( ) ;
sectorRF[107]=255;
set_sectorRF();
//включаем режим АЦП
get_sectorRF( ) ;
sectorRF[107]=33;
set_sectorRF();
---------------------------
Всем успехов и процветания.
 
Последнее редактирование:

pvvx

Активный участник сообщества
есть еще одно решение - это свалка pvvx.
Угу и все решения пока от туда. Народ почему-то не хочет сам разбирать потроха SDK, а свято верит PDF липовой документации от Espressif.
Но там не всё так просто как вы считаете. Не забудьте управлять флажком переключения ADC для WiFi драйвера... :)
Я его вставил в свой код позже, по тому его нет в Lua :p
tout_dis_txpwr_track = 1; // флаг отключения процедуры подстройки питания для WiFi
 
Последнее редактирование:

nikolz

Well-known member
Угу и все решения пока от туда. Народ почему-то не хочет сам разбирать потроха SDK, а свято верит PDF липовой документации от Espressif.
Но там не всё так просто как вы считаете. Не забудьте управлять флажком переключения ADC для WiFi драйвера... :)
Я его вставил в свой код позже, по тому его нет в Lua :p
tout_dis_txpwr_track = 1; // флаг отключения процедуры подстройки питания для WiFi
Я не сталкиваюсь c этой проблемой так как использую режим 2
и читаю после установления связи перед отсылкой данных
либо до установления в самом начале user_ init
---------------------
Есть другая неприятная вещь.
Она указана в документации. Раньше я не измерял питания, поэтому не обращал на это внимание.
-------------------------
Суть ее в том, что при измерении напряжения питания внешний вход должен быть отключен.
Буквально - должен быть в воздухе.
---------------
У меня получается, что если его закоротить то напряжение питания измеряется не правильно.
--------------
В результате можно либо использовать ацп для измерения питания, либо для измерения внешнего напряжения.
Вместе эти режимы не совместимы.
 

pvvx

Активный участник сообщества
Я не сталкиваюсь c этой проблемой так как использую режим 2
и читаю после установления связи перед отсылкой данных
Думаю, что это не важно. Если во время замера ADC чего либо, произойдет подстройка WiFi, то она тоже использует ADC (значения в регистрах ADC меняются во время работы SDK, далее не уточнял, т.е. уже забыл - не пользуюсь более ESP).
И вполне возможно, что она подстраивает путем похожим на "измерение питания", т.е. с задействованием входа ADC.
Потом спечет вам пирожки :)
Читайте доку - напряжение питания надо указывать в каком-то байте конфигов и спросите себя - зачем... Типа чип сам не может измерить при каких-то условиях?
Espressif вам не опишет свои глупости, допущенные при разработке чипа и ПО, т.е. что там у них в реале и как реализовано вы сможете узнать только потрудившись сами.
В результате можно либо использовать ацп для измерения питания, либо для измерения внешнего напряжения.
Вместе эти режимы не совместимы.
Уже много раз написано - при измерении питания у ADC на входе включается внутренний "резистор"- делитель на Vcc. Если установлен внешний резистор, то надо пересчитывать с учетом того, что у вас подключено ко входу ADC.
 
Последнее редактирование:

AlexandreVN

Member
Апну тему. Результаты измерения прыгают, условно говоря в пределе 220-290. Где-то уже на форуме про это писали, но сейчас не нашел. Это можно исправить или только усреднять по выборке измерений?
 

enjoynering

Well-known member
Суть ее в том, что при измерении напряжения питания внешний вход должен быть отключен.
Буквально - должен быть в воздухе.
вот это и останавливает от использования измерения напряжения этой функцией, тк на всех wimos и им подобным A0 подключен к делителю.


Результаты измерения прыгают, условно говоря в пределе 220-290
мне помогает простейший медианный фильтр на 3 измерения.
 

Вложения

nikolz

Well-known member
давно уже не измерял, но помню, что прыгало в пределах 1%
 
Сверху Снизу