http://forum.getchip.net/

Линейная апроксимация
http://forum.getchip.net/viewtopic.php?f=20&t=234
Страница 1 из 3

Автор:  avrmastak [ 16 июн 2012, 19:42 ]
Заголовок сообщения:  Линейная апроксимация

Делаю устройство,которое показывает давление масла в автомобиле. Датчик ММ393А меняет свое сопротивление от 315 Ом(при 0 кгс/см^2) до 5 Ом(при 8 кгс/см^2).Идею взял отсюда: http://www.bezkz.su/...metr/11-1-0-399 . После калибровки получаю массив в EEPROM который потом загоняю в массив в оперативке buf_ram[].Не знаю как сделать линейную апроксимацию показаний, т.е. чтобы показания на индикатор шли с учетом данных из массива buf_ram[].

Вложения:
example.rar [1.61 КБ]
Скачиваний: 844

Автор:  aui2002 [ 17 июн 2012, 13:35 ]
Заголовок сообщения:  Re: Линейная апроксимация

А вопрос-то в чем?
В математике или в программировании?

Если в математике, то, как я понял из исходника, есть 5 калибровочных точек, т.е. 5 пар значений Давление (P) - Сопротивление (R). По этим пяти точкам нужно сделать линейную аппроксимацию (учебник математики в помощь).

Результатом аппроксимации будет нахождение коэффициентов уравнения P=a*R+b. (т.е. a и b)
После этого a и b пихаем в EEPROM, а 5 пар калибровочных значений множим на ноль (в смысле они больше не нужны).

Теперь, когда в рабочем режиме снимается значение сопротивления R, его нужно умножить на a и прибавить b. Результат (P) вывести на индикатор.

Аппроксимация - это, по сути, набор операций с матрицами (массивами): умножение, транспонироввание и т.п.
Как мне кажется (могу ошибаться), штука довольно ресурсоемкая, особенно, если еще коэффициент детерминированности считать (это критерий точности аппроксимации).
Хватит ли на это ресурсов выбранного Вами МК?

Еще вопрос: как я понял, калибровка производится один раз при установке девайса на авто? Ну а потом может через год или через два при ТО? Есть ли смысл тогда пихать аппроксимацию в МК?

Может проще, чтобы в режиме калибровки эти 5 пар просто выводились на экран, откуда их можно списать на бумажку (или считать их программатором из EEPROM). Потом засунуть в тот же Excel и в два тычка сделать аппроксимацию там. Коэффициенты a и b, полученные в Excel, либо ввести в прошивку в виде констант, либо через элементы ввода (кнопки и т.п.) скормить девайсу без ковыряния в прошивке?

Автор:  avrmastak [ 19 июн 2012, 22:41 ]
Заголовок сообщения:  Re: Линейная апроксимация

Забил на калибровку. Хочу просто вывести на индикатор реальные показания давления от 0 до 8 с десятыми.Сегодня замерял сопротивление датчика(табличка в архиве). В Exel сделал апроксимацию и нашел уравнение моей кривой. Что с ним делать дальше? Куда его вписать в программе?

Вложения:
Example.rar [3.58 КБ]
Скачиваний: 855

Автор:  aui2002 [ 19 июн 2012, 23:31 ]
Заголовок сообщения:  Re: Линейная апроксимация



Вложения:
Комментарий к файлу: см. сразу же на первом листе
appr.xls [24 КБ]
Скачиваний: 871

Автор:  avrmastak [ 21 июн 2012, 00:26 ]
Заголовок сообщения:  Re: Линейная апроксимация

Если делаю, как Вы советуете, на индикаторе какая-то еруна. Умножал и делил на 10,100,1000 - показания 600-400 и постоянно прыгают. Сделал ADC=f(P), а потом выразил из него Р,получилось Р=(983-adc)/92. Единицы давления совпадают все, кроме 0. 0 включается аж при 340 Ом. Десятые доли давления живут своей жизнью,скажем если взять диапазон 7-8 кгс получается:
44 Ом - 8,0.
55 Ом - 7,6.
57 Ом - 7,0.
74 Ом - 7,0.
и никаких промежуточных значений.
Подскажите,пожалуйста,как сделать чтобы 0 стал на место(если в формуле Р=(983-adc)/92, 983 меняю на 920 ноль становится на место,но все показания смещаются на 1) и что не так с десятыми долями.

Вложения:
Example.rar [3.25 КБ]
Скачиваний: 839

Автор:  aui2002 [ 21 июн 2012, 02:19 ]
Заголовок сообщения:  Re: Линейная апроксимация



Вложения:
Exel.xls [35 КБ]
Скачиваний: 868
eqv.JPG
eqv.JPG [ 21.69 КБ | Просмотров: 17723 ]

Автор:  aui2002 [ 21 июн 2012, 02:25 ]
Заголовок сообщения:  Re: Линейная апроксимация

Продолжаем разговор.... :mrgreen:

Я бы сделал так.
1) Получаем значение АЦП.
2) Если АЦП = 220, выводим на экран 8,0.
3) Если АЦП = 920, выводим 0,0.
4) Если 220< АЦП<920, по любому из предложенных уравнений считаем P.
5) Округляем P до 10-х долей и выводим.

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

Автор:  avrmastak [ 22 июн 2012, 00:38 ]
Заголовок сообщения:  Re: Линейная апроксимация

Наконец-то получилось! Показания на индикаторе для P=f(ADC) и ADC=f(P) практически совпадают:
0 - 1,3
1 - 1,6
2 - 2
3 - 2,9
4 - 4,2
5 - 5,4
6 - 6,3
7 - 7
8 - 8
Немного с погрешностью, но это ерунда. Если пишу Р=982.67-adc/92.333 десятки отображаютя как надо,а если округляю Р=983-adc/92,то получается ерунда.

Вложения:
Example.rar [3.69 КБ]
Скачиваний: 838

Автор:  avrmastak [ 22 июн 2012, 00:45 ]
Заголовок сообщения:  Re: Линейная апроксимация

По Вашему варианту P=f(R) на нижнем и верхнем пределе должно получиться точнее. Да, я в формулу подставлял значение АЦП,поэтому и получалась какая-то лажа. Есть делитель ( Фото007.jpg
Фото007.jpg [ 208.28 КБ | Просмотров: 17699 ]
)
Vout=Vin*R2/R1+R2; R2-сопротивление датчика.
ADC=Vout*1024/Vref; Vref-2.56В.
Мне нужно из первой формулы выразить R2 и подставить во вторую? Я правильно понял?
Если так делаю,получается страшная формула R=0.926*adc/(524288-2.56*adc).Потом подставляю в P = -0,0272R + 8,8315.Получается еще страшнее. На экране 0,7 стоит и не меняется.

Автор:  aui2002 [ 22 июн 2012, 01:37 ]
Заголовок сообщения:  Re: Линейная апроксимация


Страница 1 из 3 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/