Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

ну да, например откалибруйте в 3 точках (по краям и в середине) и аппроксимируйте параболой:

Отправлено __hard 12 декабря 2006 г. 00:22
В ответ на: полиномчиком его отправлено Гамма СПб 11 декабря 2006 г. 23:46

double const u1=0.2; // actual voltage 1
long const n1=5; // ADC result 1

double const u2=2.5; // actual voltage 2
long const n2=120; // ADC result 2

double const u3=4.9; // actual voltage 3
long const n3=253; // ADC result 3

double a[3];

void MakeCoeffs()
{
double x1=(double)n1;
double x2=(double)n2;
double x3=(double)n3;
double denom=(-x3+x2)*(-x2*x1+x2*x3+x1*x1-x3*x1);
a[0]=(x2*x2*u1*x3-x2*x2*x1*u3-x3*x3*u1*x2+u3*x1*x1*x2+x3*x3*x1*u2-u2*x1*x1*x3)/denom;
a[1]=-(-x2*x2*u3+x2*x2*u1-x3*x3*u1-u2*x1*x1+u3*x1*x1+u2*x3*x3)/denom;
a[2]=(x1*u3-x1*u2+x3*u2-u3*x2-u1*x3+u1*x2)/(-x1*x1*x3+x1*x1*x2-x1*x2*x2+x1*x3*x3-x3*x3*x2+x3*x2*x2);
}

double GetResult(long sample)
{
double x=(double)sample;
return a[2]*x*x+a[1]*x+a[0];
}

int _tmain(int argc, _TCHAR* argv[])
{
MakeCoeffs();
printf("%f\n%f\n%f\n",GetResult(n1),GetResult(n2),GetResult(n3));
return 0;
}

Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 234:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru