如果挡位1取9000,档位2取99000,档位3取999000.
在上述电路制作成功后并没有达到比较好的测量效果,对于大电阻的测量测量值往往会远小于实际电阻值。
针对这个问题,在对放大器各级电压比较后发现主要是由于大电阻测量时输入电压太小以至于达不到放大器的正常放大电压,因此上述电路在很大程度上限制了测量电阻的范围。
对电路做以下改变:
直接将前两级放大合并为一级放大,达到减小放大的门款电压。
其他测量方法:
原理图如下:
通过恒流源(恒流电路此处用电流源代替)给待测电阻供电,放大待测电阻的电压,输出给电压表。
此方法和上述方案原理上的差别在于一个利用的是电流恒定,另一个利用的是电压恒定,对于电流的恒定,一方面,它的电路设计比较复杂,另一方面,如果电流源电路设计的不太理想,电流源的大小变化会产生很大的测量误差。
不过它可以使测量误差比较稳定,在测量误差不大的情况下电压恒定电路的误差变化可以忽约吗,因此本设计不采用这种设计思路。
4.电容的测量原理与振荡电路:
根据555定时器构成单稳态,产生脉冲波形,通过单片机读取高低电平得出频率,通过公式换算得到电容值。
总结:
整个设计基本上是围绕放大器所组成的放大电路展开,放大器的放大误差直接决定着测量的误差。
此设计设计电路简单,测量精度比较小。
而且材料成本低,对于直流电路的测量有着很好的实用性。
程序
主函数
#include""
sbitAAD_CS=P1^0;
sbitAAD_D0=P1^2;
sbitAAD_D1=P1^3;
sbitAAD_CLK=P1^1;
sbitAVD_CS=P1^4;
sbitAVD_D0=P1^6;
sbitAVD_D1=P1^7;
sbitAVD_CLK=P1^5;
sbitkey_boat=P3^3;
unsignedcharAAD_read(),AVD_read();
unsignedchardat[4]={0,0,0,0};
unsignedchardate=0,date1=0,key=0,time=18;
unsignedlongadd;
voidmain()
{init();
TH0=0x3c;
TL0=0xb0;
TH1=0x3c;
TL1=0xb0;
TMOD=0x11;
EA=1;
EX0=1;
EX1=1;
IT0=1;
IT1=1;
ET0=1;
ET1=1;
PT0=0;
PX0=0;
PX1=1;
TR0=1;
while
(1);
}
voidcapac()interrupt0;
writedate(0x82,dat[1]+'0');
writedate(0x83,dat[2]+'0');}
if(date==2);
writedate(0x83,dat[2]+'0');
writedate(0x84,dat[3]+'0');}
if(date1==1);
writedate(0xc2,dat[1]+'0');
writedate(0xc3,dat[2]+'0');}
else
writedate(0xc0,'1');}
if(date1==2);
writedate(0xc3,dat[2]+'0');}
else
writedate(0xc0,'1');
}
if(date1==3);
writedate(0xc3,dat[2]+'0');
writedate(0xc4,dat[3]+'0');}
else
writedate(0xc0,'1');
}
if(date1==6);
writedate(0xc4,dat[3]+'0');
}
else
writedate(0xc0,'1');}
if(date1==7);
writedate(0x84,dat[3]+'0');}
else
writedate(0x80,'1');
add=0;
}
if(date1==8);
writedate(0x84,dat[3]+'0');}
else
writedate(0x80,'1');
add=0;
}
if(date1==9)//电容档位3(此档位不可用)
{TR0=0;
writedate(0xc0,add/+'0');
writedate(0xc1,(add/1000000)%10+'0');
writedate(0xc2,(add/100000)%10+'0');
writedate(0xc3,(add/10000)%10+'0');
writedate(0xc4,(add/1000)%10+'0');
writedate(0xc5,(add/100)%10+'0');
writedate(0xc6,(add/10)%10+'0');
writedate(0xc7,(add)%10+'0');
add=0;}
time=18;
}
TH0=0x3c;
TL0=0xb0;
}
voidkeyboat()interrupt2//功能转换开关
{unsignedchartrange=200;
if(key_boat==0)
{delay(50);
if(key_boat==0)
{
key++;
TR0=0;
if(key>11){key=1;TR0=1;}
writeadd
(1);
switch(key)
{case1:
writedate(0x80+13,'U');writedate(0x80+14,'5');
writedate(0x80+15,'v');break;
case2:
writedate(0x80+12,'U');writedate(0x80+13,'3');writedate(0x80+14,'0');
writedate(0x80+15,'v');break;
case3:
writedate(0xc0+11,'I');writedate(0xc0+12,'1');writedate(0xc0+13,'0');
writedate(0xc0+14,'m');writedate(0xc0+15,'A');break;
case4:
writedate(0xc0+11,'I');writedate(0xc0+12,'8');writedate(0xc0+13,'0');
writedate(0xc0+14,'m');writedate(0xc0+15,'A');break;
case5:
writedate(0xc0+10,'I');writedate(0xc0+11,'1');writedate(0xc0+12,'5');writedate(0xc0+13,'0');
writedate(0xc0+14,'m');writedate(0xc0+15,'A');break;
case6:
writedate(0xc0+13,'R');writedate(0xc0+14,'9');
writedate(0xc0+15,'K');break;
case7:
writedate(0xc0+12,'R');writedate(0xc0+13,'9');writedate(0xc0+14,'9');
writedate(0xc0+15,'K');break;
case8:
writedate(0xc0+11,'R');writedate(0xc0+12,'9');writedate(0xc0+13,'9');
writedate(0xc0+14,'9');writedate(0xc0+15,'K');break;
case9:
writedate(0x80+12,'C');writedate(0x80+13,'=');
writedate(0x80+14,'u');writedate(0x80+15,'F');break;
case10:
writedate(0x80+12,'C');writedate(0x80+13,'=');
writedate(0x80+14,'n');writedate(0x80+15,'F');break;
case11:
writedate(0x80+10,'e');writedate(0x80+11,'r');writedate(0x80+12,'r');writedate(0x80+13,'o');
writedate(0x80+14,'r');break;
}
date=key;
date1=key-2;}}
delay(50);
while(key_boat==0&&trange)
trange--;
key_boat=1;
TR0=1;
}
unsignedcharAAD_read()//电流测量端数据接收函数
{unsignedchardat,i,test=0,adval=0;
AAD_CLK=0;//
AAD_D1=1;
_nop_();
AAD_CS=0;
_nop_();
AAD_CLK=1;
_nop_();
AAD_CLK=0;//
AAD_D1=0;
_nop_();
AAD_CLK=1;
_nop_();
AAD_CLK=0;//
AAD_D1=0;
_nop_();
AAD_CLK=1;
_nop_();
AAD_CLK=0;
AAD_D1=1;
for(i=0;i<8;i++)
{_nop_();
adval<<=1;
AAD_CLK=1;_nop_();
AAD_CLK=0;
if(AAD_D0)
adval|=1;
}
for(i=0;i<8;i++)
{_nop_();test>>=1;
if(AAD_D0)
test|=0x80;
AAD_CLK=1;_nop_();
AAD_CLK=0;
}
if(adval==test)
dat=test;
_nop_();
AAD_CS=1;
AAD_D0=1;
AAD_D1=1;
AAD_CLK=1;
returndat;
}
unsignedcharAVD_read()//电压测量端ADC0832数据接收函数
{unsignedchardat,i,test=0,adval=0;
AVD_CLK=0;//
AVD_D1=1;
_nop_();
AVD_CS=0;
_nop_();
AVD_CLK=1;
_nop_();
AVD_CLK=0;//
AVD_D1=0;
_nop_();
AVD_CLK=1;
_nop_();
AVD_CLK=0;//
AVD_D1=0;
_nop_();
AVD_CLK=1;
_nop_();
AVD_CLK=0;
AVD_D1=1;
for(i=0;i<8;i++)
{_nop_();
adval<<=1;
AVD_CLK=1;_nop_();
AVD_CLK=0;
if(AVD_D0)
adval|=1;
}
for(i=0;i<8;i++)
{_nop_();test>>=1;
if(AVD_D0)
test|=0x80;
AVD_CLK=1;_nop_();
AVD_CLK=0;
}
if(adval==test)
dat=test;
_nop_();
AVD_CS=1;
AVD_D0=1;
AVD_D1=1;
AVD_CLK=1;
returndat;
}
显示函数
#include""
voiddelay(unsignedchari)
{unsignedcharj=100;
while(i>0)
{j=100;
while(j--);
i--;}
}
voidwriteadd(unsignedcharadd)//写入指令
{
check();
E=0;
RS=0;
RW=0;
delay
(1);
LCD=add;
delay
(1);
E=1;
delay
(1);
E=0;
delay
(1);
}
voidcheck()
{
RS=0;RW=1;
delay
(1);
E=1;
while(LCD&0x80);
E=0;
delay
(1);}
voidwritedate(unsignedcharadd,unsignedchardate)//写入地址和数据
{
writeadd(add);
check();
E=0;
RS=1;
RW=0;
delay
(1);
LCD=date;
delay
(1);
E=1;
delay
(1);
E=0;
delay
(1);
}
voidinit()
{writeadd(0xc);
writeadd(0x3c);
}
显示函数头文件
#ifndefLCD_H
#defineLCD_H
#include""
#include<>
#defineLCDP0
sbitRS=P2^6;
sbitRW=P2^5;
sbitE=P2^7;
voiddelay(unsignedchari);
voidwriteadd(unsignedcharadd);
voidwritedate(unsignedcharadd,unsignedchardate);
voidcheck();
voidinit();
#endif