我用STC12C2052AD单片机和NTC热敏电阻做的温度测量,电阻分压方式,中间抽头直接接单片机

我用STC12C2052AD单片机和NTC热敏电阻做的温度测量,电阻分压方式,中间抽头直接接单片机,第1张

要想做得精确,可釆用两种方案,一是查表,把所有温度与釆集值做成一个表,速度快精度高但体积大,一是分段查表,将实测曲线按精度需求划分为多个段,将每个段的系数保存为表,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热敏电阻等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9519414.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存