基于NTC热敏电阻的温度测量与控制系统设计.docx

上传人:b****2 文档编号:486154 上传时间:2023-04-29 格式:DOCX 页数:31 大小:566.22KB
下载 相关 举报
基于NTC热敏电阻的温度测量与控制系统设计.docx_第1页
第1页 / 共31页
基于NTC热敏电阻的温度测量与控制系统设计.docx_第2页
第2页 / 共31页
基于NTC热敏电阻的温度测量与控制系统设计.docx_第3页
第3页 / 共31页
基于NTC热敏电阻的温度测量与控制系统设计.docx_第4页
第4页 / 共31页
基于NTC热敏电阻的温度测量与控制系统设计.docx_第5页
第5页 / 共31页
基于NTC热敏电阻的温度测量与控制系统设计.docx_第6页
第6页 / 共31页
基于NTC热敏电阻的温度测量与控制系统设计.docx_第7页
第7页 / 共31页
基于NTC热敏电阻的温度测量与控制系统设计.docx_第8页
第8页 / 共31页
基于NTC热敏电阻的温度测量与控制系统设计.docx_第9页
第9页 / 共31页
基于NTC热敏电阻的温度测量与控制系统设计.docx_第10页
第10页 / 共31页
基于NTC热敏电阻的温度测量与控制系统设计.docx_第11页
第11页 / 共31页
基于NTC热敏电阻的温度测量与控制系统设计.docx_第12页
第12页 / 共31页
基于NTC热敏电阻的温度测量与控制系统设计.docx_第13页
第13页 / 共31页
基于NTC热敏电阻的温度测量与控制系统设计.docx_第14页
第14页 / 共31页
基于NTC热敏电阻的温度测量与控制系统设计.docx_第15页
第15页 / 共31页
基于NTC热敏电阻的温度测量与控制系统设计.docx_第16页
第16页 / 共31页
基于NTC热敏电阻的温度测量与控制系统设计.docx_第17页
第17页 / 共31页
基于NTC热敏电阻的温度测量与控制系统设计.docx_第18页
第18页 / 共31页
基于NTC热敏电阻的温度测量与控制系统设计.docx_第19页
第19页 / 共31页
基于NTC热敏电阻的温度测量与控制系统设计.docx_第20页
第20页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于NTC热敏电阻的温度测量与控制系统设计.docx

《基于NTC热敏电阻的温度测量与控制系统设计.docx》由会员分享,可在线阅读,更多相关《基于NTC热敏电阻的温度测量与控制系统设计.docx(31页珍藏版)》请在冰点文库上搜索。

基于NTC热敏电阻的温度测量与控制系统设计.docx

基于NTC热敏电阻的温度测量与控制系统设计

题目名称:

基于NTC热敏电阻的温度测量与控制系统设计

摘要:

本系统由TL431精密基准电压,NTC热敏电阻(MF-55)的温度采集,A/D和D/A转换,单片机STC89C51为核心的最小控制系统,LCD1602的显示电路等构成。

温度值的线性转换通过软件的插值方法实现。

该系统能够测量范围为0~100℃,测量精度±1℃,并且能够记录24小时内每间隔30分钟温度值,并能够回调选定时刻的温度值,能计算并实时显示24小时内的平均温度、温度最大值、最小值、最大温差,且有越限报警功能。

由于采用两个水泥电阻作为控温元件,更有效的增加了温度控制功能。

关键词:

NTCTL431温度线性转换

Abstract:

ThesystemiscomposedofTL431asprecisevoltage,thetemperatureacauisitioncircuitwithNTCthermistors(MF-55),thetransformcircuitofA/DandD/A,thecoreoftheminimumcontrolsystemwithSTC89C51,1thedisplaycircuitusingLCD1602,etc.Getthetemperatureofthelineartransformationbythesoftwaremethod.Therangeofthemeasuresystemis0~100℃,measurementaccuracy+1℃.Itcanrecord24hoursofeachintervaltemperaturebyper30minutesselectedoftemperature.Thetimecanbecalculatedandreal-timedisplaywithin24hoursoftheaveragetemperature,maximumtemperatureandminimumtemperature,maximumvalue,andeachtemperaturesensorhasmoreallthewaylimitalarmfunction.Duetothetwocementresistanceastemperaturecontrolcomponents,themoreeffectiveincreasethetemperaturecontrolfunction.

Keyword:

NTCTL431temperaturelinearconversion

目录

1方案设计与论证3

1.1整体设计方案比较和选择3

2系统设计5

2.1总体设计5

2.2各单元模块功能介绍及电路设计5

2.2.1学习板电路5

2.2.2测温通道电路7

2.2.3模数转换电路8

2.3特殊器件的介绍8

3软件设计9

3.1软件流程图9

3.2线性转换处理--线性插值10

4系统测试11

4.1测试方法11

4.2测试结果12

4.3结果分析14

5结论14

参考文献14

附录:

15

附1:

元器件明细表15

附2:

仪器设备清单15

附3:

电路图图纸16

附4:

程序清单17

1方案设计与论证

1.1整体设计方案比较和选择

当某路传感器温度超越设定的温度上下阀值时,即产生相应的声光报警信号并显示该传感器的温度值,直至温度回到门限内(要求具有1℃的回差)或通过控制键解除警报。

后向通道通过水泥电阻作为控温元件,增加温度控制功能。

最后将输出的数字信号经过D/A转换,变换为温度,最终经过LCD1602进行显示。

该方案硬件电路简单,电路其输出精度不高图1方案1系统设计框图

图2方案2系统设计框图

三运放的放大增益计算公式:

由于:

=

=30K;

=20K;

=

=1K

所以:

最大可以放大约60倍。

电桥中

的取值决定了输出电压的精确度,经过多次测量,所以该处取值都为20K。

图3方案3系统设计框图

方案选定:

方案3方案论证:

综上所述能够满足系统设计的要求,所以选择方案3

2系统设计

2.1总体设计

经过TL431精密稳压源输出2.5V电压给一个桥式电阻电路,由于NTC热敏电阻的特性,所以随着温度的变化,电阻值减少了,后面在接一个三运放电路将电压放大到所需要的电压值。

输出的电压值经过8位A/D转换器ADC0804转换后,将数字信号经由单片机STC89C51进行处理,然后将这些值送由LCD1602进行显示(如图4所示)。

图4系统总体方案

2.2各单元模块功能介绍及电路设计

2.2.1学习板电路

学习板系统总体设计电路图(如图5所示)。

 

图5学习板系统总体设计图

学习板上独立按键和矩阵按键的电路图(如图6所示)。

图6键盘电路

STC89C51单片机电路图(如图7所示)。

图7单片机电路

2.2.2测温通道电路

下图为前向通道的电源部分。

中间有D1和D2两个发光二极管,用来指示电源是否正常供电,此外还加了两个大小电容的并联电路,起滤波作用(如图8所示)。

图8前向通道电源电路

控温电路,采用两个水泥电阻,更有效的对NTC热敏电阻进行控温操作(如图9所示)。

图9控温电路

2.2.3报警电路

蜂鸣器电路,当温度超过限度是起报警作用(图10报警电路)。

图10报警电路

2.2.3模数转换电路

前向通道中,当温度值转换为电压后,还需要将电压值进行A/D转换,转换后的值才能送到单片机进行处理。

后向通道中进行温度显示前应该先经过D/A转换(如图11模数转换电路)。

图11AD以及DA转换原理图

2.3特殊器件的介绍

热敏电阻器是一种随(感应)温度的变化其电阻值呈显著变化的热敏感半导体元件。

温度升高时阻值下降的热敏电阻器,称为负温度系数热敏电阻器(NTC)。

3软件设计

3.1软件流程图

该程序基于小系统板,小系统板上有显示、ADC转换、键盘等电路。

学习系统板上主控单片机为STC89C51,所以采用c51编程方便简单,软件流程图如下:

图8主程序流程图

3.2线性转换处理--线性插值

在ADC进行数据采集的过程中不可能每一个数值都在整温度所对应的ADC数值上,所以如果在两个数据的中间一段就要对其进行进一步的精确定位。

这样就必须知道采集到的数据在表1-2中的具体位置,因此要对数据表进行搜索、查找。

线性表的查找(也称检索),可以有比较常见的顺序查找、折半查找及分块查找等方法,分析线性表1-2可以得到折半查找的算法是比较高效的。

这样的插值计算实际上是分段的,用直线段来拟和温度曲线,因此在处理的过程中分段越细致拟和的曲线就越接近实际温度曲线。

表1插值表

温度传感器在0℃到100℃输出0V—2.5V,温度起点为0℃,满量程为100℃。

学习系统板子上有8位的A/D转换器对应输出的数字量为00000000B—11111111B(0-2.5V),应用以下变换公式进行变换:

AX=A0+(AM-A0)(NX-N0)/(NM-N0)

式中,A0为一次测量仪表的下限。

AM为一次测量仪表的上限。

AX实际测量值。

N0仪表下限对应的数字量。

NM仪表上限对应的数字量。

NX测量值对应的数字量。

温度非线性转换程序模块采用折线拟合法进行线性化处理

4系统测试

4.1测试方法

步骤1:

先安上元件后,测试电路是否正确连通,待没有任何问题后将集成芯片安上。

以此可以防止集成芯片由于电压过大而烧坏。

步骤2:

将NTC热敏电阻放入冰水混合物中(0,进行调零操作。

此时电压输出为0V。

步骤3:

将NTC热敏电阻放入沸水杯子中,进行调满操作。

此时的电压输出为最大,即为2.5V。

步骤4:

记录不同温度时刻对应的温度转换值和实际温度值,进行NTC温度特性曲线的绘制。

4.2测试结果

对于电桥温度的取值会影响后面测试温度的精度,所以在电桥平衡电阻(R1,R2)分别在200K和6.8K和20K时,对温度进行了测量。

具体情况如下图表格和图所示:

 

表2第一次温度曲线实际测量数据

表3第二次温度曲线实际测量数据

 

表3最终温度测量数据

4.3结果分析

又图上特性曲线可以看出,温度变化从0度开始到100°时,变化规律为先慢接着较快后很慢;

5结论

由于系统架构设计合理,功能电路实现较好,系统性能优良、稳定,较好地达到了题目要求的各项指标。

基于学习板小系统进行软件调试很容易。

在采集温度部分有调零和满刻度调整电路,在三运放的放大部分有滑动变阻器,可以很容易改变增益。

在实现温度转换时,利用插值法,在提高测量精度是变得更容易。

此外,在后面的控温部分可以采用TEC半导体制冷片。

因为采用三极管放大电路必须考虑三极管所允许的最大允许电流,否则会造成三极管烧坏。

参考文献

[1]陈武凡.小波分析及其在图像处理中的应用.科学出版社,2002.01.

[2]高吉祥主编.高频电子线路.北京:

电子工业出版社,2003

[3]易波.通信原理.长沙:

国防科技大学出版社出版,1998

[4]何立民.单片机应用系统设计系统配置与接口技术[M].北京:

北京航空航天大学,1990.

[5]李晓荃.单片机原理与应用[M].北京:

电子工业出版社,2000.

[6]樊昌信.通信原理(第五版)[M].北京:

国防工业出版社,2001.

[7]全国大学生电子设计设计竞赛组委员会.全国大学生电子设计竞赛训练教程[M].北京电子工业出版社,2005.

[8]俞俊民.自制恒流源[J].沈阳电力高等专科学校学报,1997.

[9]朱传奇.简易使用的直流电流源[J].山东电力技术,1999.

[10]马云峰.单片机控制的直流电流源设计[J].潍坊高等专科学校学报,1999.

[11]Richardc.Dorf.modernconctrolsysterm[M].BEIJING:

SciencePublishingHouse,2002.

[12]DonaldA.Neamen.Electroniccircuitanalysisanddesign[M].TsinghuaUniversityPressandSpringerVerlag.2002.

附录:

附1:

元器件明细表

1.基准稳压集成芯片TL431

2.ADC0804

3.DAC0832

4.单片机STC89C51

5.三极管8050

6.液晶LCD1602

附2:

仪器设备清单

1、数字信号发生器

2、数字万用表

3、模拟示波器

4、稳压电源

附3:

电路图图纸

前后向通道电路图

学习板小系统原理图

前后向通道PCB图

附4:

程序清单

******************************************

***课题:

NTC测温***

***创建时间:

2011年6月11日***

******************************************

/********************************************************************

主函数部分

********************************************************************/

voidmain()

{

ucharb=0,c,d;

floate;

init();//液晶初始化

xianshi(7,mima1,0x80);//显示密码字样

do{

du_key1();//扫描键盘

du_key2();

if(adjust1==4&adjust4==3)

{

b=1;

adjust1=0;

adjust4=0;

}

}

while(b==0);

Timer_start();

xianshi(16,deng1,0x80);//显示“pleasewait……”字样

while(remember<=50);

init();

xianshi(6,wendu1,0x80);

while

(1)

{

du_key1();

du_key2();

chunshu();

lvbo();

if(adjust1==1)

{

flag=flag+1;

if(flag==1)

{

init();

xianshi(8,look_shi,0x80);

}

write_command(0x80+9);

write_date(shu[adjust2]);

}

elseif(adjust1==2)

{

flag=flag+1;

if(flag==1)

{

init();

xianshi(7,look_ge,0x80);

}

c=adjust3/10;

d=adjust3%10;

write_command(0x80+8);

write_date(shu[c]);

write_command(0x80+9);

write_date(shu[d]);

}

elseif(adjust1==3)

{

flag=flag+1;

if(flag==1)

{

init();

xianshi(9,look,0xc0);

}

Look_for();

deep_chuli(wendu);

write_command(0xc0+10);

write_date(AD_buffer[0]);

write_command(0xc0+11);

write_date(AD_buffer[1]);

write_command(0xc0+12);

write_date('.');

write_command(0xc0+13);

write_date(AD_buffer[2]);

}

elseif(adjust1==4)

{

flag=flag+1;

if(flag==1)

{

init();

xianshi(9,day_aver,0xc0);

}

day_average();

deep_chuli(wendu);

write_command(0xc0+10);

write_date(AD_buffer[0]);

write_command(0xc0+11);

write_date(AD_buffer[1]);

write_command(0xc0+12);

write_date('.');

write_command(0xc0+13);

write_date(AD_buffer[2]);

}

elseif(adjust1==5)

{

flag=flag+1;

if(flag==1)

{

init();

xianshi(5,pwm_1,0xc0);

}

write_command(0xc0+5);

write_date(shu[tiao/10]);

write_command(0xc0+6);

write_date(shu[tiao%10]);

}

elseif(adjust1==6)

{

flag=flag+1;

if(flag==1)

{

init();

xianshi(5,pwm_2,0xc0);

}

write_command(0xc0+5);

write_date(shu[tiao/10]);

write_command(0xc0+6);

write_date(shu[tiao%10]);

}

elseif(adjust1==7)

{

flag=flag+1;

if(flag==1)

{

init();

xianshi(7,cha,0xc0);

}

e=max-min2;

deep_chuli(e);

write_command(0xc0+8);

write_date(AD_buffer[0]);

write_command(0xc0+9);

write_date(AD_buffer[1]);

write_command(0xc0+10);

write_date('.');

write_command(0xc0+11);

write_date(AD_buffer[2]);

}

else

{

flag=flag+1;

if(flag==1)

{

xianshi(6,wendu1,0x80);

xianshi(4,max1,0xc0);

xianshi(4,min1,0xc0+8);

}

line_processer(15,average);

if(flag1==1)

{

min2=wendu;

max=wendu;

flag1=0;

}

if(wendu>max)

{

max=wendu;

}

elseif(wendu

{

min2=wendu;

}

deep_chuli(wendu);

baojin();

write_command(0x80+6);

write_date(AD_buffer[0]);

write_command(0x80+7);

write_date(AD_buffer[1]);

write_command(0x80+8);

write_date('.');

write_command(0x80+9);

write_date(AD_buffer[2]);

deep_chuli(max);

write_command(0xc0+4);

write_date(AD_buffer[0]);

write_command(0xc0+5);

write_date(AD_buffer[1]);

write_command(0xc0+6);

write_date('.');

write_command(0xc0+7);

write_date(AD_buffer[2]);

deep_chuli(min2);

write_command(0xc0+12);

write_date(AD_buffer[0]);

write_command(0xc0+13);

write_date(AD_buffer[1]);

write_command(0xc0+14);

write_date('.');

write_command(0xc0+15);

write_date(AD_buffer[2]);

}

}

}

/*******************************************************************

子程序部分

********************************************************************/

/*******************************

AD采集

*******************************/

voidAD_caiji(ucharx)

{

csad=0;

WR1=0;//启动ad

_nop_();

WR1=1;

delay1();

AD_data=0xff;

RD1=0;

AD_buffer[x]=AD_data;

RD1=1;

WR1=0;

}

voidchunshu()//数据存储

{

uchari;

for(i=0;i<16;i++)

{

AD_caiji(i);

}

}

/********************************************

滤波模块

数据滤波去掉最大,最小值后求均值

**********************************************/

voidlvbo()

{

ucharx,y;

uintbuff;

for(x=15;x>0;x--)

{

for(y=x;y>0;y--)

{

if(AD_buffer[y]>AD_buffer[y-1])//大小排序(从大到小)

{

buff=AD_buffer[y-1];

AD_buffer[y-1]=AD_buffer[y];

AD_buffer[y]=buff;

}

}

buff=AD_buffer[0];

AD_buffer[0]=AD_buffer[x];

AD_buffer[x]=buff;

}

buff=0;

for(x=14;x>0;x--)

{

buff=buff+AD_buffer[x];

}

average=buff/14;

}

/**************************************

键盘查询

*************************************/

voiddelay1()

{

ucharg,h;

for(g=100;g>0;g--)

for(h=100;h>0;h--);

}

voiddu_key1()

{

key1=1;

if(key1==0)

{

delay1();

if(key1==0)

{

flag=0;

adjust1=adjust1+1;

if(adjust1==8)

{

adjust1=0;

}

}

while(key1==0);

}

}

voiddu_key2()

{

key2=1;

if(key2==0)

{

delay1();

if(key2==0)

{

if(adjust1==1)

{

adjust2=adjust2+1;

if(adjust2==5)//十位

{

adjust2=0;

}

}

elseif(adjust1==2)

{

adjust3=adjust3+1;//个位

if

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2