在深低温区通常所用的cernox传感器可测量4K到325K,阻值对用大概在8k欧姆到100欧左右
一般使用lakeshore的224或者240采集表,通过仪表连接传感器
如果要获得温度值,再通过上位机或者PLC等通信方式连接采集仪表
cernox传感器的价格较高,目前1w+每个,而且仪表也挺贵,一般可通过其他多通道的采集表将
采集到的电阻值通过上位机再计算转换成温度,通常labview用的挺多,通过labview也可将温度值在发送到例如epics服务器
这次使用python,简单的将R 转换成 K,在linux中可编写python脚本,将epics中caget PLC采到电阻值,计算成温度,再caput到相应寄存器,当然也可以在plc中编程,直接将阻值转换成温度
计算方法,安照官方文档,下图,是8079欧姆到1068欧姆的相关参数和计算方法
代码如下
import math
A1 = [11.914012, -11.168188, 3.527771, -0.774741, 0.097367, 0.002411, -0.002589, -0.000505, 0.000633]
ZL1 = 2.97836114172; ZU1 = 3.98178349557
A2 = [64.579437, -53.054449, 10.861361, -1.351038, 0.101114, 0.002076, 0.001321, 0.001239, -0.000301, 0.002233]
ZL2 = 2.31054980063; ZU2 = 3.08532268559
A3 = [194.594496, -115.197393, 17.512445, -2.293093, 0.373435, -0.058385, 0.007811]
ZL3 = 1.88181372612; ZU3 = 2.45169572968
R_Range = [77.37, 243.4, 1068, 8079]
def cal(resistance, A, ZL, ZU):
i = 0
temp = 0
Z= math.log(resistance,10)
k = ((Z-ZL)-(ZU-Z))/(ZU-ZL)
for Ai in A:
temp += Ai*math.cos(i*math.acos(k))
i += 1
return temp
def RtoK(resistance):
if R_Range[0] <= resistance <= R_Range[3]:
if R_Range[2] <= resistance <= R_Range[3]:
return cal(resistance, A1, ZL1, ZU1)
if R_Range[1] <= resistance <= R_Range[2]:
return cal(resistance, A2, ZL2, ZU2)
if R_Range[0] <= resistance <= R_Range[1]:
return cal(resistance, A3, ZL3, ZU3)
else: return '666'
R = 1772.00
print(RtoK(R))
运行结果
C:\Users\zhangke\AppData\Local\Programs\Python\Python312\python.exe C:\Users\zhangke\Desktop\X97935\计算.py
14.23965581215788
进程已结束,退出代码为 0