scripts: Create a script to generate an NTC thermistor R/T table
Script to generate an R/T table in device tree format given R25 and Beta values. Signed-off-by: Al Semjonovs <asemjonovs@google.com>
This commit is contained in:
parent
9fa35bc9a0
commit
fb8d8c5773
1 changed files with 101 additions and 0 deletions
101
scripts/utils/ntc_thermistor_table.py
Executable file
101
scripts/utils/ntc_thermistor_table.py
Executable file
|
@ -0,0 +1,101 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
# Copyright (c) 2023 Google LLC
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
"""
|
||||
Zephyr's NTC Thermistor DTS Table generator
|
||||
###########################################
|
||||
|
||||
This script can be used to generate a "zephyr,thermistor-rt-table" compatible
|
||||
Device Tree node for NTC thermistors. This uses the Beta Parameter Equation
|
||||
|
||||
https://devxplained.eu/en/blog/temperature-measurement-with-ntcs#beta-parameter-equation
|
||||
|
||||
Look-up the following electrical characteristics in the thermistor's data sheet:
|
||||
Nominal resistance (R25) - The thermistor's resistance measured at 25C
|
||||
Beta value (25/85) - This is the resistance value at 25C and at 85C
|
||||
|
||||
Usage::
|
||||
|
||||
python3 ntc_thermistor_table.py \
|
||||
-r25 10000 \
|
||||
-b 3974 > thermistor.dtsi
|
||||
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import os
|
||||
import math
|
||||
|
||||
def c_to_k(c: float):
|
||||
""" Convert Celicius to Kelvin """
|
||||
return c + 273.15
|
||||
|
||||
def beta_equation_calc_resistance(r25, beta, temp_c):
|
||||
t0_kelvin = c_to_k(25)
|
||||
|
||||
exp = beta * ((1 / c_to_k(temp_c)) - (1 / t0_kelvin))
|
||||
resistance = r25 * math.exp(exp)
|
||||
|
||||
return resistance
|
||||
|
||||
|
||||
def main(
|
||||
r25: float, beta: float, interval: int, temp_init: int, temp_final: int
|
||||
) -> None:
|
||||
temps_range = range(temp_init, temp_final + interval - 1, interval)
|
||||
|
||||
print(f"/* NTC Thermistor Table Generated with {os.path.basename(__file__)} */\n")
|
||||
print(f"/ {{")
|
||||
print(
|
||||
f"\tthermistor_R25_{int(r25)}_B_{int(beta)}: thermistor-R25-{int(r25)}-B-{int(beta)} {{"
|
||||
)
|
||||
print(f'\t\tstatus = "disabled";')
|
||||
print(f'\t\tcompatible = "zephyr,thermistor-rt-table";\n')
|
||||
|
||||
table = []
|
||||
for temp in temps_range:
|
||||
resistance = beta_equation_calc_resistance(r25, beta, temp)
|
||||
table.append(f"<({int(temp)}) {int(resistance)}>")
|
||||
|
||||
tbl_string = ',\n\t\t\t'.join(table)
|
||||
print(f"\t\t/* TR Table Format <temp resistance> */")
|
||||
print(f"\t\ttr-table = {tbl_string};")
|
||||
print(f"\t}};")
|
||||
print(f"}};")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser("NTC Thermistor generator", allow_abbrev=False)
|
||||
parser.add_argument(
|
||||
"-r25", type=float, required=True, help="Nominal resistance of thermistor"
|
||||
)
|
||||
parser.add_argument(
|
||||
"-b", "--beta", type=float, required=True, help="Beta(25/85) value"
|
||||
)
|
||||
parser.add_argument(
|
||||
"-i",
|
||||
"--interval",
|
||||
type=int,
|
||||
required=False,
|
||||
help="Generated table interval",
|
||||
default=10,
|
||||
)
|
||||
parser.add_argument(
|
||||
"-ti",
|
||||
type=int,
|
||||
required=False,
|
||||
help="First temperature",
|
||||
default=-25,
|
||||
)
|
||||
parser.add_argument(
|
||||
"-tf",
|
||||
type=int,
|
||||
required=False,
|
||||
help="Final temperature",
|
||||
default=125,
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
main(args.r25, args.beta, args.interval, args.ti, args.tf)
|
Loading…
Add table
Add a link
Reference in a new issue