Всем привет. Делаю тахометр для авто. ЭБУ мотора выдает 0-5 В в зависимости от оборотов. Обороты 0-7500 об/мин. Необходимая точность 50 об/мин. Для того, чтобы дробные числа напряжения хранить в массиве и сопоставлять им данные из массива оборотов не хватает памяти (минимум 76 значений float). Нужна математика, наверняка, есть формула расчета промежуточных значений по известным точкам? Дело в том, что изменения не линейны, ключевых точек замерить вольтметром могу сколько угодно, сейчас сделал на каждую 1000 оборотов. Заглушенный - 0,55 400 об/мин - 0,8 В 600 - 0,83 850 - 0,89 900 - 0,92 1000 - 0,95 2000 -1,42 3000 - 1,85 4000 - 2,32 5000 - 2,7 6000 - 3,15 7000 - 3,5 Выпускники физматов и просто образованные люди, подскажите направление мысли или формулу. Спасибо.
Во-первых,нафига там флоат? Напряжение вы измеряете функцией analogRead() , которая выдает целые числа - так зачем вам эти значения переводить в напряжение? Переводите сразу в обороты. Вовторых,,у вас таблица значений - константы, значит можно положить ее в PROGMEM - в котором хватит места не только на 76 значений. а даже на пару тысяч
Действительно, зачем я пытаюсь работать с напряжением, если могу работать с целыми числами аналогрид ))) спасибо. Пока сделаю так. А что по поводу интерполяций /апроксимаций?Хочется оставить ключевые точки, а остальное высчитать, так как в коде несколько сопоставлений входящих данных и с готовым набором - это видится оптимальным решением.
Когда-то я вошел в этот форум в надежде встретиться со знатоками в давно интересной мне области (робототехника), да и область - особенная - не арифметика, и не литература - в школе и д/с не рассказывают. Можно было (мне по-первости) ожидать, что здесь (вживую) "трут" передовые идеи, смелые, неординарные решения... Ну, а, где еще! Живых корифеев темы я уже прослушал, наобщался. То, что есть в книгах - сходил в библиотеку - ознакомился. Остается "живое" общение с обоюдным накоплением опыта... А, на поверку: Появляется новая тема - "О! Посмотрим, что-то новенькое!?", Глянь - а там "Как навернуть гайку на болт?", и долгие рассуждения о моделях и особенностях гаек и болтов... Теперь вот оказывается, что задача интерполяции - краеугольная задача робототехники, и над ней бьются лучшие умы страны.
Открытое информационное пространство снижает порог входа в тему, понижает средний результат, но помогает развивать отрасль. Хотите дискуссий на уровне - вперед, в MIT и Boston Dynamics, где нет вопросов от новичков и много робототехники. Отвечайте по теме, пожалуйста, каким бы ни был вопрос.
Например вы хотите кривую вычислить по 4 аргументам x1,x2,x3,x4 (обороты) c соответствующими им данными АЦП (y1,y2,y3,y4). Составляете систему уравнений из 4 полиномов (4-1)й степени y1 = A + B * x1 + C * x1^2 + D * x1^3 y2 = A + B * x2 + C * x2^2 + D * x2^3 ... y4 = A + B * x4 + C * x4^2 + D * x4^3 и решаете ее - ищете коэффициенты A,B,C,D. Задачка для 5-классника. Сами понимаете - в какую сторону считать - напряжение от оборотов или обороты от напряжения - дело ваше.
Плохо жить без осциллографа, завел обороты в ардуину и посмотрел еше раз - ба! Да это ж меандр с изменяемой частотой. Вообщем проблему решил посчитав импульсы в в единицу времени по прерыванию. Спасибо за советы, проведу эксперименты со всеми вариантами, но уже к резистивному датчику температуры с опорным напряжением.
Для температурных датчиков сделал интерполяцию на полиномах Лагранжа. Семь точек достаточно, чтобы покрыть 220 градусов и 0-5 В. Однако, эксель интерполирует точнее при равнораспределенных ключевых точках, при использовании полинома четвертой степени пришлось кучковать ключевые точки ближе к отрезкам графика с наибольшей кривизной. Как-нибудь потом разберусь почему в экселе так хорошо выходит интерполяция.
Не понял. Если вам надо кривую по семи точкам - задавайте семь полиномов шестого порядка Yn = A + B*Xn + ... + G*Xn^6 И решайте - ищите коэффициенты A...G. Только это перебор - обычно 4-х хватает запредельно. . Главное - когда решаете - не пользуйтесь десятичными дробями (типа 12, 0345). Калькулятор округляет промежуточные результаты. Это приводит к накоплению ошибки и неточности в результате. Пользуйтесь натуральными дробями типа 123 / 456. Об этом в математике специально предупреждают. Я забыл предупредить, пардон. Лучший способ решения - методом Гаусса. В десятичный вид переводите в самом конце.