Перейти к блогу GetChip.net - блог        JilTE[1] - в разработке     Модификации устройств - модификации

 
Текущее время: 11 дек 2019, 19:26

Часовой пояс: UTC + 3 часа [ Летнее время ]



Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
 Заголовок сообщения: Re: Линейная апроксимация
СообщениеДобавлено: 29 июн 2012, 00:21 
Не в сети

Зарегистрирован: 20 май 2011, 23:58
Сообщения: 151
Откуда: St.-Petersburg
avrmastak писал(а):
Все,как всегда,оказалось гораздо проще! Взял 8 участков,каждый участок разделил на 10.Получил точность 0,1.Затем с помощью ифов определяю участок,и от верхнего значения отнимаю результат АЦП. Все отлично работает! Плюс есть возможность корректировки каждого участка. И не надо никаких ужасных формул.

Это, по сути, 3-ий вариант: интерполяция по дискретным участкам (см. пост от 23 июня). Правда, реализация только через одни ифы по 80-и участкам получается громоздкая. Обычно интервал бьют на достаточно крупные части (в вашем случае хватило бы восьми через единицу), потом смотрят, в какой интервал попадает значение, а внутри интервала считают через пропорцию по формуле вида Х=(a*b)/c.
Но и Ваш вариант неплох, если обеспечивает необходимые точность и быстродействие. Ну и если прошивка в контроллер помещается )).

Кстати, на каком МК в итоге остановились?

avrmastak писал(а):
Но, все-равно, СПАСИБО за консультации, узнал для себя много нового, надеюсь в будущем пригодится.

Да не за что )) Обращайтесь ))


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Линейная апроксимация
СообщениеДобавлено: 29 июн 2012, 07:59 
Не в сети

Зарегистрирован: 23 май 2012, 22:07
Сообщения: 38
3) Отказаться от аппроксимации и попробовать интерполяцию между двумя точками, но ресурсов это отъест немерено и не факт, что даст хороший результат...

Контроллер mega8A. Памяти заняло 2,7К. Вы не могли бы проверить,что-то я там накрутил с переменными.Там и int, и float.Вроде работает,но может можно как-то упростить. В интервалах 0-1,1-2 погрешность была - 0,3 ,на остальных - 0,2. Программно подкорректировал и все совпало до десятых. Очень доволен.


Вложения:
ММ393А.rar [39.74 КБ]
Скачиваний: 219
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Линейная апроксимация
СообщениеДобавлено: 01 июл 2012, 00:44 
Не в сети

Зарегистрирован: 20 май 2011, 23:58
Сообщения: 151
Откуда: St.-Petersburg
aui2002 писал(а):
Вы не могли бы проверить,что-то я там накрутил с переменными.Там и int, и float.

Да я тут не ахти какой проверяльщик, т.к. на Си больше читаю, чем пишу, а потому всех тонкостей языка не чувствую... Тем не менее, посмотрел, явного "криминала" не видно.

aui2002 писал(а):
Там и int, и float. Вроде работает,но может можно как-то упростить.

В смысле упростить? За счет смены типа переменной особого упрощения не получится...

Можно слегка оптимизировать математику.

Например, у Вас идет выбор интервала с последовательной проверкой от 1 до 8. Это не оптимальный алгоритм, т.к. производится много пустых проверок. Наиболее оптимальный вариант поиска соответствия числу интервала - "метод середины отрезка" (как по научному называется, не помню).

Выглядит это следующим образом. Допустим, есть отрезок от 0 до 8, разбитый на 8 интервалов: [0;1);[1;2);[2;3);[3;4);[4;5);[5;6);[6;7);[7;8], и некоторое число A. Нужно определить, в какой интервал оно попадает.
(Квадратная скобочка в интервале говорит о том, что крайнее число входит в интервал, круглая - что не входит, т.е. при шаге 0,1 в первый интервал войдут 0;0,1;0,2;0,3;0,4;0,5;0,6;0,7;0,8;0,9. А вот 1 уже будет принадлежать второму интервалу)

1) Разбиваем отрезок пополам. Середина у него получается между 4-м и 5-м интервалами.
Проверяем в какую половину попадет число А, т.е. смотрим А<4 или нет.
2) Ту половину, в которую попало число еще раз бьем пополам. Середина попадает между 2-м и 3-им либо между 6-м и 7-м интервалом. Проверяем в какую половинку половинки (четверть) попадает А, т.е. смотрим А<2 либо А<6, в зависимости от того в какую часть отрезка попали в п.1.
3) Теперь уже делим пополам ту четвертинку, в которую попали в п.2. Сравниваем А с соответствующим граничным значением значением, и, оп-ля, мы уже знаем, в каком интервале лежит число.

Таким образом, чтобы понять, в какой интервал попадает число, нам нужно сделать максимум 3 проверки, а не максимум 8, как в Вашем варианте.

Кстати, какое во время движения должно быть нормальное давление масла? Если 3 кгс/см2 и больше, то такты МК будут ощутимо экономиться.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Линейная апроксимация
СообщениеДобавлено: 02 июл 2012, 20:53 
Не в сети

Зарегистрирован: 23 май 2012, 22:07
Сообщения: 38
Спасибо,буду пробовать.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу Пред.  1, 2, 3

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB