Двухточечная калибровка
Урок про самый практичный приём: привести показания к правде по двум эталонным точкам.
Двухточечная калибровка — построение линейной зависимости «сырое значение → истинная величина» по двум известным эталонным точкам.
Каждый экземпляр датчика чуть отличается смещением нуля и наклоном. Двухточечная калибровка чинит обе беды разом: берём два эталона (например, лёд $0\,°C$ и кипяток $100\,°C$), снимаем сырые показания и строим прямую.
Формулы калибровки
По двум точкам $(x_1, y_1)$ и $(x_2, y_2)$, где $x$ — сырое показание, $y$ — истинная величина:
$$ a = \frac{y_2 - y_1}{x_2 - x_1}, \qquad b = y_1 - a\,x_1 $$
$$ y = a\,x + b $$
# Сырое напряжение -> температура.
# Эталон: 0.5 В = 0 °C, 2.5 В = 100 °C
x1, y1 = 0.5, 0.0
x2, y2 = 2.5, 100.0
a = (y2 - y1) / (x2 - x1)
b = y1 - a * x1
print("наклон a =", a, ", смещение b =", b)
def calibrate(v):
return a * v + b
print("1.5 В ->", calibrate(1.5), "°C")Вывод:
наклон a = 50.0 , смещение b = -25.0 1.5 В -> 50.0 °C
Коррекция нуля и масштаба
Иногда калибровку разделяют на два шага: сначала убирают смещение (offset), вычитая показание при нуле, затем масштабируют (gain), деля на чувствительность. Это удобно, когда нуль и масштаб уплывают независимо (например, от температуры).
# offset = сырое при истинном нуле
offset = 0.5
gain = (2.5 - 0.5) / (100 - 0) # В на градус
def read(v):
return (v - offset) / gain
for v in (0.5, 1.5, 2.5):
print(v, "В ->", round(read(v), 1), "°C")Вывод:
0.5 В -> 0.0 °C 1.5 В -> 50.0 °C 2.5 В -> 100.0 °C
Как работает под капотом
Двухточечная калибровка работает идеально, только если датчик действительно линеен между точками. Поэтому точки выбирают на краях рабочего диапазона — так максимум линейного участка попадает внутрь. Если характеристика изогнута, двух точек мало: середина диапазона уедет. Тогда переходят к трёх- и многоточечной калибровке или аппроксимации многочленом (следующий урок). Эталоны должны быть точнее датчика хотя бы вчетверо, иначе вы калибруете по кривому образцу.
Частые ошибки
- Выбирать обе точки близко друг к другу — наклон посчитается с большой ошибкой.
- Калибровать нелинейный датчик двумя точками — середина диапазона уйдёт.
- Использовать неточный эталон — вся калибровка унаследует его погрешность.
Итог
- Двухточечная калибровка строит прямую $y = a x + b$ по двум эталонам.
- Наклон чинит масштаб, смещение чинит нуль.
- Метод верен только для линейного датчика; иначе нужны больше точек.