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

  烙铁温度数据

 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

转载于:https://www.cnblogs.com/qiantuo1234/p/7612050.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值