From 9b0c7ff6936463efc14512b70475b0f3a3d3b3d3 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Mon, 10 May 2021 15:15:09 -0700 Subject: [PATCH] explicitly test PTC thermistors (#2681) * test ptc * allow hotter for air cooled people Co-authored-by: Matthew Kennedy --- .../sensors/converters/thermistor_func.cpp | 2 +- unit_tests/tests/sensor/therm_func.cpp | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/firmware/controllers/sensors/converters/thermistor_func.cpp b/firmware/controllers/sensors/converters/thermistor_func.cpp index cb540fac8a..407cd3dacf 100644 --- a/firmware/controllers/sensors/converters/thermistor_func.cpp +++ b/firmware/controllers/sensors/converters/thermistor_func.cpp @@ -27,7 +27,7 @@ SensorResult ThermistorFunc::convert(float ohms) const { // bounds check result - please don't try to run rusEfi when colder than -50C // high end limit is required as this could be an oil temp sensor - if (celsius < -50 || celsius > 200) { + if (celsius < -50 || celsius > 250) { return unexpected; } diff --git a/unit_tests/tests/sensor/therm_func.cpp b/unit_tests/tests/sensor/therm_func.cpp index 1a7d434a2a..11668001bb 100644 --- a/unit_tests/tests/sensor/therm_func.cpp +++ b/unit_tests/tests/sensor/therm_func.cpp @@ -34,3 +34,22 @@ TEST(thermistor, ThermistorNeon) { assertEqualsM("B", 0.0003, tf.m_b); ASSERT_NEAR(0.0, tf.m_c, EPS4D); } + +TEST(thermistor, PtcAirCooledMotorcycle) { + // data from https://static.chipdip.ru/lib/033/DOC001033132.pdf + thermistor_conf_s tc = {0, 100, 200, 486, 975, 1679, 0}; + + ThermistorFunc tf; + tf.configure(tc); + + // calibrated points should be almost perfect + ASSERT_NEAR(tf.convert(486).value_or(0), 0, 0.1); + ASSERT_NEAR(tf.convert(975).value_or(0), 100, 0.1); + ASSERT_NEAR(tf.convert(1679).value_or(0), 200, 0.1); + + // Other points should be pretty good + ASSERT_NEAR(tf.convert(414).value_or(0), -20, 2); + ASSERT_NEAR(tf.convert(704).value_or(0), 50, 2); + ASSERT_NEAR(tf.convert(1300).value_or(0), 150, 2); + ASSERT_NEAR(tf.convert(1846).value_or(0), 220, 2); +}