От АЦП к сопротивлению
При подключении термистора к ESP32 мы получаем не сопротивление термистора напрямую, а значение АЦП (см. главу АЦП). Нам нужно вычислить по значению АЦП сопротивление термистора. Оно понадобится для расчёта температуры (об этом поговорим в следующих главах).
Чтобы вычислить сопротивление по показанию АЦП, используем формулу:
\[ R_2 = R_1 \left( \frac{\text{adc_value}}{\text{ADC_MAX} - \text{adc_value}} \right) \]
Где:
- R2: сопротивление термистора, которое нам нужно вычислить
- R1: сопротивление резистора, включённого последовательно с термистором (обычно 10 кОм)
- ADC_MAX: максимальное значение АЦП, 4095 (\( 2^{12} - 1 \)) для 12-битного АЦП
- adc_value: значение, считанное с АЦП
Функция на Rust
const ADC_MAX: f64 = 4095.0;
const R1_RES: f64 = 10_000.0;
const fn adc_to_resistance(adc_value: f64) -> f64 {
let x: f64 = adc_value/(ADC_MAX - adc_value);
R1_RES * x
}
fn main() {
let adc_value = 2000; // Наш пример значения АЦП;
let r2 = adc_to_resistance(adc_value as f64);
println!("Calculated Resistance (R2): {} Ω", r2);
}
Примечание:
Если вы подключили термистор к питанию, а не к GND, формула будет обратной, так как термистор становится R1.
\[ R_1 = {R_2} \times \left(\frac{\text{ADC_MAX}}{\text{adc_value}} - 1\right) \]