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

Из показаний АЦП в сопротивление

Когда мы подключаем термистор к Pico, мы не читаем напряжение напрямую. То, что мы получаем от АЦП, — это лишь цифровое значение, которое представляет это напряжение (см. главу АЦП).

Но для вычисления температуры нам на самом деле нужно сопротивление термистора в данный момент, а не само значение АЦП.

В следующей главе мы рассмотрим уравнения для температуры. Прежде чем использовать эти формулы, нужно сначала преобразовать показание АЦП обратно в сопротивление термистора. Именно на этом и сосредоточена текущая глава.

Преобразование показаний АЦП в сопротивление термистора

Теперь мы выведем сопротивление термистора непосредственно из показания АЦП, используя уравнение делителя напряжения и уравнение преобразования АЦП.

Шаг 1: напряжение в средней точке делителя

Это стандартная формула делителя напряжения, которую мы уже видели. Поскольку термистор подключён как R1, мы явно обозначаем его как сопротивление термистора.

\[ V_{in} = \frac{R_2}{R_{thermistor} + R_2} \times V_{ref} \]

Шаг 2: уравнение преобразования АЦП

АЦП преобразует входное напряжение в цифровое значение на основе отношения входного напряжения к опорному.

\[ ADC = \frac{V_{in}}{V_{ref}} \times 2^{bits} \]

Шаг 3: подставляем уравнение делителя в уравнение АЦП

Подставляем выражение для \( V_{in} \) в уравнение АЦП:

\[ ADC = \frac{\frac{R_2}{R_{thermistor} + R_2} \times V_{ref}}{V_{ref}} \times 2^{bits} \]

Члены \( V_{ref} \) сокращаются, и остаётся:

\[ ADC = \frac{R_2}{R_{thermistor} + R_2} \times 2^{bits} \]

Шаг 4: выражаем сопротивление термистора

Преобразуем и решим уравнение относительно \( R_{thermistor} \):

\[ R_{thermistor} = \left( \frac{2^{bits}}{ADC} - 1 \right) \times R_2 \]

Для Pico, поскольку он использует 12-битный АЦП, уравнение упрощается до:

\[ R_{thermistor} = \left( \frac{4096}{ADC} - 1 \right) \times R_2 \]

Теперь уравнение содержит только результат АЦП, который измеряется, и \( R_2 \), то есть известное значение резистора. Поскольку \( R_2 \) напрямую влияет на вычисленное сопротивление термистора, он должен быть резистором со стабильным сопротивлением при изменении температуры. Любое изменение \( R_2 \) с температурой напрямую скажется на точности измерения.

В следующей главе мы используем это значение сопротивления для вычисления температуры.

Функция на Rust

Простая вспомогательная функция, которая превращает показание АЦП в соответствующее сопротивление термистора.

const ADC_LEVELS: f64 = 4096.0;
const R2_RES: f64 = 10_000.0; // R2

fn adc_to_resistance(adc_value: u16, r2_res:f64) -> f64 {
     let adc = adc_value as f64;
    ((ADC_LEVELS / adc) - 1.0) * r2_res
}

fn main() {
    let adc_value = 2000; // Наш пример значения АЦП;

    let r2 = adc_to_resistance(adc_value, R2_RES);
    println!("Calculated Resistance (R2): {} Ω", r2);
}