Из показаний АЦП в сопротивление
Когда мы подключаем термистор к 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);
}