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

Странная работа ADC esp32 wroom

DimaSm

New member
ESP32 wroom и драйвер VNH2SP30, выход CS драйвера подключен к GPIO 32. AnalogRead(32) стабильно выдавал 56-100 при работе двигателя (коллекторный 12В), до 180 при перегрузке (застревание двигателя), функция сравнения с максимальным значением 180 отключала двигатель.
В процессе отладки других функций AnalogRead() стал вести себя предельно странно - как будто подгоняет измеряемое значение, делая его чуть выше максимального, хоть какое поставь туда.
Например (на коде ниже):
56 >= max 50 (если установить maxCurrent = 50)
136 >= max 120
2345 >= max 2000 и т.д.
При этом естественно, измеренное в каждом цикле значение все время меняется, но в указанных выше пределах, как будто опорное напряжение стало зависимым от переменной maxCurrent (в коде обращение к этой ноге и этой переменной больше нигде не встречаются).
Или это нога дак странно накрылась (сгорела)? НО как оно привязалось к значению maxCurrent?
Функциями из adc.h аналогично...

int maxCurrent = 200; //ограничение максимального тока привода ( на контакте CS ~200)

..setup().........
pinMode(CS, INPUT);

..loop()......
txCurrent = analogRead(CS);
if (txCurrent >= maxCurrent) { //превышение максимального тока привода (застревание)
Serial.print(txCurrent);
Serial.print(">= max ");
Serial.println(maxCurrent);
//Stat = "Overload";
digitalWrite(EN, LOW);
}
 

DimaSm

New member
Возможно просадка питающего напряжения, чем больше мотор тянет, тем более просаживается напряжение.
это врядли... мотор тотже, питание esp и мотора раздельное, и не объясняет, почему результат измерения зависит именно от переменной сравнения.... Чудеса... Даже не представляю куда копать...
 

CodeNameHawk

Moderator
Команда форума
это врядли... мотор тотже, питание esp и мотора раздельное, и не объясняет, почему результат измерения зависит именно от переменной сравнения
Не надо гадать на кофейной гуще.
Просто в цикле оставьте txCurrent = analogRead(CS); и вывод в сериал. выкиньте переменную maxCurrent вообще.
Примерно как тут ESP32 Wroom32 DevKit Analog Read Example | Circuits4you.com
Отладку надо делать выкинув из кода все лишнее.
 

DimaSm

New member
Не надо гадать на кофейной гуще.
Просто в цикле оставьте txCurrent = analogRead(CS); и вывод в сериал. выкиньте переменную maxCurrent вообще.
Примерно как тут ESP32 Wroom32 DevKit Analog Read Example | Circuits4you.com
Отладку надо делать выкинув из кода все лишнее.
Безусловно верное замечание. Была иллюзия, что как в квантовой физике, результаты измерения зависят от присутствия наблюдателя :) На деле зависимость была вызвана отфильтровыванием результата самим сравнением :) Без сравнения разброс результатов ADC очень приличный. Но пока не понял, как оно четко работало раньше...
 
Сверху Снизу