Не могу побороть задачу:
Необходимо подключить к AtMega аналоговые автомобильные датчики температуры воды и давления масла.
Беда в том, что датчики имеют нелинейную зависимость сопротивления.
Получается кривая.
Не могу понять по какой формуле рассчитывать значения на АЦП
Проще всего - это разбить кривую на несколько линейных функций (кусочно-линейная аппроксимация).
В идеале Вам нужен полином. Чем большей степени он будет, тем точнее расчет. Но и расчет сложнее и коэффициенты еще получить надо (хотя excel умеет получать их).
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Z_h_e писал(а):В идеале Вам нужен полином. Чем большей степени он будет, тем точнее расчет. Но и расчет сложнее и коэффициенты еще получить надо (хотя excel умеет получать их).
Спасибо.
У меня-то задача не в Экселе посчитать.
Мне надо вывести формулу, чтобы прописать ее в CodeVisonAVR, а не использовать массив с данными датчика
gorlanovmax писал(а):Рассчитать значение формулы вида y=-6,3433*x*x*x*x*x + 51,786*x*x*x*x - 168,52x*x*x + 277,47x*x - 261,12x + 181,59
Вообще-то полиномы, обычно, считают по схеме Горнера. Типа y=(((((-6,3433*x) + 51,786*x) - 168,52*x) + 277,47*x) - 261,12*x) + 181,59. Считать в целых числах, навскидку - 32-разрядных должно хватить. Естественно, вначале все отмасштабировать. Предварительно стоит все промоделировать на писюке, на обычном визуальном Си.
Хотя нет, 32-разрядной арифметики, скорее всего, не хватит. Как бы не 64...
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Да, точность вычисления 0,001% просто необходима для связки датчик-АЦП, которая дает погрешность порядка единиц процентов Где те воробьи, на которых заряжают пушку ? Да обычной линейной интерполяции более чем за глаза хватит, я думаю, если, конечно, не ставить цель: как бы посложнее решить простейшую задачу и горестно восклицать : "Быстродействия нехватает! Память кончилась!"
Кусочно-линейную и имел в виду .
Последний раз редактировалось Jack_A Чт мар 09, 2017 12:21:15, всего редактировалось 1 раз.
Jack_A писал(а):Да, точность вычисления 0,001% просто необходима для связки датчик-АЦП, которая дает погрешность порядка единиц процентов Где те воробьи, на которых заряжают пушку ? Да обычной линейной интерполяции более чем за глаза хватит, я думаю, если, конечно, не ставить цель: как бы посложнее решить простейшую задачу и горестно восклицать : "Быстродействия нехватает! Память кончилась!"
Линейная не пойдет.
Как я и указывал в начале, датчик имеет нелинейную зависимость.
Хорошая такая дуга)))
вы мою статью читали? любую кривую без вертикальных участков вы элементарно можете представить в виде набора отрезков прямой и получить желаемое без сложных вычислений.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
вы мою статью читали? любую кривую без вертикальных участков вы элементарно можете представить в виде набора отрезков прямой и получить желаемое без сложных вычислений.
конечно читал, и даже комментировал.
но мне предлагают использовать линейную интерполяцию, а не кусочно-линейную аппроксимацию
gorlanovmax писал(а):мне предлагают использовать линейную интерполяцию, а не кусочно-линейную аппроксимацию
вы считаете, разница принципиальна?
вот текст из википедии:
Лине́йная интерполя́ция — интерполяция алгебраическим двучленом P1(x) = ax + b функции f, заданной в двух точках x0 и x1 отрезка [a, b]. В случае, если заданы значения в нескольких точках, функция заменяется кусочно-линейной функцией.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...