要想做得精确,可釆用两种方案,一是查表,把所有温度与釆集值做成一个表,速度快精度高但体积大,一是分段查表,将实测曲线按精度需求划分为多个段,将每个段的系数保存为表,qq1815174011
要想测量准NTC热敏电阻阻值,关键是要使电阻处于恒温状态,温度误差会引起测试的误差,不同用途的NTC测试需要不同精度的恒温误差,像精密测温的电阻恒温精度要小于005度,补偿型的电阻恒温精度要小于02度,功率型的电阻恒温精度要小于1度。阻值用电桥测量是可以的,但对于小体积的NTC热敏电阻,不建议使用,因为电桥的测量电流较大,会引起电阻体的自热,造成测量的误差。
热敏电阻测温度(程序+仿真)
#include<reg52h>
#include<intrinsh>
#include<mathh>
typedef unsignedchar uchar;
typedef unsignedint uint;
sbit CE = P1^1;
sbit STS=P1^0;
sbit RC=P1^4;
sbit A0=P1^3;
sbit CS=P1^2;
sbit RS = P1^5 ;
sbit RW = P1^6 ;
sbit EN = P1^7 ;
void delay_ms(uintz)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
uintAD1674_Read(void)
{
uint temp;
uchar temp1,temp2;
CS=1; //片选信号
CE=0; //初始化,关闭数据采集
CS=0;
A0=0;
RC=0;
CE=1;//CE=1,CS=0,RC=0,A0=0启动12位温度转换
_nop_();
while(STS==1); //等待数据采集结束
CE=0; //芯片使能关闭
RC=1;
A0=0;
CE=1;//CE=1,CS=0,RC=1,12/8=1,A0=0 允许高八位数据并行输出
_nop_();
temp1=P0; //读取转换结果的高八位
CE=0; //芯片使能关闭
RC=1;
A0=1;
CE=1;//CE=1,CS=0,RC=1,12/8=0,A0=1 允许低四位数据 并行输出
_nop_();
temp2=P0; //读取转换结果的第四位
temp=((temp1<<4)|(temp2&0X0F)); //高位和低位合成实际温度,temp2为PO口的高四位
return (temp); //还回转换结果,右移四位是因为temp2为P0口的高四位
}
/
写数据
/
voidw_dat(unsigned char dat)
{
RS = 1;
//EN = 0;
P2 = dat;
delay_ms(5);
RW = 0;
EN = 1;
EN = 0;
}
/
写命令
/
voidw_cmd(unsigned char cmd)
{
RS = 0;
// EN = 0;
P2 = cmd;
delay_ms(5);
RW = 0;
EN = 1;
EN = 0;
}
/
发送字符串到LCD
/
voidw_string(unsigned char addr_start, unsigned char p)
{
unsigned char pp;
pp = p;
w_cmd(addr_start);
while (pp != '\0')
{
w_dat(pp++);
}
}
/
初始化1602
/
voidInit_LCD1602(void)
{
EN = 0;
w_cmd(0x38); // 162显示,57点阵,8位数据接口
w_cmd(0x0C); // 显示器开、光标开、光标允许闪烁
w_cmd(0x06); // 文字不动,光标自动右移
w_cmd(0x01); // 清屏
}
void process(uintdate,uchar add)
{
uchar A[7];
A[0]=date/1000%10+'0';
A[1]=date/100%10+'0';
A[2]='';
A[3]=date/10%10+'0';
A[4]=date%10+'0';
A[5]='C';
w_string(add,A);
}
void main()
{
uintVOL[25]={343,339,332,328,320,316,312,304,300,292,289,285,277,273,265,261,257,250,246,242,234,230,226,222,218};
uintTemper[25]={100,200,300,400,500,600,700,800,900,1000,1100,1200,1300,1400,1500,1600,1700,1800,1900,2000,2100,2200,2300,2400,2500};
uchar i,flag=0;
uint result,temp1,temp2;
float res;
Init_LCD1602();
w_string(0x80,"Temper:");
// w_string(0xC0,word2);
while (1)
{
res=(float)(AD1674_Read());
result=(uint)((res/20480-10)5000);
temp1=abs(result-VOL[0]);
for(i=1;i<25;i++)
{
temp2=abs(result-VOL);
if(temp1>=temp2)
{
temp1=temp2;
flag=i;
}
}
process(Temper[flag],0x80+7);
//process(result,0xc0);
//delay_ms(1000);
}
}
正确的使用NTC热敏电阻,能延长敏感元件的使用寿命,南京时恒电子一般使用时需要注意以下几点:
(1)避免在热敏电阻和温度传感器周围温度突然变化,以避免老化。
(2)通过热敏电阻和温度传感器的电流可能导致热敏电阻体加热,引起温度变化,请在选择时考虑温度变化。(耗散系数)
(3)5秒钟后测量开始,更好7秒。
(4)在要求的快速精密温度测量中,小型,小热时间常数的NTC热敏电阻应更适合。
(5)远离多尘,潮湿,腐蚀性气体,脱氧,强烈的振动,或有类似危险状况的地方。
既然用热敏电阻,想办法测量电阻就行了啊。
比如连一个简单的分压电路,用一个简单的USB采集卡测热敏电阻两端电压,根据分压比,在程序中换算出电阻值,再根据那个热敏电阻的特性,换算出温度。
你需要做的仅仅是串合适大小的电阻,然后接上电源,然后在热敏电阻两端接上AI口(最好用差分端口)。然后做一个超级简单的AI小程序。不知道你做过DAQ没,这个是最简单的吧。
以上就是关于我用STC12C2052AD单片机和NTC热敏电阻做的温度测量,电阻分压方式,中间抽头直接接单片机全部的内容,包括:我用STC12C2052AD单片机和NTC热敏电阻做的温度测量,电阻分压方式,中间抽头直接接单片机、NTC热敏电阻的阻值测量方法、在proteus如何仿真ntc热敏电阻等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)