Получение% топлива из аналоговых данных - PullRequest
1 голос
/ 28 июня 2019

Я получаю данные аналогового напряжения в мВ от указателя уровня топлива.Показания калибровки были взяты для каждых 10% изменений в указателе уровня топлива, как указано ниже:

0% - 2000mV
10% - 2100mV
20% - 3200mV
30% - 3645mV
40% - 3755mV
50% - 3922mV
60% - 4300mV
70% - 4500mv
80% - 5210mV
90% - 5400mV
100% - 5800mV

Объем бака составляет 45 л.

После калибровки я получаю показания от adc, скажем, 3000 мВ.Как рассчитать точный% топлива, оставшегося в баке?

Ответы [ 2 ]

4 голосов
/ 28 июня 2019

Если вы построите передаточную функцию для АЦП, считывающую процентное содержание резервуара, вы получите график, подобный этому

enter image description here

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

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

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

Процентное значение, соответствующее показанию АЦП, может быть аппроксимировано путем нахождения записей в калибровке выше и ниже снятого значения - для примера чтения АЦП в вопросе это будут значения 10% и 20%

Interpolation_Proportion = (ADC - ADC_Below) / (ADC_Above - ADC_Below) ;    
Percent = Percent_Below + (Interpolation_Proportion * (Percent_Above - Percent_Below)) ;

.

Interpolation proportion = (3000-2100)/(3200-2100)
                         = 900/1100
                         = 0.82

Percent                  = 10 + (0.82 * (20 - 10)
                         = 10 + 8.2
                         = 18.2%

Capacity                 = 45 * 18.2 / 100
                         = 8.19 litres 
1 голос
/ 30 июня 2019

При построении графика оказывается, что данные идентифицируются в целом линейно, с некоторыми выбросами.Вполне вероятно, что это экспериментальная ошибка или, возможно, на нее влияют смешанные факторы, такие как электрический шум или изменение температуры, или даже просто жидкость, капающая вокруг!Без подробностей о том, как данные были собраны и насколько тщательно, невозможно определить, но я хотел бы спросить, сколько образцов было взято за измерение, являются ли они усредненными или мгновенными, и являются ли результаты точно повторяемыми в течение более чем одного эксперимента?

Предполагая, что результаты являются «ориентировочными», тогда, вероятно, будет мудрее, исходя из данных, которые вы должны предположить, что передаточная функция является линейной, и выполнить линейную регрессию из графика рассеяния ваших тестовых данных.Это проще всего сделать, используя любую функцию «трендовая» для построения электронных таблиц:

enter image description here

С вашей даты передаточная функция:

Fuel% = (0.0262 x SensormV) - 54.5

Итак, для вашего примера 3000 мВ, Fuel% = (0.0262 x 3000) - 54.5 = 24,1%

Для вашего бака емкостью 45 л, что соответствует примерно 10,8 литрам.

...