Вольтметр на ESP32 «ВольтМИ»: четыре канала, журналирование, анализ графиков, точность на ваше усмотрение…

Для исследования устройств Джона Бедини понадобился мне четырёхканальный вольтметр.

Если кто не знает — устройства Джона Бедини заряжают аккумуляторы.

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

Реализован вольтметр на микроконтроллере ESP32. Правда, у этого микроконтроллера проблемный АЦП, но с этим можно справиться программными средствами.

Итак, что получилось

Внешний вид «ВольтМИ»
bolshoj-voltmi.jpg melkij-voltmi-2.jpg

Сбор данных с четырёх каналов АЦП с частотой 1000 измерений в секунду. Первое преобразование — среднее квадратичное на каждых 50 измерениях.

Получающиеся 20 измерений в секунду отправляются в веб — интерфейс для визуального отображения. Параллельно на основании этих 20 измерений накапливается десятисекундное значение для журнала. Журнал записывается во внутреннюю файловую систему микроконтроллера — SPIFFS.

Журнал пишется в файлы размером по 30 килобайт.

Журнал — это обычный текстовый файл. Каждая строка представляет из себя метку времени и показания четырёх вольтметров.

Метка времени передается в десятичном формате, данные вольтметров — в шестнадцатеричном. Так сделано, чтобы упростить передачу данных.

Управлять файлами журналов можно через веб — интерфейс вольтметра.

Изготовление

схема вольтметра «ВолтМИ»

Резистивные делители на входах AMS1117 определяют верхнюю границу измеряемого напряжения

Для пары 10k:40k — это примерно 30 вольт.

Соотношение этих резисторов нужно подбирать экспериментально.

Ёмкости по 100uF добавляют стабильности WiFi.

LCD можно использовать 20x4 или 16x2, настройка в первых строках main.cpp.

Недостатком схемы является низкое входное сопротивление. В моем случае это совершенно не важно, так как измеряются напряжения на аккумуляторах.

Вы можете изготовить входные цепи исходя из ваших потребностей, программа при этом не изменится.

Вторым недостатком схемы является температурный дрейф. Дрейфуют, наверное, AMS1117. Он небольшой, но присутствует. Разница показаний только что включенного устройства и устройства работавшего 10 — 15 минут, приблизительно 30 — 50 милливольт. После прогрева показания вольтметров стабильны.

Прошивка

Вольтметр прошивается и из среды PlatformIO и из Arduino — в архиве две отдельных папки. Для Arduino нужно скопировать библиотеки, они в папке libraries.

Все как обычно, не забудьте указать логин и пароль вашей локальной сети.

Подключение к компьютеру

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

Для того, чтобы вольтметр подключился к локальной сети, нужно нажать кнопку BOOT на плате ESP32.

Сначала происходит попытка подключения к локальной сети. В случае неудачи при повторном нажатии кнопки BOOT вольтметр поднимет точку доступа и сервер по адресу 192.168.4.1, пароль для подключения — восемь единиц.

Если нажать кнопку BOOT еще раз, вольтметр отключится от сети или закроет точку доступа.

Открыть панель управления вольтметром можно введя IP адрес в адресной строке броузера, или найдя ваше устройство в локальной сети со страницы Найти «Костёр Борисыча» в локальной сети.

Калибровка

Калибровка сводится к заполнению таблиц соответствия напряжения в вольтах отсчётам АЦП. Выполняются, калибровка крайне просто. Вам понадобится источник питания с плавной регулировкой напряжения и эталонный вольтметр. Тот, которым вы чаще всего пользуетесь.

Для калибровки нужно собрать схему:
Схема калибровки ВольтМИ

Лампа — это любая разряжалка выходной ёмкости БП.

После этого открываете веб — интерфейс вольтметра, и нажимаете кнопку «открыть». Начнут отображаться какие-то данные.

calibrate-voltmi-0.jpg

Нажимаем кнопку «калибровать ESP32». На источнике питания выставляем 0 вольт и нажимаем кнопку «взять АЦП».

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

Теперь плавно повышаете напряжение до тех пор, пока в показаниях АЦП не начнут появляться цифры. Это будет происходить в разных каналах при разном напряжении. При появлении ненулевого значения в очередном канале — берём данные АЦП.

На моем вольтметре с общим диапазоном 30 вольт эти точки примерно 2,1 — 2,3 вольта.

Теперь не спеша повышаете напряжение, посматривая на правый маленький график. Как только на графике линии становятся горизонтальными, то есть показания АЦП стабилизировались, берем следующую точку АЦП.

Я калибрую свои вольтметры с разрешением в пол вольта.

Программных ограничений на количество точек калибровки нет.

Если хотите сделать очень точный вольтметр — проведите калибровку с разрешением в 1/10 вольта.

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

В процессе калибровки в среднем окне будет выводиться текст С-программы. По окончании калибровки его нужно будет скопировать и вставить в файл «…\VoltMI\src\calibrateTable.h».

После вставки в редактор таблицы калибровки нужно просмотреть на предмет «нехороших» данных в началах и окончаниях диапазонов.

Около «0» и «4095» данные АЦП могут джигу сплясать, и получится, что скажем 2,3V это 16 АЦП, а 2,4V — это 14. Такая же ситуация при уходе АЦП за 4000.

Исправленные данные моих таблиц выглядят так:

oneCal_t calTable[4][66]={
#pragma region Красный / Red
{
  {volt:0,   k:0.0, adc: 0},
  {volt:2.3, k:0.0, adc: 0},
  {volt:2.4, k:0.0, adc:20},
  {volt:2.5, k:0.0, adc:34},
  {volt:2.7, k:0.0, adc:58}, …

 …{volt:30,   k:0.0, adc:4028},
  {volt:30.5, k:0.0, adc:4088},
  {volt:31,   k:0.0, adc:4093},
  {volt:31.5, k:0.0, adc:4094},
  {volt:32,   k:0.0, adc:4095}
}
#pragma endregion Жёлтый / Yellow


После этого вольтметр нужно будет перепрошить.

характеристика АЦП
Характеристика АЦП, точки калибровки.


Устройство готово к работе.

Ведение журналов

В течение одного эксперимента вольтметр ведет сквозную фиксацию времени. То есть сколько бы не было файлов журналов, метки времени в них будут выставлены последовательно, пока ESP32 не будет перезагружен.

Начать новый эксперимент можно сбросом контроллера.

Запись файлов журналов кешируется на достаточно большой промежуток времени. Чтобы не потерять данные, по окончании эксперимента, перед выключением вольтметра, нажимайте кнопку BOOT. При этом произойдет запись кeша в файл.

Есть ли польза от «ВольтМИ»?

Да! Для меня неоспоримая. Я, к примеру, понял, почему перед зарядкой моторм Бедини аккумулятор нужно разрядить «в хлам». Вот картиночка:

Разряд 10-летнего АКБ 7Ah лампой 5W №1
Разряд 10-летнего АКБ 7Ah лампой 5W №1.

Как видите, напряжение на клеммах АКБ падает ступенями — слабые банки переполюсовываются, переходят в режим заряда от соседних банок. Такая банка пуста как банка, и после разряда её нужно сразу заряжать волшебными пендалями самоиндукции.

Кроме того, сравнивая графики полного разряда можно отслеживать процесс восстановления аккумулятора.

Разряд 10-летнего АКБ 7Ah лампой 5W №2
Разряд 10-летнего АКБ 7Ah лампой 5W №2.

 

Так выглядит полный цикл заряда, тринадцать с половиной часов!

Первый цикл заряда АКБ 7Ah мотором Бедини
Первый цикл заряда АКБ 7Ah мотором Бедини

Красный канал — напряжение на батарее, зелёный — питание мотора.

«Мохнатость» графика напряжения на АКБ в начале цикла — это изменение внутреннего сопротивления батареи — лет шесть на балконе простояла. К концу цикла линия становится ровной, параметры АКБ стабилизируются.

 

И, в заключении рабочий процесс. 34 с половиной часа восстановления АКБ. На графике: красный канал — напряжение на батарее, жёлтый питание мотора Бедини.

ВольтМИ процесс восстановления АКБ мотором Бедини
ВольтМИ: процесс восстановления АКБ мотором Бедини. Заряд — разряд — заряд — отдых — заряд.

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

CMS dSQL. ©2006-2016 Surin S. B., aka SunSB. mailto:sunsb{at}narod.ru