esp32 AnalogRead

Ripper
Offline
Зарегистрирован: 08.01.2017

Хочу получить напряжение на входе ...

входное напряжение 5-15 Вольт

Используется делитель 4.7K/30K 

Итого получаем не линейный рост напряжения

5В  =>0,61В 

12В =>1,38В

Как парввильно получить напряжение =)

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015
Ripper
Offline
Зарегистрирован: 08.01.2017

Поправка

12,88 - >1,74 
 
С калькулятором совпадет ...  сейчас поменяю математику ... 
Ripper
Offline
Зарегистрирован: 08.01.2017

Всеравно не получается 

Подгоняю коэфициент для 13В все ок ... ставлю 5В на вход получаю недостачу в 0.8В

 

class Voltage
{
public:
double voltage()
{
int i=0;
float voltage = 0;
while(i<=5)
{
//voltage += (300.0f/47.0f) * 4.372f * float(analogRead(VOLTAGE12)) / 4096.0f;
voltage +=((float(analogRead(VOLTAGE12)) / 4096.0f)*(30000.0f + 4700.0f))/4700.0f*3.96f;
//x7.38
//voltage += analogRead(VOLTAGE12)*4095/3300*static_cast<float>(0.00738);
//voltage += analogRead(VOLTAGE12)/static_cast<float>(115.8); //867
i++;
delay(10);
};
//voltage = analogRead(VOLTAGE12) / static_cast<float>(115.5);
//return ceil(voltage / i * 100) / 100;
//return (int(voltage*100/i + 0.5)/100.0);
return(voltage/i);
}
};

 

Ripper
Offline
Зарегистрирован: 08.01.2017

AnalogRead какойто не линейный

587 -> 0.66V ~5V

1773 -> 1.64v ~12.3V

bwn
Offline
Зарегистрирован: 25.08.2014

Ripper пишет:

AnalogRead какойто не линейный

А без делителя?

Ripper
Offline
Зарегистрирован: 08.01.2017

без делителей будет жареный контролер 15В на входе ...

Фокус в том что делитель делит ожидаемо пропорционально 

А вот AnalogRead ESP32 считывает нелинейно ... прбывал изменить скейл до 2.6В => 4095 ночего не дало ...

bwn
Offline
Зарегистрирован: 25.08.2014

Ripper пишет:

без делителей будет жареный контролер 15В на входе ...

Фокус в том что делитель делит ожидаемо пропорционально 

А вот AnalogRead ESP32 считывает нелинейно ... прбывал изменить скейл до 2.6В => 4095 ночего не дало ...

Я спрашивал, допустимое напряжение, без делителя, меряет также нелинейно?

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017
Ripper
Offline
Зарегистрирован: 08.01.2017

А есть какето функция которая можеть описать эту кривую  мож кто уже заморачивался

Ripper
Offline
Зарегистрирован: 08.01.2017

Вот максимально что получилось получилось

 

value=float(analogRead(VOLTAGE12));
voltage += ((30000.0f + 4700.0f)/4700.0f)*1.0474f*(-0.00000000002f*pow(value,3)+0.00000004615f*pow(value,2)+0.00081009387f*value+0.11925628929f);

Незнаю насколько накладные данные вычисления по ресурсам ESP32

Но это на базе тех данных из таблицы ... в идеале нуже лаборотрник и делать свою таблицу ...