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

2022-07-07 20:19:57   文档大全网     [ 字体: ] [ 阅读: ]

#文档大全网# 导语】以下是®文档大全网的小编为您整理的《基于NTC热敏电阻的温度测量与控制系统设计》,欢迎阅读!
热敏电阻,控制系统,测量,温度,基于
题目名称:基于NTC热敏电阻的温度测量与控

制系统设计



摘要: 本系统由TL431精密基准电压,NTC热敏电阻(MF-55)的温度采集,

A/DD/A转换,单片机STC89C51为核心的最小控制系统,LCD1602的显示电路等构成。温度值的线性转换通过软件的插值方法实现。该系统能够测量范围为0~100℃,测量精度±1,并且能够记录24小时内每间隔30分钟温度值,并能够回调选定时刻的温度值,能计算并实时显示24小时内的平均温度、温度最大值、最小值、最大温差,且有越限报警功能。由于采用两个水泥电阻作为控温元件,更有效的增加了温度控制功能。 关键词: NTC TL431 温度 线性转换



Abstract: The system is composed of TL431 as precise voltage,the temperature

acauisition circuit with NTC thermistors (MF-55), the transform circuit of A/D and D/A, the core of the minimum control system with STC89C51, 1the display circuit usingLCD1602, etc. Get the temperature of the linear transformation by the software method. The range of the measure system is 0 ~ 100 , measurement accuracy + 1 .It can record 24 hours of each interval temperature by per 30 minutes selected of temperature.The time can be calculated and real-time display within 24 hours of the average temperature, maximum temperature and minimum temperature, maximum value, and each temperature sensor has more all the way limit alarm function. Due to the two cement resistance as temperature control components, the more effective increase the temperature control function.

Keyword: NTC TL431 temperature linear conversion








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



2


1方案设计与论证

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

温度测量和控制系统,基于NTC热敏电阻的特性进行设计当外界温度变化时,可以将温度值转换为电压值。电压值经过模数转换后送入单片机进行处理。当某路传感器温度超越设定的温度上下阀值时,即产生相应的声光报警信号并显示该传感器的温度值,直至温度回到门限内(要求具有1℃的回差)或通过控制键解除警报。后向通道通过水泥电阻作为控温元件,增加温度控制功能。最后将输出的数字信号经过D/A转换,变换为温度,最终经过LCD1602进行显示。

NTC热敏电阻特点是在工作温度范围内电阻阻值随温度的上升而降低,可满0℃~100℃测量范围,但热敏电阻精度、重复性、可靠性较差,不适用于检测小于1℃的信号;而且线性度很差,不能直接用于A/D转换,应该用硬件或软件对其进行线性化补偿。

该温度测控系统,需要前向通道(温度采集器和AD转换器),单片机控制系统和后向通道(温度控制系统)三部分组成。其中温度采集器部分有以下三种方案: 方案1

采用NTC热敏电阻,恒流源(采用LM317L,内部提供1.2V的基准电压)和相电压跟随器运放构成(如图1所示)

方案优点:该方案硬件电路简单,电路电流值较小,焦耳热损耗很小,温度测量误差可以控制在很小的范围内。

方案缺点:因为恒流源要提供毫安数量级的电流,但受电源变化的影响较大,故要求电源十分稳定,同时其输出精度不高。



1 方案1系统设计框图



方案2

采用恒压源、滑动变阻器和同相电压跟随器的运放电路构成(如图2所示) 方案优点:原理简单,电路简单;

方案缺点:恒压源不能保证绝对的恒压,从而使温度测得不稳定。



3






2 方案2系统设计框图



方案3

基于紧密稳压电源TL431作为恒压源,后接电桥电阻电路和三运放电路(如3所示)

R6R7R11

三运放的放大增益计算公式:AV( 1)

R5R10

由于:R6=R7=30K;R5=20K;R11=R10=1K 所以:AV最大可以放大约60倍。

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



3 方案3系统设计框图



方案选定:方案3 方案论证:

综上所述前面采用电桥方法可以减小由于恒压源输出电压的波动感的影响。后面采用差分放大,从而输出很稳定,能够满足系统设计的要求,所以选择方案3



4


其中运放选OP07(零点漂移很小,类似于精密放大,虽然带宽不是很宽,但是在此处已经足够了)方案3中,R5用滑动变阻器,可以很方便的改变增益。同时又不影响电路的对称性。

2 系统设计

2.1 总体设计

经过TL431精密稳压源输出2.5V电压给一个桥式电阻电路由于NTC热敏电阻的特性,所以随着温度的变化,电阻值减少了,后面在接一个三运放电路电压放大到所需要的电压值。输出的电压值经过8A/D转换器ADC0804转换后,将数字信号经由单片机STC89C51进行处理,然后将这些值送由LCD1602进行显示(如图4所示)



前向通道

温度采集

模块

STC89C51MCU

后向通道

水泥电阻控温模块

A/D

D/A

display





4 系统总体方案



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

2.2.1 学习电路

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





5




LED数码显示器

P1

P0

LED流水灯 DA转换器 LCD显示器 蜂鸣器 MCU

AD转换器 温度传感器 键盘

EEPROM

P3

P2

USB通信接口电源

计算机

5 学习板系统总体设计

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





6 键盘电路

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

6








7 单片机电路

2.2.2 测温通道电路

下图为前向通道的电源部分。中间有D1D2两个发光二极管,用来指示电源是否正常供电,此外还加了两个大小电容的并联电路起滤波作用(如图8所示)





8 前向通道电源电路

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



9 控温电路





7


2.2.3 报警电路



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



10 报警电路

2.2.3 模数转换电路

前向通道中,当温度值转换为电压后,还需要将电压值进行A/D转换,转换后

的值才能送到单片机进行处理。后向通道中进行温度显示前应该先经过D/A转换(如图11 模数转换电路



11 AD以及DA转换原理图

2.3 特殊器件的介绍

热敏电阻器是一种随(感应)温度的变化其电阻值呈显著变化的热敏感半导体元件。温度升高时阻值下降的热敏电阻器,称为负温度系数热敏电阻器NTC NTC负温度系数热敏电阻R-T特性如下图12所示:

8






12 B 值相同,阻值不同的 R-T 特性曲线示意图

电阻值和温度变化的关系式为:



其中,RT为在温度T(K)时的NTC热敏电阻阻值,RN为在额定温度TN(K)时的NTC敏电阻阻值。(TN25℃,RN=120 kΩ)T为规定温度(K)BNTC热敏电阻的材料常数,又叫热敏指数。而且,



通过公式(1)(2)以及表1可求得B=3 900 K从而可以得出电阻值和温度变化的关系式为:



3 软件设计

3.1 软件流程图



该程序基于小系统板,小系统板上有显示、ADC转换、键盘等电路学习系统板上主控单片机为STC89C51,所以采用c51编程方便简单,软件流程图如下:

9


开始

采集数据

N

=16

Y

数字滤波

线性化处理

报警处理

30分钟定时

处理

显示处理

报警超过上下限

=30分钟

Y

存储

是否按键

Y

存储

N

回差一度

N

N

Y

解除报警

数据预处理

显示

结束





8 主程序流程图

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

ADC进行数据采集的过程中不可能每一个数值都在整温度所对应的ADC数值上,所以如果在两个数据的中间一段就要对其进行进一步的精确定位。这样就必须知道采集到的数据在表12中的具体位置,因此要对数据表进行搜索、查找。线性表的查找(也称检索),可以有比较常见的顺序查找、折半查找及分块查找等方法,分析线性表12可以得到折半查找的算法是比较高效的。 这样的插值计算实际上是分段的,用直线段来拟和温度曲线,因此在处理的过程中分段越细致拟和的曲线就越接近实际温度曲线。

1 插值表

10






温度传感器在0℃到100℃输出0V2.5V,温度起点为0℃,满量程为100℃。学习系统板子上有8位的A/D转换器对应输出的数字量为00000000B11111111B0-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温度特性曲线的绘制。

11


4.2 测试结果

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

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







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



12




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





13




3 最终温度测量数据





4.3结果分析

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

接着较快后很慢;

5 结论

由于系统架构设计合理,功能电路实现较好,系统性能优良、稳定,较好地达到了题目要求的各项指标。基于学习板小系统进行软件调试很容易。在采集温度部分有调零和满刻度调整电路在三运放的放大部分有滑动变阻器,可以很容易改变增益。在实现温度转换时,利用插值法,在提高测量精度是变得更容易。

此外,在后面的控温部分可以采用TEC半导体制冷片。因为采用三极管放电路必须考虑三极管所允许的最大允许电流,否则会造成三极管烧坏。

参考文献

[1] [2] [3] [4] [5]



陈武凡.小波分析及其在图像处理中的应用.科学出版社,2002.01. 高吉祥主编 . 高频电子线路 . 北京:电子工业出版社,2003 易波 . 通信原理 . 长沙:国防科技大学出版社出版,1998

何立民.单片机应用系统设计系统配置与接口技术[M].北京:北京航空航天大学,1990. 李晓荃.单片机原理与应用[M]. 北京:电子工业出版社,2000.

14


[6] 樊昌信.通信原理(第五版)[M].北京:国防工业出版社,2001 .

[7] 全国大学生电子设计设计竞赛组委员会.全国大学生电子设计竞赛训练教程[M].北京

电子工业出版社,2005.

[8] 俞俊民.自制恒流源[J].沈阳电力高等专科学校学报,1997. [9] 朱传奇.简易使用的直流电流源[J].山东电力技术,1999.

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

[11] Richard c .Dorf.modern conctrol systerm[M].BEIJING:Science Publishing House2002. [12] Donald A. Neamen. Electronic circuit analysis and design[M].Tsinghua University Press

and Springer Verlag.2002.

附录:

1:元器件明细表

1. 基准稳压集成芯片TL431 2. ADC0804 3. DAC0832

4. 单片机STC89C51 5. 三极管8050 6.

液晶LCD1602

2:仪器设备清单

1、数字信号发生器 2、数字万用表 3、模拟示波器 4、稳压电源

15


3电路图图纸



前后向通道电路



学习板小系统原理图

16




前后向通道PCB

4:程序清单

****************************************** *** 课题:NTC测温 *** *** 创建时间:2011年6月11日 *** ******************************************

/******************************************************************** 主函数部分

********************************************************************/ void main() {

uchar b=0,c,d; float e;

init(); //液晶初始化 xianshi(7,mima1,0x80); //显示密码字样 do{

du_key1(); //扫描键盘 du_key2();

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

b=1; adjust1=0; adjust4=0;



17




} }

while(b==0); Timer_start();

xianshi(16,deng1,0x80); //显示“please wait……”字样 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]); }

else if(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]);

} else if(adjust1==3) {

flag=flag+1;



18


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]); }

else if(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]); }

else if(adjust1==5) {

flag=flag+1; if(flag==1) { init();

xianshi(5,pwm_1,0xc0); }



19


write_command(0xc0+5); write_date(shu[tiao/10]); write_command(0xc0+6); write_date(shu[tiao%10]); }

else if(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]); }

else if(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);



20


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; }

else if(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('.') ;



21


write_command(0xc0+15); write_date(AD_buffer[2]); } } }

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

子程序部分

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

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

AD采集

*******************************/ void AD_caiji(uchar x) {

csad=0;

WR1=0; //启动ad _nop_(); WR1=1; delay1();

AD_data=0xff; RD1=0;

AD_buffer[x]=AD_data; RD1=1; WR1=0; }

void chunshu() //数据存储 {

uchar i;

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

AD_caiji(i); } }

/******************************************** 滤波模块

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

**********************************************/ void lvbo() { uchar x,y; uint buff;

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



22


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; }

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

键盘查询

*************************************/ void delay1() {

uchar g,h;

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

void du_key1() {

key1=1; if(key1==0) {

delay1(); if(key1==0) {

flag=0;

adjust1=adjust1+1; if(adjust1==8) {

adjust1=0; }



23


}

while(key1==0); } }

void du_key2() {

key2=1; if(key2==0) {

delay1(); if(key2==0) {

if(adjust1==1) { adjust2=adjust2+1;

if(adjust2==5) // 十位 {

adjust2=0; } } else if(adjust1==2) { adjust3=adjust3+1; // 个位 if(adjust3==10) { adjust3=0; } } else if(adjust1==4) { adjust4=adjust4+1; // 密码 } else if(adjust1==5) { // 调节pwm的占空比 增加 tiao=tiao+1; if(tiao==101) tiao=0; } else if(adjust1==6) // 调节pwm的占空比 减少 { tiao=tiao-1; if(tiao==0) { tiao=100;



24


} } }

while(key2==0); } }

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

温度线性处理模块

***************************************/ void line_processer(uchar x,uchar f) {

uchar y,z=0;

for(y=0;y {

if(f>=Fen_duan[y][0]&&f { z=y;

wendu=(f-Fen_duan[z][0])/slope[z]+Fen_duan[z][2]; } } }

void deep_chuli(float y) {

int x; x=y*10;

AD_buffer[0]=shu[x/100];

AD_buffer[1]=shu[(x-(x/100)*100)/10]; AD_buffer[2]=shu[x%10]; }

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

一天的平均温度

***************************************/ void day_average() {

uchar x; float y=0;

for(x=0;x<48;x++) {

average=Tem_buffer[x]; line_processer(15,average); y=y+wendu; }

wendu=y/48; }



25


/************************************* 报警模块

**************************************/ void baojin() {

if(wendu>=35||wendu<=10) {

beep=0; }

else if(wendu<=34||wendu>=11) {

beep=1; } }



26


本文来源:https://www.wddqxz.cn/2757cdca514de518964bcf84b9d528ea81c72fe7.html

相关推荐