上网上找pt100电桥,会出来不少讲平衡电桥的,我不知道这个具体应用场合在哪,讲相关理论当然可以,可是放在实际检测中我实在想不出怎么平衡法,谁会教教我。
上面四图都是Rp随温变产生差压交给后端处理采集的。
A图浪费3线Pt100计算引入1.5Rr。
D图三线制单横流源有相减后再后续处理,理论没误差。
E图三线制双横流源在专用RTD上见过,理论没误差。
再来看C图,假设后端输入阻抗高采集吸取电流小,动桥臂高侧低侧各引入一个Rr,如果高低侧比例相同抵消了,但是从稀少的经验看一般高侧远大于低侧这时有个特点是即使Rp=Rref,deltaV也不为零,所以还是不好分析写个式子:deltaV=2.5V[(Rp+2Rr)/(Rh+Rp+2Rr)-Rref/(RH+Rref)]。
B图还是给个前提Rh>>Rref>>Rr 所以B图中电桥真正的电源轨为VCC-GND’,这个电路动桥臂RH-Rr-Rp和定桥臂Rh-Rref-Rr各串了一个Rr,看图
(if Rr=0)Rp<Rr时deltaV<0 图中竖红色线,反之则是蓝线。
先忽略GND’引入Rr使上图黄斜线向右移动VCC不动,绿线为高低侧分界线不动所以红线蓝线都会减小。再考虑GND’使桥轨减小,VCC下移,还是缩短红线蓝线。
B图总的来说Rr会使测得的压差deltaV要比没有Rr时绝对值更小。我曾尝试列式子寻找Rr引入得到deltaV使用标准不计Rr反算Rp的关系,可是式子分母套分母越来越复杂,谁曾成功推出来过,一定要教教我。
Matlab算误差
Script.m
%% DataInitalization
clear
clf
srcRp=(91:0.1:175)';
srcRl=(0:0.5:10)';
%% Result calc
%stand equation
% deltaU=U*(Rp/(Rh+Rp)-Pr/(Rh+Rr));
%res(i:size(srcRp,i),i)=0;
xAxisSize=size(srcRp,1);
yAxisSize=size(srcRl,1);
for i=1:yAxisSize
for j=1:xAxisSize
resB(j,i)=RealRp2deltaU(RealU(srcRp(j,1),srcRl(i,1)),srcRp(j,1),srcRl(i,1));
calcBRp(j,i)=deltaU2RpUseSE(resB(j,i));
errBRp(j,i)=calcBRp(j,i)-srcRp(j,1);
errBTemp(j,i)=Rp2Temp(calcBRp(j,i))-Rp2Temp(srcRp(j,1));
resC(j,i)=ClassCRealRp2deltaU(1,srcRp(j,1),srcRl(i,1));
calcCRp(j,i)=deltaU2RpUseSE(resC(j,i));
errCRp(j,i)=calcCRp(j,i)-srcRp(j,1);
errCTemp(j,i)=Rp2Temp(calcCRp(j,i))-Rp2Temp(srcRp(j,1));
end
end
%% Tempdel
srcTemp(1:size(srcRp,1),1:size(srcRp,2))=0;
for i=1:size(srcRp,1)
srcTemp(i,1)=Rp2Temp(srcRp(i,1));
end
%% plot Vector
figure(1);
mh=mesh(srcRl,srcRp,errBTemp);
hold on;
%figure(2);
mh2=mesh(srcRl,srcRp,errCTemp);
zlabel('err')
ylabel('Rp')
xlabel('Rl')
% So Rl make deltaU closing Balance Position when Rp<Rr calcRp More ,Rp>Rr
% calcRp less
Rp2Temp.m
function [res]=Rp2Temp(RpIn)
res=RpIn*RpIn*0.00104+2.3509*RpIn-245.37028;
end
RealU.m
%ClassB 桥轨电压
function [ resU ] = RealU(Rp, Rl )
U=1;
Rh=2490;
Rr=100;
Br1=Rh+Rp+Rl;
Br2=Rh+Rr+Rl;
Br=ParallelRes(Br1,Br2);
resU=U*Br/(Br+Rl);
end
RealRp2deltaU.m
% ClassB
function [ output_args ] = RealRp2deltaU(Ur,Rp,Rl )
%Ur=1;
Rh=2490;
Rr=100;
deltaUr=Ur*((Rp+Rl)/(Rh+Rp+Rl)-(Rr+Rl)/(Rh+Rr+Rl));
output_args=deltaUr;
end
ParallelRes.m
function [ output_args ] = ParallelRes( ra,rb )
%PARALLELRES Summary of this function goes here
% Detailed explanation goes here
res=ra*rb/(ra+rb);
output_args =res;
end
deltaU2RpUseSE.m
function [ output_args ] = deltaU2RpUseSE( deltaU )
%DELTAU2RP Summary of this function goes here
% Detailed explanation goes here
U=1;
Rh=2490;
Rr=100;
RpCalc=Rh*(deltaU/U+Rr/(Rr+Rh))/(1-deltaU/U-Rr/(Rr+Rh));
output_args=RpCalc;
end
ClassCRealRp2deltaU.m
% ClassC
function [ output_args ] = ClassCRealRp2deltaU(Ur,Rp,Rl )
%Ur=1;
Rh=2490;
Rr=100;
output_args=Ur*((Rp+2*Rl)/(Rh+Rp+2*Rl)-Rr/(Rh+Rr));
end