码迷,mamicode.com
首页 > 其他好文 > 详细

HP34401a实现高精度温度测量

时间:2017-09-29 19:25:24      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:高精度   one   poi   text   int   close   lin   情况   animate   

老的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时的阻值,实际上可以认为是探头埋入冰水混合物的阻值。

技术分享

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

 

完整的测速代码在这里

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

  

HP34401a实现高精度温度测量

标签:高精度   one   poi   text   int   close   lin   情况   animate   

原文地址:http://www.cnblogs.com/qiantuo1234/p/7612050.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!