HP34401a实现高精度温度测量
老的HP34401a没有温度测量功能,在一些情况下使用非常不便。如果有pt100温度探头的话,可以配合做一个高精度温度记录仪,具备鸟枪换炮般的效果。
所需设备和辅材
- HP 34401a 6位半数字万用表
- 铠装pt100温度探头带线
- GPIB线缆
- Agilent 82357B USB - GPIB 转换器
- 冰水混合物
1.如图所示连接好探头和GPIB线缆

2.运行MATLAB,编写程序进行仪器控制,并读取阻值进行转换,铂金电阻阻值与温度的关系如下图所示

为了解决零下的温度,需要求解一个4次方程,为简便期间,使用Matlab进行直接求解。
if(Resi > R0)
% 0 ~ 850℃
% 列出方程系数
coe = [R0*B R0*(A+B) R0-Resi];
% 解方程
result = roots(coe);
% 取第二项解
Temp(1,index) = result(2,1);
else
% -200 ~ 0℃
% 列出方程系数
coe = [R0*C R0*C*(-100) R0*B R0*(A+B) R0-Resi];
% 解方程
result = roots(coe);
% 取第四项解
Temp(1,index) = result(4,1);
end
观察零下的结果会发现,在0 ~ -200范围内,在四个复数根中,只有第四项的虚部是一直为0的,这就是要找的那一项。
3.校准
假设需要更高精度,可以对pt100探头进行校准,方法就是获取0°C时的阻值,实际上可以认为是探头埋入冰水混合物的阻值。
本例子使用的探头放入冰水混合物阻值为100.66Ω。
如下图所示


HP34401A面板显示是这样的

这是采集到的一段烙铁升温和降温曲线,设定温度为480,可能是由于探头并未贴合紧密,烙铁头只有大约200°C的最高温度,最后的室温为25.62°C。

这是测量一段时间冰水混合物的曲线。

完整的测速代码在这里
% HP34401A DMM GPIB温度测试程序
% 1.使用pt100温度探头
% 2.使用后面板
% 3.4线开尔文法测电阻
% 4.使用温度-200 ~ 850
clc;close all;clear all;
%%
inslist = instrfind();
delete(inslist);
v34401a = visa('agilent','GPIB0::22::INSTR');
v34401a.InputBufferSize = 4196*200;
fopen(v34401a);
fprintf(v34401a,'*IDN?');
idn = fscanf(v34401a)
%%
% initlize 34401a
fprintf(v34401a,'*RST');
fprintf(v34401a,'*CLS');
fprintf(v34401a,'STATus:PRESet');
fprintf(v34401a,'*SRE 0');
fprintf(v34401a,'*ESE 0');
fprintf(v34401a,'CONFigure:FRESistance');
fprintf(v34401a,'TRIG:SOUR IMM');
fprintf(v34401a,'DISPLAY ON');
%%
A = 3.9083e-3;
B = -5.775e-7;
C = -4.183e-12;
R0 = 100; %pt100 0度值
N = 1000000;
Temp = zeros(1,N);
%%
p = animatedline;
% 显示起始时间
str = sprintf('开始时间:%s',datestr(datetime('now')));
ht_start = annotation('textbox','EdgeColor','none','String',str,'Position',[0.76 0.8 0.1 0.1]);
% 显示当前时间
str = sprintf('当前时间:%s',datestr(datetime('now')));
ht_stop = annotation('textbox','EdgeColor','none','String',str,'Position',[0.76 0.75 0.1 0.1]);
xlabel('time');ylabel('Temp/℃');
title('温度曲线记录');
grid on;
for index = 1 : 1 : N
%read lux
fprintf(v34401a,'READ?'); % 读取温度
Resi = str2num(fscanf(v34401a)); % 转为double型
if(Resi > R0)
% 0 ~ 850℃
% 列出方程系数
coe = [R0*B R0*(A+B) R0-Resi];
% 解方程
result = roots(coe);
% 取第二项解
Temp(1,index) = result(2,1);
else
% -200 ~ 0℃
% 列出方程系数
coe = [R0*C R0*C*(-100) R0*B R0*(A+B) R0-Resi];
% 解方程
result = roots(coe);
% 取第四项解
Temp(1,index) = result(4,1);
end
% 面板显示当前点温度值,格式[xxx.xx]
str = sprintf('DISPLAY:TEXT '' %03.02f C''',Temp(1,index));
fprintf(v34401a,str);
% 动态绘图
addpoints(p,index,Temp(1,index));
axis auto;
% 更新时间
ht_stop.String = sprintf('当前时间:%s',datestr(datetime('now')));
drawnow limitrate
end
%%
% Diconnect from instrument object, obj1.
fclose(v34401a);
% Clean up all objects.
delete(v34401a);
%delete(t1);
烙铁温度数据

浙公网安备 33010602011771号