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

 
Текущее время: 14 ноя 2019, 03:19

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



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

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

1) Получаем значение АЦП.
2) Если АЦП = 220, выводим на экран 8,0. // Здесь R2 считать смысла нет, только лишние такты тратить...
3) Если АЦП = 920, выводим 0,0. // Здесь тоже работаем только с АЦП.
4) Если 220< АЦП<920:
4.1) Считаем R2 по формуле: R2= -(ADC*R1*Vref)/(ADC*Vref-Vin*1024).
4.2) Считаем P, подставив полученное в п.4.1 значение R2 в уравнение регрессии: P = -0,0272*R2 + 8,8315.
5) Округляем P до 10-х долей и выводим.

P.S.
Значения переменных R1, Vref, Vin, а =-0,0272 и b= 8,8315 предварительно должны быть запиханы в EEPROM.


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

Зарегистрирован: 23 май 2012, 22:07
Сообщения: 38
Все пересчитал и перепроверил для 3-х вариантов. Результат ...


Вложения:
Example.rar [3.82 КБ]
Скачиваний: 165
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Линейная апроксимация
СообщениеДобавлено: 23 июн 2012, 18:37 
Не в сети

Зарегистрирован: 23 май 2012, 22:07
Сообщения: 38
Вариант P=f(ADC) мне кажется самый достоверный. Только как быть с точками 0 и 1? Или написать if(adc>857){buf[1]=buf[2]=0;}. Если меньше 2 атм выводить нули?


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

Зарегистрирован: 23 май 2012, 22:07
Сообщения: 38
Кстати ...
Контроллер - tiny26.
Для варианта P=f(R) жрет 98% памяти. Для варианта P=f(ADC) - 81%.


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

Зарегистрирован: 20 май 2011, 23:58
Сообщения: 151
Откуда: St.-Petersburg
avrmastak писал(а):
Вариант P=f(ADC) мне кажется самый достоверный.

Да не сказал бы... Если судить по коэффициенту детерминированности (R^2), они очень близки по точности относительно друг друга. Аппроксимация тем точнее, чем R^2 ближе к 1. А если смотреть чисто формально, то самый большой R^2 у P=f(R). Но это различие уже в тысячных долях, так что не особо существенно...

avrmastak писал(а):
Только как быть с точками 0 и 1? Или написать if(adc>857){buf[1]=buf[2]=0;}. Если меньше 2 атм выводить нули?

Строго говоря, обоснованной считается только искусственная "подмена" крайних точек, поэтому я бы так не делал...
Пусть при значении adc=932 выводится 0, а все что выше считается по формуле.

Тут можно задуматься о повышении точности аппроксимации. Навскидку, есть 3 варианта:
1) Увеличить количество калибровочных точек до 30-35 (условие малой выборки), причем на проблемном интервале 0-2 точек должно быть больше, чем на любом из остальных.
2) Заменить линейную аппроксимирующую функцию на полином 3-ей степени, например, Тогда R^2 станет где-то 0,992-0,997 (см. вложение).
3) Отказаться от аппроксимации и попробовать интерполяцию между двумя точками, но ресурсов это отъест немерено и не факт, что даст хороший результат...

Можно также, в порядке эксперимента, объединить варианты 1 и 2, т.е. 30 точек и кубическая аппроксимация.
avrmastak писал(а):
Контроллер - tiny26.

Как говорится, маловато будет... ) Тем более, если начинать борьбу за точность показаний и в последующем делать автокалибровку.

А автокалибровку, мне кажется, со временем все-таки придется добавлять, т.к. сезонные перепады температур все равно будут влиять на точность показаний... Ну и термоконтроль, скорее всего, понадобится...

Лучше бы запилить все это дело на Меге какой-нибудь... 8 или 16.

Кстати, я так понял у Вас датчик от "Жигулёнка", с виду напоминающий кондовый выпрямительный диод? А нет ли к нему чего-нибудь наподобие даташита, может в нем уже указана какая-нибудь методика калибровки?


Вложения:
Exel.xls [28.5 КБ]
Скачиваний: 188
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Линейная апроксимация
СообщениеДобавлено: 23 июн 2012, 21:27 
Не в сети

Зарегистрирован: 23 май 2012, 22:07
Сообщения: 38
По датчику ...
Нашел только это: "Датчик ММ393А при отсутствии давления должен иметь сопротивление 310...320 Ом, при давлении в 4 кг/см2 — 115...130 Ом, при давлении в 6 кг/см2 — 55...65 Ом, при давлении в 8 кг/см2 — 0...15 Ом." Значения сопротивления в остальных точках мерял сам,подавая воздух с компрессора и меряя тестером. Мои значения почему-то отличаются от заявленных.

По контроллеру ...
Завтра переделаю под mega8 и попробую вариант №2.


Вложения:
393.rar [221.15 КБ]
Скачиваний: 180
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Линейная апроксимация
СообщениеДобавлено: 23 июн 2012, 21:46 
Не в сети

Зарегистрирован: 23 май 2012, 22:07
Сообщения: 38
Можно еще вопрос...
Не очень силен в математике. В формуле y = -6E-07x3 + 0,0003x2 - 0,0787x + 11,045 Е - это экспонента, т.е. подставлять 2,71828? И как понять выражение -6E-07x3?


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

Зарегистрирован: 20 май 2011, 23:58
Сообщения: 151
Откуда: St.-Petersburg
avrmastak писал(а):
Е - это экспонента, т.е. подставлять 2,71828?

Нет, это не экспонента, а порядок, т.е. степень числа 10. Экспонента обозначается маленькой e. Сокращенная запись, чтобы не папиться с кучей нулей
Например: 2E3=2*10^3(два умножить на десять в кубе)=2*1000=2000 или 2E-3=2*10^-3(два умножить на десять в минус третьей степени)=2*0,001=0,002

avrmastak писал(а):
И как понять выражение -6E-07x3?

-6E-07x3=-6*0,0000007*X*X*X (х3=икс в кубе).
Тут Вас, видимо, смутил ноль перед семеркой? Он просто отбрасывается и получается -6E-7x^3 (значком ^ иногда обозначают степень)

Для функции P=f(R) вместо Х подставляем наше R2, которое считается все по той же формуле:
R2= -(ADC*R1*Vref)/(ADC*Vref-Vin*1024)

avrmastak писал(а):
Не очень силен в математике.

Как говорит моя мама: абсолютно все знать и уметь невозможно. 8-)


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

Зарегистрирован: 23 май 2012, 22:07
Сообщения: 38
Все,как всегда,оказалось гораздо проще! Взял 8 участков,каждый участок разделил на 10.Получил точность 0,1.Затем с помощью ифов определяю участок,и от верхнего значения отнимаю результат АЦП. Все отлично работает! Плюс есть возможность корректировки каждого участка. И не надо никаких ужасных формул.


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

Зарегистрирован: 23 май 2012, 22:07
Сообщения: 38
Но, все-равно, СПАСИБО за консультации, узнал для себя много нового, надеюсь в будущем пригодится.


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

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


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

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


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

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