老的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);
烙铁温度数据