Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

B-уравнение

B-уравнение проще, но менее точно. \[ \frac{1}{T} = \frac{1}{T_0} + \frac{1}{B} \ln \left( \frac{R}{R_0} \right) \]

Где:

  • T — температура в кельвинах.
  • \( T_0 \) — опорная температура (обычно 298,15 K, или 25°C), при которой известно сопротивление термистора (обычно 10 кОм).
  • R — сопротивление при температуре T.
  • \( R_0 \) — сопротивление при опорной температуре \( T_0 \) (часто 10 кОм).
  • B — B-значение термистора.

B-значение — это константа, которую обычно указывает производитель. Оно зависит от материала и конструкции термистора и описывает, как меняется его сопротивление с температурой на заданном диапазоне. Вы также можете вычислить B-значение сами, измерив сопротивление термистора при двух известных температурах.

Пример расчёта:

Дано:

  • Опорная температура \( T_0 = 298.15K \) (то есть 25°C + 273,15 для перевода в кельвины)
  • Опорное сопротивление \( R_0 = 10k\Omega \)
  • B-значение B = 3950 (типично для многих термисторов)
  • Измеренное сопротивление при температуре T: 10475 Ом

Шаг 1: применяем B-уравнение

Подставляем заданные значения:

\[ \frac{1}{T} = \frac{1}{298.15} + \frac{1}{3950} \ln \left( \frac{10,475}{10,000} \right) \]

\[ \frac{1}{T} = 0.003354016 + \frac{1}{3950} \ln(1.0475) \]

\[ \frac{1}{T} = 0.003354016 + (0.000011748) \]

\[ \frac{1}{T} = 0.003365764 \]

Шаг 2: вычисляем температуру (T)

\[ T = \frac{1}{0.003365764} = 297.10936358 (Kelvin) \]

Переведём в градусы Цельсия:

\[ T_{Celsius} = 297.10936358 - 273.15 \approx 23.95936358°C \]

Результат:

Температура, соответствующая сопротивлению 10475 Ом, примерно равна 23,96°C.

Функция на Rust

const fn kelvin_to_celsius(kelvin: f64) -> f64 {
    kelvin - 273.15
}

const fn celsius_to_kelvin(celsius: f64) -> f64 {
    celsius + 273.15
}

const REF_RES: f64 = 10_000.0; // Опорное сопротивление в омах (10 кОм)
const REF_TEMP: f64 = 25.0;  // Опорная температура 25°C
const REF_TEMP_K: f64 = celsius_to_kelvin(REF_TEMP); // T0

fn calculate_temperature(current_res: f64, b_val: f64) -> f64 {
    let ln_value = (current_res/REF_RES).ln();
    // let ln_value = libm::log(current_res / ref_res); // используйте этот крейт для no_std
    let inv_t = (1.0 / REF_TEMP_K) + ((1.0 / b_val) * ln_value);
    1.0 / inv_t
}


const B_VALUE: f64 = 3950.0;
const V_IN: f64 = 3.3; // Входное напряжение

fn main() {
    let r = 9546.0; // Измеренное сопротивление в омах
    
    let temperature_kelvin = calculate_temperature(r, B_VALUE);
    let temperature_celsius = kelvin_to_celsius(temperature_kelvin);
    println!("Temperature: {:.2} °C", temperature_celsius);
}