HP34401a实现高精度温度测量

时间:2024-02-18 14:50:57

老的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);

  烙铁温度数据

 https://files.cnblogs.com/files/qiantuo1234/%E7%83%99%E9%93%81%E6%B8%A9%E5%BA%A6%E6%95%B0%E6%8D%AE.zip