• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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 очень приличный. Но пока не понял, как оно четко работало раньше...
 
Сверху Снизу