标签:高精度 one poi text int close lin 情况 animate
老的HP34401a没有温度测量功能,在一些情况下使用非常不便。如果有pt100温度探头的话,可以配合做一个高精度温度记录仪,具备鸟枪换炮般的效果。
所需设备和辅材
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);
标签:高精度 one poi text int close lin 情况 animate
原文地址:http://www.cnblogs.com/qiantuo1234/p/7612050.html