Взял отсюда
http://www-users.cs.york.ac.uk/~fish...-bin/mkfscript
этот код:
/* Digital filter designed by mkfilter/mkshape/gencode A.J. Fisher
Command line: /www/usr/fisher/helpers/mkfilter -Bu -Lp -o 3 -a 1.0000000000e-01 0.0000000000e+00 -l */
#define NZEROS 3
#define NPOLES 3
#define GAIN 5.525187588e+01
static float xv[NZEROS+1], yv[NPOLES+1];
static void filterloop()
{ for (;
{ xv[0] = xv[1]; xv[1] = xv[2]; xv[2] = xv[3];
xv[3] = next input value / GAIN;
yv[0] = yv[1]; yv[1] = yv[2]; yv[2] = yv[3];
yv[3] = (xv[0] + xv[3]) + 3 * (xv[1] + xv[2])
+ ( 0.2780599176 * yv[0]) + ( -1.1828932620 * yv[1])
+ ( 1.7600418803 * yv[2]);
next output value = yv[3];
}
}
Вставил его в цикл непрерывного измерения АЦП.
Дает постоянное смещение. Например на вход АЦП реально подаю 1.000022 В.
На дисплее показывает 1.000726 В.
Это потому что ничего не откалибровано.
Разброс показаний при этом плюс минус 15 мкВ. ( Шумит)
Это с накоплением 32 разряда (т.е. вычисление среднеарифм. по 32 реализ.)
А после подключения фильтра индикатор стал показывать 1.094313 В.
Разброс около 3-5 мкв.
Фильтр работает. Но вносит сдвиг в показаниях существенный - не знаю получится это скомпенсировать или нет?